Avaldatud avatud projekt NBD-VRAM, mis vĂ”imaldab kasutada osa NVIDIA GPU videomĂ€lust Linuxi swap-ruumina. Projekt on suunatud peamiselt sĂŒlearvutitele, millel on joodetud muutmĂ€lu, kus RAM-i ei saa laiendada, kuid millel on diskreetne NVIDIA RTX/GTX graafikakaart, millel on kasutamata VRAM. Kood on kirjutatud C-s ja shellis, jaotatakse litsentsi alusel MIT.
NBD-VRAM idee on lihtne: kui sĂŒsteem hakkab juba SSD-le swapima, saab SSD ette seada ĂŒhe vahekihina - videomĂ€lu. Autor toob nĂ€iteks sĂŒlearvuti, millel on RTX 3070 Laptop: 8 GB VRAM-ist eraldati 7 GB swap-iks, ja koos RAM-i, zram ja SSD swapiga sai sĂŒsteem umbes 46 GB adresseeritavat mĂ€lu. Oodatav tĂ€itmisjĂ€rjekord on jĂ€rgmine: esmalt kasutatakse RAM-i, seejĂ€rel VRAM-i kiire swapina, seejĂ€rel zrami ning alles seejĂ€rel SSD-d.
Tehniliselt NBD-VRAM ei lisa uut kernelâi draiverit. VĂ€ike demon eraldab graafikakaardi mĂ€lu lĂ€bi CUDA Driver API, seejĂ€rel edastab selle Linuxi kerneli jaoks plokkseadmeks lĂ€bi NBD â Network Block Device â Unix-soketi peal. PĂ€rast ĂŒhendamist tavalise nbd-clientiga ilmub sĂŒsteemis /dev/nbdX, mida saab tavalise swapina mkswapiga vormindada ja swaponiga sisse lĂŒlitada.
Autor rĂ”hutab eraldi, et selline lĂ€henemine on valitud NVIDIA tarbijagraafikakaartide piirangute tĂ”ttu. Otsemineku tee lĂ€bi NVIDIA P2P API GeForceâile, tema sĂ”nul, takerdub EINVAL-i, kuna vastavad vĂ”imalused on tegelikult saadaval ainult professionaalsetes ja serverimudelites. Variant otse BAR1-le pöörduda ei töötanud samuti: saadaval on vaid vĂ€ike kaardistatud ala, samas kui ĂŒlejÀÀnud osa lugemine tagastab nullid. NBD-lĂ€henemine ĂŒletab selle piirangu, kasutades tavalisi CUDA kopeerimisi cuMemcpyHtoD ja cuMemcpyDtoH.
VÔimalused
VideomÀlu kasutamine tavalise Linuxi swapina. PÀrast kÀivitamist pakub demon videomÀlu kui /dev/nbd0 vÔi muud NBD-seadet, mis kernelile nÀeb vÀlja nagu standardne plokkseade.
Töötamine ilma eraldi kernelâi moodulita. Projekt ei nĂ”ua eraldi kernel mooduli kirjutamist, kompileerimist ja hooldamist, ei kasuta NVIDIA draiveri sisemisi sĂŒmboleid ja peaks taluma kernel'i ja draiveri uuendusi ilma ĂŒmberkompileerimiseta.
Suunatus tarbijate NVIDIA GPU-dele. NVIDIA GPU nÔuded CUDA toe ja tarbijate RTX/GTX kaardiga, ametlik NVIDIA draiver libcuda.so.1, Linuxi tuuma nbd moodul, nbd-client, gcc ja make. CUDA Toolkit ei ole vajalik.
systemd integreerimine. Installimine lĂ€bi install.sh lisab vram-swap-nbd teenuse, mida saab kĂ€ivitada lĂ€bi systemctl; pĂ€rast installimist on teenus automaatselt lubatud kĂ€ivituma sĂŒsteemi kĂ€ivitamisel.
Swap suuruse ja prioriteedi seadistamine. systemd-unitis saab mÀÀrata VRAM_SETUP_SIZE_MB, see tÀhendab maksimaalset eraldatavat VRAM-i, ja VRAM_SWAP_PRIORITY, see tÀhendab swap-seadme prioriteeti. Mida kÔrgem on prioriteet, seda varem Linux kasutab seda swap-kihina.
Automaatne vajalikku suurust vĂ€hendamine. Kui nĂ”utav VRAM-i maht pole saadaval, ĂŒritab demon vĂ€hendada suurust 512 MiB plokkides, et ikkagi eraldada saadaval maht, nĂ€iteks juhul, kui osa mĂ€lu on juba hĂ”ivatud komposiitori vĂ”i graafilise seansi poolt.
Kontrollimisstsenaariumid. Repositooriumis on test-nbd.sh smoketest 1 MiB kirjutamise/lugemisega ja test-fill.sh VRAM-i osa stressitestimiseks.
Kinnitatud jÔudlus umbes 1,3 GB/s. RTX 3070 Laptopiga mÔÔtis autor jÀrjestikust kirjutamist 7 GB plokkidena 4 MB, umbes 1,3 GB/s tasemel.
Rakenduste stsenaariumid.
SĂŒlearvutid, kus RAM on jootetud. Peamine stsenaarium on kaasaegsed sĂŒlearvutid, kus 16 vĂ”i 32 GB RAM on juba ebapiisav, kuid seda pole vĂ”imalik laiendada. Kui sellises masinas on diskreetne RTX kaardiga, saab osa VRAM-ist kasutada tĂ€iendava swap-kihina. See ei muuda VRAM-i tĂ€ielikuks RAM-iks, kuid vĂ”ib pÀÀsta sĂŒsteemi aeglustava SSD swapist vĂ”i OOM-killerist tipukoormuste eel.
Raskete arendustöökeskkondade jaoks. IDE, veebibrauserid tosinate vahelehtede, Docker konteinerite, kohalike andmebaaside, suurte projektide ehitamise ja testimiskeskkondadega loovad kergesti lĂŒhiajalisi mĂ€lutarbimise tippe. Sellises stsenaariumis vĂ”ib NBD-VRAM töötada puhverena: mitte kiirendama tavapĂ€rast töötlemist, vaid leevendama hetke, kui RAM on otsas.
SSD swap-i koormuse vĂ€hendamine. Kui swap SSD-l kasutatakse tihti, ei ole see mitte ainult aeglasem, vaid loob ka tarbetut kirjutamist salvestusse. VRAM-swap vĂ”ib seada kĂ”rgema prioriteedi, et RAM-i ĂŒlemÀÀrasuse korral sĂŒsteem esmalt vabastaks lehekĂŒljed videomĂ€lusse ja alles seejĂ€rel pöörduda SSD poole. See on eriti asjakohane sĂŒlearvutite puhul, kus SSD on sageli ka mittevahetatav vĂ”i kallis asendada.
Kombinatsioon zram-iga. Autor kirjeldab otse skeemi, kus VRAM swap saab kĂ”rgema prioriteedi ja aktsepteerib esimesena 'mĂ€lu ĂŒlejooksu', zram kasutatakse jĂ€rgmisel tasemel ja SSD jÀÀb viimaseks kaitseliiniks. Selline skeem vĂ”ib olla kasulik tööjaamade ja sĂŒlearvutite puhul, kus on tĂ€htsam sĂ€ilitada sĂŒsteemi reageerimisvĂ”ime mĂ€lu puudumisel kui saavutada maksimaalne viivituste prognoositavus.
Kohalikud AI/LLM-ĂŒlesanded GPU ĂŒmber, kuid mitte VRAM-i asemel mudeli jaoks. NBD-VRAM ei suurenda CUDA-rakendusele kĂ€ttesaadavat videomĂ€lu nagu VRAM mudeli jaoks. See on vastupidine stsenaarium: mitte RAM ei kasutata VRAM-ina, vaid VRAM-i kasutatakse Linuxi tavalise mĂ€luna. SeetĂ”ttu ei vĂ”imalda projekt otseselt laadida GPU-sse suuremat mudelit. Kuid see vĂ”ib olla kasulik masinal, kus LLM-analĂŒĂŒsi kĂ”rval töötavad brauserid, IDE, indekseerijad, Python-ĂŒmbrikud ja konteinerid ning sĂŒsteemi RAM hakkab otsa saama.
Kodused ja eksperimentaalsed tööjaamad. Projekt huvitab kasutajaid, kelle graafika kaart tihti mĂ€ngudest, renderdamisest vĂ”i ML-ĂŒlesannetest enam-vĂ€hem seisab. NĂ€iteks 8â12 GB VRAM-desktop GeForce saab ajutiselt muuta tĂ€iendavaks swap-kihiks raskete kompileerimise, andmete töötlemise vĂ”i kĂ€ivitamise ĂŒlesannete jaoks. virtuaalmasinate.
Piirangud
NBD-VRAM ei asenda operaatiivs mĂ€lu. Sellise swap-i juurde pÀÀsemine toimub ahelas kernel swap â /dev/nbdX â nbd-draiver â Unix-soket â daemon â CUDA-kopeerimine â VRAM, seega viivitused ja kĂ€itumine erinevad tĂ”elisest RAM-ist. See on pigem hĂ€daolukorra vĂ”i vahekiht RAM-i ja SSD vahel kui viis "mĂ€lu lisamiseks" ilma tagajĂ€rgedeta.
Samuti on projekt seotud ametliku NVIDIA stakiga koos CUDA-ga. Nouveau/Nova ei sobi selleks, kuna on vajalik libcuda.so.1. Phoronix mÀrkis samuti, et NBD-VRAM on loodud just tarbijatele mÔeldud NVIDIA GPU-de jaoks, kus alternatiivsed lÀhenemised NVIDIA P2P API kaudu ei toimi.
LĂ”ppkokkuvĂ”ttes on NBD-VRAM vĂ€ike, kuid huvitav sĂŒsteemihĂ€kk Linuxile: see ei tee imesid ega asenda RAM-i uuendamist, kuid vĂ”imaldab kasutada ooteolekus olevat graafikamuistut kui lisast swap-ruumi enne SSD-d. SĂŒlearvutitele, mille mĂ€lu on joodetud ja millel on diskreetne RTX-kaart, vĂ”ib see osutuda praktiliseks viisiks ĂŒleelada tipukoormusi ilma rakenduste kohese kokkuvarisemiseta vĂ”i valuliku ĂŒleminekuta aeglasele salvestusseadmele.
Allikas: linux.org.ru
