Keď sa NVENC nespustí: GPU plná modelov a renderer, ktorý prechádza na záložné riešenie
Video
Náš video renderer beží na rovnakom počítači ako jazykový model, ktorý píše jeho skripty. Jedného večera sa hardvérový enkodér jednoducho neotvoril: „CUDA_ERROR_OUT_OF_MEMORY: out of memory“, potom „No capable devices found“.
Čo sa stalo
Počítač je stolový NVIDIA GB10, ktorého CPU a GPU zdieľajú jeden fond pamäte. Obsluhuje náš lokálny model cez vLLM a Studio renderuje na tom istom zariadení s ffmpeg, pričom používa NVENC, keď to ide. Počas testovacieho behu sa enkodér nepodarilo vytvoriť jeho CUDA kontext. Zlyhanie prichádzalo a odchádzalo v priebehu sekúnd: krátky NVENC test prešiel a render hneď po ňom zlyhal; pri ďalšom behu zlyhal samotný test; pri behu po ňom prešli test aj render cez NVENC.
Prečo
vLLM si pri štarte vyhradí pevný podiel pamäte GPU pre model a jeho cache. NVENC potrebuje trochu vlastnej pamäte pre CUDA kontext každej relácie. Keď server s modelom a ďalšie úlohy nič nenechajú, enkodér sa nedá spustiť, hoci je na čipe samostatným motorom a výpočty GPU by sa ho takmer nedotkli.
Oprava: rozhodnúť pri enkódovaní, nie pri teste
Test pri štarte vám povie, že NVENC fungoval pred chvíľou, nie že bude fungovať pre ďalší súbor. Studio preto skúša NVENC pri každom renderovaní a ak ffmpeg zlyhá, spustí rovnaký filter graf znovu s libx264. Živý kanál spustí polsekundový test enkódovania s živými nastaveniami pred každým štartom a použije libx264, ak NVENC zlyhá; chyba NVENC alebo CUDA počas streamu prepne ďalší štart na libx264. Každé dokončené video si zaznamená, ktorý enkodér ho vytvoril, takže záložné riešenie sa objaví v súbore úlohy namiesto toho, aby prešlo nepovšimnuté.
Čo stojí záložné riešenie
Menej, než sme čakali. Na 20-jadrovom Arm CPU toho istého počítača libx264 vyrenderoval 12 sekúnd videa 1080p s pohybmi kamery, vypálenými titulkami a normalizáciou hlasitosti za 7,6 sekundy. Pri krátkych videách vytváraných raz denne je CPU úplne dobrý enkodér. GPU je oveľa dôležitejšia pre obrazový model než pre enkódovanie.
Zhrnutie
Na zdieľanom počítači považujte GPU enkodér za voliteľný: použite ho, keď je dostupný, prejdite na záložné riešenie, keď nie je, a zaznamenajte, ktorý ste použili. To isté platí pre akúkoľvek funkciu GPU, ktorá potrebuje vlastnú pamäť na stroji, kde server s modelmi už väčšinu pamäte zaberá. Studio má toto správanie predvolene zapnuté.