Publicēts NBD-VRAM

Publicēts atvērtais projekts NBD-VRAM, kas ļauj izmantot daļu NVIDIA GPU videomemories kā swap vietu Linux. Projekts ir orientēts galvenokārt uz klēpjdatoriem ar lodētām operatīvajām atmiņām, kur RAM nevar paplašināt, bet tajā pašā laikā sistēmā ir diskrētā NVIDIA RTX/GTX grafiskā karte ar neizmantotu VRAM. Kodējums ir rakstīts C un shell, izplatīts ar licenci MIT.

NBD-VRAM ideja ir vienkārša: ja sistēma jau sāk izmantot swap uz SSD, var ieviest vēl vienu starpslāni – videomemoriju. Autors sniedz piemēru ar klēpjdatoru uz RTX 3070 Laptop: no 8 GB VRAM tika piešķirti 7 GB swap, un kopā ar RAM, zram un SSD swap sistēma ieguva apmēram 46 GB adresējamas atmiņas. Iesniegtais pārspriedums ir šāds: vispirms izmanto RAM, tad VRAM kā ātru swap, pēc tam zram, un tikai pēc tam SSD.

Tehniski NBD-VRAM nepievieno jaunu kodola draiveri. Mazs demons piešķir videokartes atmiņu, izmantojot CUDA Driver API, tad nodod to Linux kodolam kā blokierīci caur NBD — Network Block Device — virs Unix soketa. Pēc savienojuma ar standarta nbd-client sistēmā parādās /dev/nbdX, ko var formatēt kā parasto swap, izmantojot mkswap un aktivizēt ar swapon.

Autors atsevišķi uzsver, ka šāda pieeja izvēlēta patērētāju NVIDIA grafisko karšu ierobežojumu dēļ. Tiešais ceļš caur NVIDIA P2P API uz GeForce, pēc viņa teiktā, saskaras ar EINVAL, jo attiecīgās iespējas faktiski ir pieejamas tikai profesionālām un serveru versijām. Variantam ar tiešu piekļuvi BAR1 arī neveiksmīgi: pieejamā ir tikai neliela attēlotā joma, bet lasīšana no pārējās daļas atgriež nulles. NBD pieeja apiet šo ierobežojumu, jo izmanto parastos CUDA kopēšanas komandas cuMemcpyHtoD un cuMemcpyDtoH.

Iespējas

  • Videomemorijas izmantošana kā parasts Linux swap. Pēc palaišanas demons sniedz videomemoriju kā /dev/nbd0 vai citu NBD ierīci, kas kodolam izskatās kā standarta blokierīce.

  • Darbs bez atsevišķa kodola moduļa. Projekts neprasa rakstīt, kompilēt un apkopot atsevišķu kodola moduli, neizmanto NVIDIA draivera iekšējos simbolus un vajadzētu izturēt kodola un draivera atjauninājumus bez pārbūves.

  • Orientācija uz patērētāju NVIDIA GPU. Prasībās ir norādīti NVIDIA GPU ar CUDA atbalstu, tostarp patērētāju RTX/GTX kartes, oficiālais NVIDIA draiveris ar libcuda.so.1, nbd modulis Linux kodolā, nbd-client, gcc un make. CUDA Toolkit nav nepieciešams.

  • systemd integrācija. Uzstādīšana caur install.sh pievieno vram-swap-nbd pakalpojumu, ko var palaist caur systemctl; pēc uzstādīšanas pakalpojums tiek aktivizēts automātiskai palaišanai pie ielādes.

  • Swap izmēra un prioritātes iestatīšana. systemd-unit var norādīt VRAM_SETUP_SIZE_MB, kas ir augšējais ierobežojums piešķirtajai VRAM, un VRAM_SWAP_PRIORITY, kas ir swap ierīces prioritāte. Jo augstāka prioritāte, jo ātrāk Linux izmantos šo swap slāni.

  • Automātiska pieprasītā izmēra samazināšana. Ja prasītais VRAM apjoms nav pieejams, demons mēģina samazināt izmēru blokos pa 512 MiB, lai tomēr piešķirtu pieejamo apjomu, piemēram, ja daļa atmiņas jau ir aizņemta ar kompozitoru vai grafisko sesiju.

  • Pārbaudes skripti. Repozitorijā ir test-nbd.sh smouka testam ar rakstīšanu/lasīšanu 1 MiB un test-fill.sh stresa testam visam VRAM nodalījumam.

  • Norādītā veiktspēja apmēram 1,3 GB/s. Uz RTX 3070 laptop autors izmērījis secīgu rakstīšanu 7 GB blokos pa 4 MB aptuveni 1,3 GB/s līmenī.

