Pubblicato NBD-VRAM

Pubblicato un progetto aperto NBD-VRAM, che consente di utilizzare parte della memoria video della GPU NVIDIA come spazio di swap in Linux. Il progetto è principalmente rivolto a laptop con memoria RAM saldata, dove la RAM non può essere espansa, ma nel sistema è presente una scheda video discreta NVIDIA RTX/GTX con VRAM inutilizzata. Il codice è scritto in C e shell, e viene distribuito sotto licenza MIT.

L'idea di NBD-VRAM è semplice: se il sistema inizia già a utilizzare lo swap su SSD, si può inserire un ulteriore strato intermedio prima dell'SSD: la memoria video. L'autore cita l'esempio di un laptop con RTX 3070 Laptop: da 8 GB di VRAM ne sono stati allocati 7 GB per lo swap e, considerando RAM, zram e swap su SSD, il sistema ha ottenuto circa 46 GB di memoria indirizzabile. L'ordine previso di sovraccarico è il seguente: prima si utilizza la RAM, poi la VRAM come swap veloce, poi zram e infine l'SSD.

Tecnicamente, NBD-VRAM non aggiunge un nuovo driver per il kernel. Un piccolo demone assegna la memoria della scheda video attraverso CUDA Driver API, poi la restituisce al kernel Linux come dispositivo a blocchi tramite NBD — Network Block Device — sopra un socket Unix. Dopo la connessione, il client nbd-standard fa apparire nel sistema \/dev\/nbdX, che può essere partitionato come un normale swap tramite mkswap e attivato tramite swapon.

L'autore sottolinea che questo approccio è stato scelto a causa delle limitazioni delle schede video consumer NVIDIA. Un percorso più diretto attraverso NVIDIA P2P API su GeForce, secondo quanto riferito, incontra EINVAL, poiché le relative funzionalità sono disponibili solo per modelli professionali e server. Anche l'opzione di accesso diretto a BAR1 non ha funzionato: si rivela solo una piccola area mappata e la lettura dalla restante parte restituisce zeri. L'approccio NBD supera questa limitazione poiché utilizza normali copie CUDA cuMemcpyHtoD e cuMemcpyDtoH.

Funzionalità

  • Utilizzo della VRAM come swap di Linux standard. Dopo l'avvio, il demone fornisce la memoria video come \/dev\/nbd0 o un altro dispositivo NBD, che per il kernel appare come un normale dispositivo a blocchi.

  • Funziona senza un proprio modulo di kernel. Il progetto non richiede di scrivere, compilare e mantenere un modulo kernel separato, non utilizza simboli interni del driver NVIDIA e dovrebbe sopravvivere agli aggiornamenti del kernel e del driver senza ricompilazione.

  • Orientamento verso GPU NVIDIA consumer. Nei requisiti sono indicate GPU NVIDIA con supporto CUDA, comprese le schede RTX/GTX per consumatori, il driver ufficiale NVIDIA con libcuda.so.1, il modulo nbd nel kernel Linux, nbd-client, gcc e make. Il CUDA Toolkit non è necessario.

  • Integrazione con systemd. L'installazione tramite install.sh aggiunge il servizio vram-swap-nbd, che può essere avviato tramite systemctl; dopo l'installazione, il servizio è attivato per avviarsi automaticamente all'accensione.

  • Impostazione della dimensione e della priorità dello swap. Nel systemd-unit è possibile specificare VRAM_SETUP_SIZE_MB, cioè il limite superiore della VRAM allocata, e VRAM_SWAP_PRIORITY, cioè la priorità del dispositivo di swap. Maggiore è la priorità, prima Linux utilizzerà questo strato di swap.

  • Riduzione automatica della dimensione richiesta. Se la quantità di VRAM richiesta non è disponibile, il demone tenta di ridurre la dimensione a blocchi di 512 MiB per allocare comunque la quantità disponibile, ad esempio se parte della memoria è già occupata da un compositore o da una sessione grafica.

  • Script di verifica. Nel repository è presente test-nbd.sh per un test di fumo con lettura/scrittura di 1 MiB e test-fill.sh per un test di stress sull'intera partizione VRAM.

  • Le prestazioni dichiarate sono di circa 1,3 GB/s. Su RTX 3070 Laptop, l'autore ha misurato una scrittura sequenziale di 7 GB a blocchi di 4 MB di circa 1,3 GB/s.

