Kadar NVENC ne zažene: poln GPU z modeli in upodobljevalnik, ki se vrne na rezervno pot
Video
Naš upodobljevalnik videa teče na istem računalniku kot jezikovni model, ki piše njegove skripte. Nekega večera strojni kodirnik preprosto ni hotel odpreti: "CUDA_ERROR_OUT_OF_MEMORY: out of memory", nato "No capable devices found".
Kaj se je zgodilo
Računalnik je namizni NVIDIA GB10, pri katerem si CPU in GPU delita en pomnilniški bazen. Strežnik za naš lokalni model uporablja vLLM, Studio pa upodobljuje na isti napravi z ffmpeg, pri čemer uporablja NVENC, kadar je to mogoče. Med poskusnim zagonom kodirniku ni uspelo ustvariti svojega CUDA konteksta. Napaka se je pojavila in izginila v nekaj sekundah: kratek NVENC preizkus je uspel, upodobljevanje takoj za njim pa ni; ob naslednjem zagonu je že sam preizkus spodletel; ob zagonu za tem sta preizkus in upodobljevanje oba potekla prek NVENC.
Zakaj
vLLM ob zagonu rezervira določen delež pomnilnika GPU-ja za model in njegov predpomnilnik. NVENC potrebuje majhen delež lastnega pomnilnika za CUDA kontekst vsake seje. Ko strežnik modela in druga opravila ne pustijo ničesar prostega, kodirnik ne more začeti delovati, čeprav je na čipu ločen pogon in bi komaj obremenil računalniške zmogljivosti GPU-ja.
Popravek: odločitev pri kodiranju, ne pri preizkusu
Preizkus ob zagonu vam pove, da je NVENC deloval pred trenutkom, ne pa, da bo deloval za naslednjo datoteko. Zato Studio pri vsakem upodobljevanju poskusi z NVENC in, če ffmpeg spodleti, ponovno zažene isto mrežo filtrov z libx264. Živi kanal pred vsakim zagonom izvede polsekundni poskusni kodirni preizkus z živimi nastavitvami in uporabi libx264, če NVENC preizkusa ne opravi; napaka NVENC ali CUDA med prenosom preklopi naslednji zagon na libx264. Vsak dokončan video zabeleži, kateri kodirnik ga je ustvaril, zato se rezervna pot pojavi v datoteki opravila in ne mine neopaženo.
Kaj rezervna pot stane
Manj, kot smo pričakovali. Na 20-jedrnem Arm CPU istega računalnika je libx264 upodobil 12 sekund videa v ločljivosti 1080p, s premiki kamere, vžganimi napisi in normalizacijo glasnosti, v 7,6 sekunde. Za kratke videe, ki nastanejo enkrat na dan, je CPU povsem dober kodirnik. GPU je mnogo pomembnejši za slikovni model kot za kodiranje.
Ključna ugotovitev
Na skupnem računalniku obravnavajte GPU kodirnik kot izbirno možnost: uporabite ga, ko je na voljo, preidite na rezervno rešitev, ko ni, in zabeležite, katerega ste uporabili. Enako velja za katero koli funkcijo GPU, ki potrebuje svoj pomnilnik na napravi, kjer je strežnik modelov že zasedel večino pomnilnika. Studio ima to vedenje privzeto vklopljeno.