Lietošanas scenāriji

Klēpjdatori ar lodētām RAM. Galvenais scenārijs – mūsdienu klēpjdatori, kur 16 vai 32 GB operatīvās atmiņas jau nav pietiekami, bet paplašināt to nav iespējams. Ja šādā mašīnā ir diskretais RTX kartes, daļu VRAM var izmantot kā papildu swap slāni. Tas nepārveido VRAM par pilnvērtīgu RAM, bet var glābt sistēmu no straujas pārejas uz lēno SSD swap vai no OOM-killer pie augstākām slodzēm.

Smagas izstrādātāja darba vides. IDE, pārlūks ar desmitiem cilņu, Docker konteineri, lokālās datu bāzes, liela projekta būvēšana un testēšanas vides viegli rada īslaicīgas atmiņas patēriņa virsotnes. Šādā scenārijā NBD-VRAM var darboties kā buferis: ne paātrināt parasto darbu, bet mazināt brīdi, kad RAM beidzas.

Slodzes samazināšana uz SSD swap. Ja, ja izmantosim swap uz SSD bieži, tas ne tikai ir lēnāks, bet arī rada nevajadzīgas rakstīšanas operācijas uz diska. VRAM-swap var iestatīt ar augstāku prioritāti, lai RAM pārpildes gadījumā sistēma vispirms izgāž lapas videomemorijā, un tikai tad piekļūst SSD. Tas ir īpaši aktuāli klēpjdatoriem, kur SSD bieži ir arī nenomaināms vai dārgs, lai aizstātu.

Kombinācija ar zram. Autors skaidri apraksta shēmu, kur VRAM swap iegūst augstāku prioritāti un saņem pirmo «atplūdes» atmiņu, zram tiek izmantots kā nākamais līmenis, savukārt SSD paliek pēdējā aizsardzība. Šāda shēma var būt noderīga darbvirsmas un klēpjdatoru lietotājiem, kur ir svarīgāk saglabāt sistēmas reaģētspēju, nekā iegūt maksimālu aiztures paredzamību, kad atmiņa ir ierobežota.

Lokālas AI/LLM uzdevumi ap GPU, bet ne VRAM modeļa vietā. NBD-VRAM nepalielina videomemorijas daudzumu, kas pieejams CUDA lietojumprogrammai kā VRAM modeļa vajadzībām. Tas ir pretējs scenārijs: nevis RAM tiek izmantots kā VRAM, bet VRAM tiek izmantots kā swap parasto Linux atmiņu. Tādēļ projekts neļaus tieši ielādēt GPU lielāka izmēra modeli. Bet tas var būt noderīgi mašīnā, kur blakus LLM inferencing strādā pārlūkprogrammas, IDE, indeksi, Python vidē un konteineri, un sistēmas RAM sāk beigties.

Mājas un eksperimentālās darbvirsmas. Projekts ir interesants lietotājiem, kuriem videokarte bieži ir neaktīva ārpus spēlēm, renderēšanas vai ML uzdevumiem. Piemēram, 8–12 GB VRAM uz desktop GeForce var pagaidām pārvērst par papildu swap slāni smagiem kompilācijas, datu apstrādes vai palaišanas uzdevumiem. virtuālo mašīnu.

ierobežojumi

NBD-VRAM nav operatīvās atmiņas aizstāšana. Pieejamība šādam swap notiek ķēdē kernel swap → /dev/nbdX → nbd draiveris → Unix sokets → demons → CUDA kopēšana → VRAM, tādēļ aiztures un uzvedība atšķirsies no patiesās RAM. Tas drīzāk ir avārijas vai starpējais slānis starp RAM un SSD, nekā veids, kā «pievienot atmiņu» bez sekām.

Šis projekts ir saistīts ar oficiālo NVIDIA ar CUDA. Nouveau/Nova šim nav piemēroti, jo nepieciešams libcuda.so.1. Phoronix arī atzīmē, ka NBD-VRAM radīts tieši patērētāju NVIDIA GPU, kur alternatīvi pieejas caur NVIDIA P2P API nedarbojas.

NBD-VRAM ir neliels, bet interesants sistēmas haks Linux: tas neveic brīnumus un neaizstāj RAM jaunināšanu, taču ļauj izmantot neizmantoto video atmiņu kā papildu swap pakāpi pirms SSD. Klēpjdatoriem ar lodētām atmiņām un diskreto RTX karti tas var būt praktisks veids, kā izturēt pieprasījumus, nenokļūstot uzreiz lēnā diska vai nesaskaras ar programmu kritumiem.

Avots: linux.org.ru

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster