Közzétett egy nyílt projektet NBD-VRAM, amely lehetővé teszi, hogy a NVIDIA GPU videomemóriájának egy részét swap-területként használjunk Linux alatt. A projekt elsősorban azokra a laptopokra összpontosít, ahol a RAM forrasztva van, és nem bővíthető, de van egy dedikált NVIDIA RTX/GTX grafikus kártya, amelyen van kihasználatlan VRAM. A kód C és shell nyelven íródott, és licenc alatt terjesztik. MIT.
Az NBD-VRAM ötlete egyszerű: ha a rendszer már elkezd swap-elni az SSD-n, a SSD elé egy köztes réteget tehetünk - a videomemóriát. A szerző példát hoz egy RTX 3070 Laptop-ra: a 8 GB VRAM-ból 7 GB-ot swapként különítettek el, így összesen a RAM, zram és SSD swap segítségével a rendszer körülbelül 46 GB címzhető memóriát kapott. A tervezett túltöltési sorrend a következő: először a RAM használódik, majd a VRAM mint gyors swap, utána a zram, és végül az SSD.
Technikailag az NBD-VRAM nem ad hozzá új kernelt drivert. Egy kis démon a videokártya memóriáját osztja ki a CUDA Driver API, majd a Linux kernelnek egy blokkeszközként adja át az NBD - Network Block Device - felett egy Unix socketen keresztül. Az csatlakozás után a standard nbd-client a rendszerben megjelenít egy /dev/nbdX-et, amelyet hagyományos swap-ként formázhatunk mkswap segítségével, és bekapcsolhatunk swapon keresztül.
A szerző külön hangsúlyozza, hogy ez a megközelítés a NVIDIA fogyasztói grafikus kártyák korlátai miatt lett választva. Az NVIDIA P2P API-n keresztüli közvetlen út GeForce alatt állítása szerint EINVAL-be ütközik, mivel a megfelelő lehetőségek ténylegesen csak a professzionális és szerver modellek számára elérhetőek. A BAR1 közvetlen elérési lehetősége szintén nem működött: a hozzáférhető terület csak egy kis leképezett terület volt, míg a többi rész olvasása nullákat ad vissza. Az NBD megközelítés megkerüli ezt a korlátozást, mivel a szokásos CUDA másolásokat, mint a cuMemcpyHtoD és cuMemcpyDtoH, használja.
Lehetőségek
A VRAM használata mint hagyományos Linux swap. A demon elindításakor a videomemóriát /dev/nbd0 vagy más NBD-eszközként biztosítja, amely a kernel számára mint standard blokkeszköz jelenik meg.
Működés saját kernel modul nélkül. A projekt nem igényel külön kernel modul írását, összeállítását és karbantartását, nem használja a NVIDIA driver belső szimbólumait, és túlélheti a kernel és driver frissítéseit újraépítés nélkül.
Fókuszálás a fogyasztói NVIDIA GPU-kra. A követelmények között szerepel a CUDA támogatással rendelkező NVIDIA GPU, beleértve a fogyasztói RTX/GTX kártyákat, az hivatalos NVIDIA-illesztőprogramot a libcuda.so.1 fájlhoz, az nbd modult a Linux kernelben, az nbd-clientet, a gcc-t és a make-et. A CUDA Toolkit nem szükséges.
systemd-integráció. Az install.sh telepítés a vram-swap-nbd szolgáltatást adja hozzá, amelyet a systemctl-en keresztül lehet indítani; a telepítés után a szolgáltatás automatikusan elindul induláskor.
A swap méretének és prioritásának beállítása. A systemd-unit-ben meg lehet adni a VRAM_SETUP_SIZE_MB-t, vagyis a kiosztható VRAM felső határát, és a VRAM_SWAP_PRIORITY-t, vagyis a swap-eszköz prioritását. Minél magasabb a prioritás, annál hamarabb használja ezt a swap réteget a Linux.
A kért méret automatikus csökkentése. Ha a szükséges VRAM mennyiség nem áll rendelkezésre, a démon 512 MiB blokkokban próbálja meg csökkenteni a méretet, hogy a rendelkezésre álló mennyiséget kioszthassa, például ha a memória egy része már foglalt a kompozitor vagy a grafikus munkamenet által.
Tesztelő szkriptek. A tárolóban található a test-nbd.sh egy 1 MiB írási/olvasási smokk-teszthez, valamint a test-fill.sh a teljes VRAM-partíció stresszteszteléséhez.
A megadott teljesítmény körülbelül 1,3 GB/s. Az RTX 3070 Laptop esetében a szerző 7 GB sorozatos írást mért 4 MB blokkokban, körülbelül 1,3 GB/s sebességgel.
Alkalmazási forgatókönyvek
Forrasztott RAM-mal rendelkező laptopok. A fő forgatókönyv — a modern laptopok, ahol a 16 vagy 32 GB RAM már nem elegendő, de annak bővítése lehetetlen. Ha egy ilyen gépben van dedikált RTX kártya, a VRAM egy része használható extra swap rétegként. Ez nem alakítja át a VRAM-ot teljes körű RAM-má, de megmentheti a rendszert a hirtelen lassú SSD swapra való átmenettől vagy az OOM-killertől csúcs terhelések alatt.
Fejlesztői környezetek. IDE, böngésző több tucat füllel, Docker konténerek, helyi adatbázisok, nagyméretű projektek összeállítása és tesztkörnyezetek könnyedén okozhatnak rövid távú memóriaigény-pótlásokat. Ilyen forgatókönyvben az NBD-VRAM pufferként funkcionálhat: nem gyorsítja a hagyományos munkát, hanem tompítja azt a pillanatot, amikor a RAM elfogy.
A SSD swap terhelésének csökkentése. Ha a swap SSD-n gyakran használatos, az nemcsak lassabb, hanem felesleges írást is generál a tárolón. A VRAM-swapot magasabb prioritásra lehet állítani, így ha a RAM megtelik, a rendszer először a videomemóriába helyezi át az oldalakat, és csak ezután fordul az SSD-hez. Ez különösen releváns a laptopok esetében, ahol az SSD gyakran nem eltávolítható, vagy drága a csere.
Zram-mal kombinálva. A szerző egyértelműen leírja azt a sémát, ahol a VRAM swap magasabb prioritást kap, és elsőként kapja el a memóriát, míg a zram következő szinten, az SSD pedig az utolsó védelmi vonalként marad. Ez a séma hasznos lehet munkaállomások és laptopok számára, ahol fontosabb a rendszer reakcióképességének megőrzése memóriahiány esetén, mint a késleltetések maximális előrejelzése.
Helyi AI/LLM feladatok a GPU körül, de nem a VRAM helyett a modellhez. NBD-VRAM nem növeli a CUDA alkalmazás számára elérhető videomemóriát, mint VRAM a modellhez. Ez egy ellenkező forgatókönyv: nem a RAM használatos VRAM-ként, hanem a VRAM szwapként működik a Linux normál memóriájához. Ezért a projekt nem teszi lehetővé nagyobb méretű modell közvetlen betöltését a GPU-ba. De hasznos lehet olyan gépeken, ahol LLM-inferencia mellett böngésző, IDE, indexelői, Python környezetek és konténerek is futnak, míg a rendszer RAM-ja kezd kifogyni.
Otthoni és kísérleti munkaállomások. A projekt érdekes azok számára, akiknek a grafikus kártyája gyakran tétlen a játékok, renderelés vagy ML-feladatok mellett. Például az 8–12 GB VRAM egy asztali GeForce-on ideiglenesen extra swap réteggé alakítható nehéz fordítási, adatfeldolgozási vagy indítási feladatokhoz. virtuális gépekhez.
Korlátozások
NBD-VRAM nem helyettesíti a RAM-ot. A swaphoz való hozzáférés a következő láncon keresztül történik: kernel swap → /dev/nbdX → nbd-illesztő → Unix-szokett → démon → CUDA másolás → VRAM, ezért a késleltetések és a viselkedés eltérőek lesznek a valódi RAM-hoz képest. Inkább egy vészhelyzeti vagy átmeneti réteg a RAM és az SSD között, mintsem a memória „növelésének” módszere következmények nélkül.
A projekt emellett a hivatalos NVIDIA CUDA stack-re épül. A Nouveau/Nova nem megfelelő, mivel szükséges a libcuda.so.1. Phoronix szintén megjegyzi, hogy az NBD-VRAM kifejezetten fogyasztói NVIDIA GPU-k számára készült, ahol az alternatív megoldások az NVIDIA P2P API-n keresztül nem működnek.
A végső soron az NBD-VRAM egy kis, de érdekes rendszerhack Linuxhoz: nem csodákat tesz, és nem helyettesíti a RAM-frissítést, de lehetővé teszi a kihasználatlan videomemória használatát, mint egy kiegészítő swap lépést az SSD előtt. Azoknál a laptopoknál, amelyekben az memória forrasztott és diszkrét RTX-kártya van, ez praktikus módja lehet a csúcs terhelések átvészelésének anélkül, hogy az alkalmazások azonnal összeomlanának vagy fájdalmasan lassú adathordozóhoz kerülnek.
Forrás: linux.org.ru
