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