Scenari d'uso

Laptop con RAM saldata. Lo scenario principale sono i laptop moderni, dove 16 o 32 GB di RAM non sono più sufficienti, ma non è possibile espanderla. Se in tale macchina è presente una scheda RTX discreta, parte della VRAM può essere utilizzata come strato di swap aggiuntivo. Questo non trasforma la VRAM in RAM vera e propria, ma può salvare il sistema da un'improvvisa transizione a uno swap su SSD lento o da OOM-killer sotto carichi di lavoro elevati.

Ambientazioni di lavoro pesanti per sviluppatori. IDE, browser con decine di schede, contenitori Docker, database locali, costruzioni di grandi progetti e ambienti di test creano facilmente picchi temporanei nel consumo di memoria. In tale scenario, NBD-VRAM può funzionare come un buffer: non accelerare il lavoro normale, ma attenuare il momento in cui la RAM è esaurita.

Riduzione del carico sullo swap SSD. Se lo swap su SSD viene utilizzato frequentemente, non è solo più lento, ma crea anche scritture aggiuntive sul dispositivo. È possibile impostare il VRAM-swap con una priorità maggiore, in modo che, in caso di esaurimento della RAM, il sistema espelle prima le pagine nella memoria video e poi si rivolge all'SSD. Questo è particolarmente rilevante per i laptop, dove l'SSD è spesso non rimovibile o costoso da sostituire.

Combinazione con zram. L'autore descrive direttamente uno schema in cui il swap VRAM ha una priorità più alta e accetta il primo 'overrun' di memoria, lo zram viene utilizzato come secondo livello, e l'SSD rimane l'ultima linea di difesa. Questo schema può essere utile per workstation e laptop, dove è più importante mantenere la reattività del sistema in caso di insufficienza di memoria piuttosto che ottenere la massima prevedibilità dei ritardi.

Compiti AI/LLM locali attorno alla GPU, ma non al posto della VRAM per il modello. Il NBD-VRAM non aumenta la memoria video disponibile per l'applicazione CUDA come VRAM per il modello. Questo è lo scenario inverso: non è la RAM ad essere utilizzata come VRAM, ma la VRAM ad essere utilizzata come swap per la memoria normale di Linux. Pertanto, il progetto non consentirà di caricare direttamente nel GPU un modello di dimensioni maggiori. Tuttavia, può essere utile su una macchina dove, insieme all'inferenza LLM, funzionano browser, IDE, indicizzatori, ambienti Python e contenitori e la RAM di sistema comincia a scarseggiare.

Workstation domestiche ed esperimentali. Il progetto è interessante per gli utenti la cui scheda video è frequentemente inattiva al di fuori dei giochi, del rendering o di compiti ML. Ad esempio, 8-12 GB di VRAM su una GeForce desktop possono essere temporaneamente trasformati in uno strato aggiuntivo di swap per compiti pesanti di compilazione, elaborazione dei dati o avvio. macchine virtuali.

Limitazioni

Il NBD-VRAM non è una sostituzione della memoria operativa. L'accesso a tale swap avviene attraverso la sequenza kernel swap → /dev/nbdX → driver nbd → socket Unix → demone → copia CUDA → VRAM, pertanto i ritardi e il comportamento saranno diversi rispetto alla vera RAM. È più uno strato di emergenza o intermedio tra la RAM e l'SSD, piuttosto che un modo per 'aggiungere memoria' senza conseguenze.

Inoltre, il progetto è legato allo stack ufficiale NVIDIA con CUDA. Nouveau/Nova non sono adatti a questo, poiché è richiesta libcuda.so.1. Phoronix nota anche, che il NBD-VRAM è stato creato specificamente per le GPU NVIDIA consumer, dove approcci alternativi tramite NVIDIA P2P API non funzionano.

In sintesi, NBD-VRAM è un hack di sistema interessante ma piccolo per Linux: non fa miracoli e non sostituisce un aggiornamento della RAM, ma permette di utilizzare la memoria video in standby come un ulteriore livello di swap prima dell'SSD. Per i laptop con memoria saldata e scheda grafica RTX discreta, può rivelarsi un modo pratico per affrontare picchi di carico senza il rischio immediato di crash delle applicazioni o di un lento passaggio a un'unità di archiviazione più lenta.

Fonte: linux.org.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster