NBD-VRAM është publikuar

Projekti i hapur është publikuar NBD-VRAM, i cili lejon përdorimin e një pjese të memories video të GPU-ve NVIDIA si hapësirë swap në Linux. Projekti është orientuar kryesisht për laptopët me RAM të integruar, ku nuk është e mundur të zgjerohet RAM-i, por në të njëjtën kohë sistemi ka një kartë grafike diskrete NVIDIA RTX/GTX me VRAM të pashfrytëzuar. Kodi është shkruar në C dhe shell, dhe shpërndahet nën licencë MIT.

Ideja e NBD-VRAM është e thjeshtë: nëse sistemi fillon të kalohet në swap në SSD, mund të vendoset para SSD-së një shtresë përmes memories video. Autori jep shembullin e një laptopi me RTX 3070 Laptop: nga 8 GB VRAM ishin caktuar 7 GB për swap, ndërsa në total me RAM-in, zram dhe SSD swap sistemi mori rreth 46 GB memorie të adresueshme. Rendi i parashikuar i mbushjes është si më poshtë: së pari përdoret RAM-i, pastaj VRAM si swap i shpejtë, pastaj zram, dhe vetëm pas kësaj SSD.

Teknikisht, NBD-VRAM nuk shton njĂ« drejtues tĂ« ri tĂ« kernel-it. NjĂ« demon i vogĂ«l rezervon memorjen e kartĂ«s grafike pĂ«rmes CUDA Driver API, pastaj ia jep kernel-it tĂ« Linux-it si njĂ« pajisje blloku pĂ«rmes NBD — Device Bllok Rrjeti — mbi njĂ« socket Unix. Pas lidhjes me nbd-client standard, nĂ« sistem shfaqet /dev/nbdX, e cila mund tĂ« formohet si njĂ« swap i zakonshĂ«m pĂ«rmes mkswap dhe tĂ« aktivizohet pĂ«rmes swapon.

Autori nënvizon veçanërisht se ky qasje është zgjedhur për shkak të kufizimeve të kartave grafike të konsumatorëve NVIDIA. Një rrugë më e drejtpërdrejtë përmes NVIDIA P2P API në GeForce, sipas tij, godet në EINVAL, pasi mundësitë e lidhura janë në fakt të disponueshme vetëm për modelet profesionale dhe serverike. Variantet me adresimin e drejtpërdrejtë në BAR1 gjithashtu nuk kanë funksionuar: ajo që është e disponueshme është vetëm një zonë e vogël për tregim, dhe leximi nga pjesët e tjera kthehet zero. Qasja NBD e anashkalon këtë kufizim, pasi përdor kopjet e zakonshme CUDA cuMemcpyHtoD dhe cuMemcpyDtoH.

Mundësitë

  • PĂ«rdorimi i VRAM si swap i zakonshĂ«m Linux. Pas aktivizimit, demoni ofron memorjen e videos si /dev/nbd0 ose njĂ« tjetĂ«r pajisje NBD, e cila pĂ«r kernel-in duket si njĂ« pajisje standarde blloku.

  • Punon pa njĂ« modul tĂ« vetin tĂ« kernel-it. Projekti nuk kĂ«rkon tĂ« shkruajĂ«, tĂ« ndĂ«rtojĂ« dhe tĂ« mbajĂ« njĂ« modul tĂ« veçantĂ« tĂ« kernel-it, nuk pĂ«rdor simbolet e brendshme tĂ« drejtuesit NVIDIA dhe duhet tĂ« pĂ«rballojĂ« azhurnimet e kernel-it dhe drejtuesit pa rikonstruim.

  • Orientimi nĂ« grafikĂ«t NVIDIA tĂ« konsumit. NĂ« kĂ«rkesa pĂ«rfshihen GPU-tĂ« NVIDIA me mbĂ«shtetje pĂ«r CUDA, duke pĂ«rfshirĂ« kartat RTX/GTX pĂ«r konsumatorĂ«t, ndihmĂ«sin zyrtar NVIDIA me libcuda.so.1, modulin nbd nĂ« bĂ«rthamĂ«n Linux, nbd-client, gcc dhe make. Toolkit CUDA nuk nevojitet.

  • Integrimi me systemd. Instalimi pĂ«rmes install.sh shton shĂ«rbimin vram-swap-nbd, i cili mund tĂ« aktivizohet pĂ«rmes systemctl; pas instalimit, shĂ«rbimi aktivizohet pĂ«r tĂ« filluar automatikisht gjatĂ« ngarkimit.

  • Konfigurimi i madhĂ«sisĂ« dhe prioritetit tĂ« swap. NĂ« unit-in systemd, mund tĂ« pĂ«rcaktohet VRAM_SETUP_SIZE_MB, qĂ« Ă«shtĂ« kufiri maksimal i VRAM tĂ« dedikuar, dhe VRAM_SWAP_PRIORITY, qĂ« Ă«shtĂ« prioriteti i pajisjes swap. Sa mĂ« i lartĂ« tĂ« jetĂ« prioriteti, aq mĂ« herĂ«t Linux do tĂ« pĂ«rdorĂ« kĂ«tĂ« shtresĂ« swap.

  • Automatizimi i reduktimit tĂ« madhĂ«sisĂ« sĂ« kĂ«rkuar. NĂ«se vĂ«llimi i kĂ«rkuar i VRAM nuk Ă«shtĂ« i disponueshĂ«m, demon pĂ«rpiqet tĂ« reduktojĂ« madhĂ«sinĂ« me blloqe tĂ« 512 MiB, pĂ«r tĂ« ndarĂ« njĂ« vĂ«llim tĂ« disponueshĂ«m, pĂ«r shembull nĂ«se pjesĂ« e memories janĂ« tashmĂ« tĂ« zĂ«na nga kompozitori ose sesioni grafik.

  • SkenarĂ«t verifikues. NĂ« depo Ă«shtĂ« test-nbd.sh pĂ«r testin e tymit me shkruarje/lexim 1 MiB dhe test-fill.sh pĂ«r testin e lodhjes tĂ« gjithĂ« seksionit VRAM.

  • Performanca e deklaruar Ă«shtĂ« rreth 1,3 GB/s. NĂ« RTX 3070 Laptop, autori mat njĂ« shkruarje tĂ« vazhdueshme 7 GB me blloqe prej 4 MB nĂ« njĂ« nivel afĂ«rsisht 1,3 GB/s.

Skenarët e përdorimit

Laptopët me RAM të integruar. Skenari kryesor është laptopët modernë, ku 16 ose 32 GB RAM nuk mjaftojnë, por nuk është e mundur të zgjerohen ato. Në një makinë të tillë, nëse ka një kartë RTX të dedikuar, një pjesë e VRAM mund të përdoret si një shtresë shtesë swap. Kjo nuk e kthen VRAM në RAM të plotë, por mund të shpëtojë sistemin nga një kalim të papritur në SSD swap të ngadalshëm ose nga OOM-killer gjatë ngarkesave të larta.

Mjediset e ngarkuara të punës së zhvilluesit. IDE, shfletuesi me dhjetëra skedë, kontenierët Docker, bazat e të dhënave lokale, ndërtimet e projekteve të mëdha dhe mjediset e testeve lehtë krijojnë maja të përkohshme të konsumit të memories. Në një skenar të tillë, NBD-VRAM mund të funksionojë si një tampon: të mos përshpejtojë punën normale, por të zbusë momentin kur RAM-i është mbaruar.

Ulja e ngarkesës në SSD swap. Nëse swap-i në SSD përdoret shpesh, kjo jo vetëm që është më e ngadaltë, por gjithashtu krijon regjistrime të tepërta në pajisje. Swap-i VRAM mund të vendoset me një prioritet më të lartë, në mënyrë që kur RAM-i mbushet, sistemi të largojë fillimisht faqe në memorien video dhe vetëm pastaj të drejtohet te SSD. Kjo është veçanërisht e rëndësishme për laptopët, ku SSD shpesh është i paqartë ose i shtrenjtë për t'u zëvendësuar.

