Öreg GPU-n fut 3 AI-modell egyszerre — új C++ daemon segíti a párhuzamos futtatást
Egy Anubhab Banerjee által fejlesztett, mindössze 1500 soros C++ daemon, a lmxd megoldást kínál arra, hogy három kis LLM — köztük a Llama 3.2 1B — egyszerre fusson egy 8 GB-os GTX 1080 GPU-n.

Az AI-fejlesztők gyakran szembesülnek azzal a problémával, hogy egy régebbi, korlátozott VRAM-mal rendelkező GPU-n nem tudnak több AI-ügynököt és az általuk használt modelleket párhuzamosan futtatni. A hagyományos llama.cpp például előre lefoglalja a teljes KV cache-t, ami memóriakiakadást (OOM) okoz, ha több folyamatot indítanak. Anubhab Banerjee egy új, lmxd nevű C++ daemonnal kínál erre megoldást, amely 5G-stílusú kapcsolatkezelést és aszinkron pipeliningot használ. (Towards Data Science)
A KV cache és a memóriakiakadás problémája
A probléma lényege, hogy a llama.cpp a dekódolás során használt KV cache-t a teljes konfigurált kontextusablakra előre lefoglalja. Egy GTX 1080-as, 8 GB VRAM-mal rendelkező kártyán ez az első modell betöltésekor már 6536 MiB-ot foglalhat le. Amikor egy második vagy harmadik modell próbál betöltődni, a CUDA már nem tud elegendő memóriát allokálni, ami összeomláshoz vezet. Ez nem a llama.cpp hibája, hanem a biztonságos működésre törekszik egyetlen folyamat esetén, de több párhuzamos folyamatnál már nem elegendő.Kapcsolódó: tartós memória LLM-ekben
A lmxd daemon működése
A lmxd daemon úgy működik, mint egy GPU-tulajdonos, aki az ügynökök nevében kezeli a memóriát. Az ügynökök nem maguk indítják a llama-completion folyamatokat, hanem egy egyszerű szöveges protokollon keresztül kommunikálnak a daemonnal. A lmxd dönti el, hogy az új ügynök elfér-e, mielőtt betöltené a modellt. A működés alapelve, hogy a GPU VRAM-jának maximum 90%-át engedi használni, és csak akkor fogad be új ügynököt, ha a jelenlegi használat és az új modell becsült mérete nem haladja meg ezt a határt.Kapcsolódó: gyorsított chatbot motor
A daemon mindössze körülbelül 1500 soros C++17 kódot tartalmaz, és egyetlen folyamatként fut. A VRAM-használat kezelése egy `VramLedger` osztályban történik, amely biztosítja, hogy a párhuzamos kérések ne okozzanak túlfoglalást. A `try_reserve` metódus egy mutex segítségével garantálja, hogy két egyidejű `REGISTER` kérés ne tudja túllépni a maximális VRAM-kapacitást. Az új ügynök csak akkor kap helyet, ha a ledger sikeresen lefoglalja számára a szükséges memóriát.
Kapcsolódó: nyílt forráskódú adatbázis memória
A fejlesztő, Anubhab Banerjee szerint ez a megoldás lehetővé teszi, hogy olyan kis modellek, mint a Llama 3.2 1B, a Qwen2 0.5B és a SmolLM2 360M, egyidejűleg fussanak egy 8 GB-os GPU-n. Az új megközelítés csökkenti az egy modellre jutó VRAM-fogyasztást, és valós idejű, többügynökös munkafolyamatokat tesz lehetővé régebbi hardvereken is. A megoldást egy kis nyílt forráskódú C++ programként tették elérhetővé.
Kapcsolódó: AMD GPU LLM futtatás