Кога NVENC не стартува: GPU полн со модели и рендерер што користи резервно решение
Видео
Нашиот видео рендерер работи на истата машина како јазичниот модел што ги пишува неговите скрипти. Една вечер хардверскиот енкодер едноставно не сакаше да се отвори: „CUDA_ERROR_OUT_OF_MEMORY: out of memory“, а потоа „No capable devices found“.
Што се случи
Машината е NVIDIA GB10 десктоп, каде што CPU и GPU делат еден базен на меморија. Тој го опслужува нашиот локален модел преку vLLM, а Studio рендерира на истата кутија со ffmpeg, користејќи NVENC кога може. За време на тест-процесот, енкодерот не успеа да го создаде својот CUDA контекст. Откажувањето доаѓаше и одминуваше за неколку секунди: кратко NVENC тестирање помина, а рендерирањето веднаш по него не успеа; при следното пуштање самото тестирање не успеа; при пуштањето по тоа, и тестирањето и рендерирањето поминаа преку NVENC.
Зошто
vLLM резервира фиксен дел од меморијата на GPU-то при стартување, за моделот и неговиот кеш. NVENC бара малку сопствена меморија за CUDA контекстот на секоја сесија. Кога серверот за модели и другите задачи не оставаат ништо слободно, енкодерот не може да стартува, иако е посебен мотор на чипот и би ја користел пресметковната моќ на GPU-то минимално.
Поправката: одлучувајте при кодирањето, не при тестирањето
Тестирањето при стартување ви кажува дека NVENC работеше пред момент, а не дека ќе работи за следната датотека. Затоа Studio пробува со NVENC за секое рендерирање и, ако ffmpeg не успее, го пушта истиот филтер-граф повторно со libx264. Живиот канал прави тест-кодирање од половина секунда со своите живи поставки пред секое стартување и користи libx264 ако NVENC не го помине тестот; NVENC или CUDA грешка за време на стримот го префрла следното стартување на libx264. Секој завршен видео запис бележи кој енкодер го направил, така што префрлањето се појавува во датотеката со задачата наместо да помине незабележано.
Што чини префрлањето
Помалку отколку што очекувавме. На 20-јадрениот Arm CPU на истата машина, libx264 рендерираше 12 секунди 1080p видео, со движења на камерата, вградени титлови и нормализација на гласноста, за 7.6 секунди. За кратки видеа правени еднаш дневно, CPU-то е сосема добар енкодер. GPU-то е многу поважно за моделот на слики отколку за кодирањето.
Заклучокот
На споделена машина, GPU енкодерот третирајте го како опционален: користете го кога е достапен, вратете се на алтернатива кога не е, и евидентирајте кој сте го користеле. Истото важи и за секоја GPU функција која бара сопствена меморија на машина каде сервер за модели веќе зазел поголем дел од неа. Studio доаѓа со ова однесување овозможено по основно.