Kombinimi me zram. Autori e përshkruan drejtpërdrejt skemën, ku swap-i VRAM merr prioritet më të lartë dhe merr 'shpërndarjen' e parë të memories, zram përdoret si niveli i ardhshëm, ndërsa SSD mbetet linja e fundit e mbrojtjes. Kjo skemë mund të jetë e dobishme për stacionet e punës dhe laptopët, ku është më e rëndësishme të ruhet reagimi i sistemit në rast të mungesës së memories sesa të arrihet maksimumi i parashikueshmërisë së vonesave.

Detyrat lokale AI/LLM rreth GPU, por jo në vend të VRAM për modelin. NBD-VRAM nuk aumenton memorien e videos, e cila është e disponueshme për aplikacionin CUDA si VRAM për modelin. Kjo është një skenar i kundërt: jo RAM-i përdoret si VRAM, por VRAM-i përdoret si swap për memorien e zakonshme të Linux. Prandaj, projekti nuk do të lejojë ngarkimin direkt në GPU të një modeli më të madh. Por ai mund të jetë i dobishëm në një makinë, ku përveç LLM-inference punojnë një shfletues, IDE, indekset dhe kontejnerë, ndërsa RAM-i sistemor fillon të mbarojë.

Stacionet e punĂ«s shtĂ«piake dhe eksperimentale. Projekti Ă«shtĂ« interesant pĂ«r pĂ«rdoruesit, tĂ« cilĂ«t kanĂ« kartĂ«n grafike qĂ« shpesh tĂ« mbetet e papĂ«rdorur jashtĂ« lojĂ«rave, renderimit ose detyrave ML. PĂ«r shembull, 8–12 GB VRAM nĂ« GeForce desktop mund tĂ« kthehet pĂ«rkohĂ«sisht nĂ« njĂ« shtresĂ« shtesĂ« swap pĂ«r detyra tĂ« rĂ«nda si kompilimi, pĂ«rpunimi i tĂ« dhĂ«nave ose ekzekutimi. makinat virtuale.

Kufizimet

NBD-VRAM nuk Ă«shtĂ« njĂ« zĂ«vendĂ«sim i memories operative. Qasja nĂ« kĂ«tĂ« swap shkon nĂ«pĂ«r njĂ« zinxhir kernel swap → /dev/nbdX → nbd-driver → Unix-socket → demon → CUDA-kopjim → VRAM, prandaj vonesat dhe sjellja do tĂ« jenĂ« tĂ« ndryshme nga RAM-i i vĂ«rtetĂ«. Kjo Ă«shtĂ« mĂ« shumĂ« njĂ« shtresĂ« emergjente ose ndĂ«rmjetĂ«se midis RAM-it dhe SSD-sĂ« sesa njĂ« mĂ«nyrĂ« pĂ«r 'tĂ« shtuar memories' pa pasojat.

Gjithashtu projekti është lidhur me stakun zyrtar NVIDIA me CUDA. Nouveau/Nova nuk janë të përshtatshme për këtë, pasi kërkohet libcuda.so.1. Phoronix po ashtu vëren, se NBD-VRAM është krijuar pikërisht për GPU-të e konsumatorëve NVIDIA, ku qasjet alternative përmes NVIDIA P2P API nuk funksionojnë.

Në përfundim, NBD-VRAM është një hile e vogël, por interesante për sistemin Linux: nuk bën mrekulli dhe nuk zëvendëson rritjen e RAM-it, por lejon përdorimin e memories së hartës video që shkoret si një nivel shtesë swap para SSD-së. Për laptopët me memorje të integruar dhe kartë RTX, kjo mund të jetë një mënyrë praktike për të përballuar ngarkesat maksimale pa rënë menjëherë aplikacionet ose duke kaluar në një shkallë të ngadalshme.

Burimi: linux.org.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster