Objavljen NBD-VRAM

Objavljen je otvoreni projekt NBD-VRAM, koji omogućava korišćenje dela VRAM memorije NVIDIA GPU-a kao swap prostora u Linuxu. Projekt je prvenstveno usmeren na laptopove sa integrisanom RAM memorijom, gde se RAM ne može proširiti, ali se u sistemu nalazi diskretna NVIDIA RTX/GTX grafička kartica sa neiskorišćenom VRAM-om. Kod je napisan u C-u i shell-u, i distribuira se pod licencom MIT.

Ideja NBD-VRAM-a je jednostavna: ako sistem već počinje da koristi swap na SSD-u, može da postavi još jedan međusloj ispred SSD-a — VRAM. Autor daje primer laptopa sa RTX 3070 Laptop: od 8 GB VRAM-a, 7 GB je dodeljeno za swap, a ukupno sa RAM-om, zram-om i SSD swap-om, sistem je dobio oko 46 GB adresibilne memorije. Predloženi redosled preopterećenja je sledeći: prvo se koristi RAM, zatim VRAM kao brzi swap, zatim zram, i samo nakon toga SSD.

Tehnički gledano, NBD-VRAM ne dodaje novi drajver jezgra. Mali demon dodeljuje memoriju grafičke kartice preko CUDA Driver API, i zatim je vraća jezgru Linuxa kao blok uređaj preko NBD — Network Block Device — preko Unix socketa. Nakon povezivanja sa standardnim nbd-clientom, u sistemu se pojavljuje /dev/nbdX, koji se može formatirati kao običan swap putem mkswap i aktivirati preko swapon.

Autor posebno naglašava da je ovakav pristup odabran zbog ograničenja potrošačkih NVIDIA grafičkih kartica. Direktniji put preko NVIDIA P2P API-ja na GeForce, prema njegovim rečima, nailazi na EINVAL, jer su odgovarajuće mogućnosti zapravo dostupne samo za profesionalne i serverske modele. Opcija sa direktnim pristupom BAR1 takođe nije uspela: dostupno je samo malo mapirano područje, a čitanje iz preostalog dela vraća nuli. NBD pristup zaobilazi ovo ograničenje, jer koristi obične CUDA kopije cuMemcpyHtoD i cuMemcpyDtoH.

Возможности

  • Korišćenje VRAM-a kao običnog Linux swap-a. Nakon pokretanja, demon pruža VRAM kao /dev/nbd0 ili drugi NBD uređaj, koji za jezgro izgleda kao standardni blok uređaj.

  • Rad bez sopstvenog modula jezgra. Projekt ne zahteva pisanje, kompilaciju i održavanje posebnog kernel modula, ne koristi unutrašnje simbole NVIDIA drajvera i trebao bi da preživi ažuriranja jezgra i drajvera bez ponovne kompilacije.

  • Usmerenje na potrošačke NVIDIA GPU-ove. V zahtevah so navedeni NVIDIA GPU z CUDA podporo, vključno s potrošniškimi RTX\/GTX karticami, uradni NVIDIA gonilnik z libcuda.so.1, modul nbd v jedru Linux, nbd-client, gcc in make. CUDA Toolkit v tem primeru ni potreben.

  • systemd-integracija. Namestitev preko install.sh doda storitev vram-swap-nbd, ki jo lahko zagnate preko systemctl; po namestitvi se storitev vključi za samodejni zagon ob bootanju.

  • Nastavitev velikosti in prioritete swap-a. V enoti systemd lahko nastavite VRAM_SETUP_SIZE_MB, torej zgornjo mejo dodeljene VRAM, in VRAM_SWAP_PRIORITY, torej prioriteto swap naprave. Višja prioriteta pomeni, da bo Linux prej uporabil to swap plast.

  • Samodejno zmanjšanje zahtevane velikosti. Če zahtevan obseg VRAM ni na voljo, demon poskuša zmanjšati velikost v blokih po 512 MiB, da kljub temu dodeli na voljo obseg, na primer, če je del pomnilnika že zaseden s kompozitorjem ali grafično sejo.

  • Preveritveni scenariji. V repozitoriju je test-nbd.sh za smoke-test z zapisovanjem\/branjem 1 MiB in test-fill.sh za stresno testiranje celotnega VRAM razdelka.

  • Navedena zmogljivost približno 1,3 GB\/s. Na RTX 3070 Laptop je avtor izmeril sekvencno pisanje 7 GB v blokih po 4 MB približno na ravni 1,3 GB\/s.

Scenariji uporabe

Prenosniki z vgrajeno RAM. Glavni scenarij so moderna prenosna računalnika, kjer 16 ali 32 GB pomnilnika že ni dovolj, vendar ga ni mogoče razširiti. Če ima takšno napravo diskreten RTX grafični procesor, lahko del VRAM uporabite kot dodatno swap plast. To ne spremeni VRAM v polnopravno RAM, vendar lahko reši sistem pred nenadnim preklopom na počasen SSD swap ali pred OOM-ubijalcem ob vrhuncu obremenitev.

Težka delovna okolja razvijalca. IDE, brskalnik z desetinami zavihkov, Docker kontejnerji, lokalne zbirke podatkov, gradnje velikih projektov in testna okolja enostavno ustvarjajo kratkotrajne vrhove porabe pomnilnika. V tem scenariju NBD-VRAM lahko deluje kot blažilec: ne pospeši običajnega dela, temveč omili trenutek, ko RAM poči.

Zmanjšanje obremenitve na SSD swap. Če se swap na SSD pogosto uporablja, je to ne le počasneje, ampak tudi povzroča dodatno pisanje na napravo. VRAM swap lahko postavite z višjim prioritetom, tako da sistem najprej odrine strani v video pomnilnik in šele nato dostopa do SSD, kadar pride do prenapolnjenosti RAM. To je še posebej pomembno za prenosnike, kjer je SSD pogosto tudi težko zamenjati ali drag.

Kombinacija z zram. Avtor neposredno opisuje shemo, kjer VRAM swap pridobi višji prioritet in sprejme prvo 'prelivanje' pomnilnika, zram se uporablja kot naslednja raven, SSD pa ostaja zadnja obrambna linija. Ta shema je lahko koristna za delovne postaje in prenosnike, kjer je pomembneje ohraniti odzivnost sistema pri pomanjkanju pomnilnika, kot pa doseči največjo predvidljivost zakasnitev.

Lokalne AI/LLM naloge okoli GPU, vendar ne namesto VRAM za model. NBD-VRAM ne povečuje video pomnilnika, dostopnega CUDA aplikaciji kot VRAM za model. To je obratni scenarij: ne RAM se uporablja kot VRAM, ampak VRAM se uporablja kot swap za običajno Linux pomnilnik. Zato projekt ne bo omogočil neposrednega nalaganja večjega modela v GPU. Lahko pa je koristen na napravi, kjer poleg LLM inference delujejo brskalniki, IDE, indeksatorji, Python okolja in vsebniki, medtem ko se sistemski RAM začne izčrpavati.

Domače in eksperimentalne delovne postaje. Projekt je zanimiv za uporabnike, ki pogosto pustijo grafično kartico neizkoriščeno zunaj iger, renderiranja ali ML nalog. Na primer, 8-12 GB VRAM na namizni GeForce lahko začasno pretvorite v dodatno plast swap za težke naloge kompilacije, obdelave podatkov ali zagon. virtualnih naprav.

Omejitve

NBD-VRAM ni nadomestilo za sistemski pomnilnik. Dostop do takega swap poteka po verigi kernel swap → /dev/nbdX → nbd gonilnik → Unix socket → demon → CUDA kopiranje → VRAM, zato bodo zakasnitve in vedenje drugačni od pravega RAM. To je bolj nujna ali prehodna plast med RAM in SSD, kot pa način 'dodajanja pomnilnika' brez posledic.

Projekt je tudi povezan z uradnim NVIDIA skladom s CUDA. Nouveau/Nova za to nista primerna, saj zahteva libcuda.so.1. Phoronix tudi opaža, da je NBD-VRAM zasnovan prav za potrošniške NVIDIA GPU, kjer alternativni pristopi preko NVIDIA P2P API ne delujejo.

V suhem ostanku, NBD-VRAM je manjši, a zanimiv sistemski hack za Linux: ne dela čudežev in ne nadomešča nadgradnje RAM-a, ampak omogoča uporabo neizkoriščene video pomnilnosti kot dodatne stopnje swap pred SSD. Za prenosnike z vgrajenim pomnilnikom in diskretno RTX grafično kartico je to lahko praktičen način za obvladovanje vrhunskih obremenitev brez takojšnjega padca aplikacij ali bolečega zmanjšanja hitrosti shranjevanja.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster