Kada NVENC ne može da se pokrene: GPU prepun modela i renderer koji prelazi na rezervno rešenje

Video

Naš video renderer radi na istoj mašini kao i jezički model koji piše njegove skripte. Jedne večeri hardverski enkoder jednostavno nije hteo da se otvori: "CUDA_ERROR_OUT_OF_MEMORY: out of memory", a zatim "No capable devices found".

Šta se desilo

Mašina je NVIDIA GB10 desktop, čiji CPU i GPU dele jedan bazen memorije. On uslužuje naš lokalni model preko vLLM-a, a Studio renderuje na istoj mašini koristeći ffmpeg, uz NVENC kada je to moguće. Tokom probnog rada enkoder nije uspeo da kreira svoj CUDA kontekst. Greška se pojavljivala i nestajala u roku od nekoliko sekundi: kratki NVENC test je prošao, a render odmah nakon njega je pao; pri sledećem pokretanju sam test je pao; pri pokretanju nakon toga, i test i render su prošli kroz NVENC.

Zašto

vLLM rezerviše fiksni deo GPU memorije pri pokretanju, za model i njegov keš. NVENC-u je potrebno malo sopstvene memorije za CUDA kontekst svake sesije. Kada server modela i drugi poslovi ne ostave ništa slobodno, enkoder ne može da se pokrene, iako je zaseban motor na čipu i jedva da koristi GPU za računanje.

Rešenje: odlučiti pri enkodiranju, a ne pri testu

Test pri pokretanju vam govori da je NVENC radio trenutak ranije, a ne da će raditi za sledeći fajl. Zato Studio pokušava NVENC za svaki render i, ako ffmpeg ne uspe, ponovo pokreće isti filter grafikon koristeći libx264. Kanal uživo pokreće polusekundni probni enkod sa svojim podešavanjima za uživo pre svakog starta i koristi libx264 ako NVENC ne prođe test; NVENC ili CUDA greška tokom striminga prebacuje sledeći start na libx264. Svaki završen video beleži koji ga je enkoder napravio, tako da se prelazak na rezervno rešenje vidi u datoteci posla umesto da prođe neprimećeno.

Cena rezervnog rešenja

Manja nego što smo očekivali. Na CPU-u sa 20 jezgara Arm arhitekture na istoj mašini, libx264 je renderovao 12 sekundi videa u 1080p rezoluciji, sa pokretima kamere, urezanim titlovima i normalizacijom glasnoće, za 7,6 sekundi. Za kratke videe pravljenje jednom dnevno, CPU je sasvim dobar enkoder. GPU je mnogo važniji za slikovni model nego za enkodiranje.

Zaključak

Na deljenoj mašini tretirajte GPU enkoder kao opcionalan: koristite ga kada je dostupan, prebacite se na alternativu kada nije, i evidentirajte koji ste koristili. Isto važi i za svaku GPU funkciju koja zahteva sopstvenu memoriju na mašini na kojoj serverski model već zauzima većinu nje. Studio podrazumevano dolazi sa ovom funkcijom uključenom.

Ažurirano: