Ketika NVENC gagal memulai: GPU penuh model, dan renderer yang beralih ke alternatif

Video

Renderer video kami berjalan di mesin yang sama dengan model bahasa yang menulis skripnya. Suatu malam, encoder perangkat keras tersebut sama sekali tidak mau terbuka: "CUDA_ERROR_OUT_OF_MEMORY: out of memory", lalu "No capable devices found".

Apa yang terjadi

Mesin tersebut adalah desktop NVIDIA GB10, yang CPU dan GPU-nya berbagi satu kolam memori. Mesin ini melayani model lokal kami melalui vLLM, dan Studio melakukan rendering di mesin yang sama dengan ffmpeg, menggunakan NVENC jika memungkinkan. Selama uji coba, encoder gagal membuat konteks CUDA-nya. Kegagalan tersebut muncul dan hilang dalam hitungan detik: sebuah probe NVENC singkat berhasil, tetapi rendering tepat setelahnya gagal; pada run berikutnya, probe itu sendiri gagal; pada run setelahnya lagi, probe dan rendering keduanya berhasil melalui NVENC.

Mengapa

vLLM mencadangkan porsi tetap dari memori GPU saat memulai, untuk model dan cache-nya. NVENC membutuhkan sedikit memorinya sendiri untuk konteks CUDA setiap sesi. Ketika server model dan pekerjaan lain tidak menyisakan ruang, encoder tidak dapat memulai, meskipun ia merupakan mesin terpisah pada chip dan hampir tidak menyentuh komputasi GPU.

Solusi: putuskan saat encoding, bukan saat probe

Probe saat startup memberi tahu Anda bahwa NVENC baru saja berhasil, bukan bahwa ia akan berhasil untuk file berikutnya. Jadi Studio mencoba NVENC untuk setiap rendering dan, jika ffmpeg gagal, menjalankan filter graph yang sama lagi dengan libx264. Saluran live menjalankan uji coba encoding setengah detik dengan pengaturan live-nya sebelum setiap start dan menggunakan libx264 jika NVENC gagal; error NVENC atau CUDA selama streaming mengalihkan start berikutnya ke libx264. Setiap video yang selesai mencatat encoder mana yang membuatnya, sehingga fallback terlihat di file job alih-alih lolos tanpa terdeteksi.

Biaya dari fallback

Lebih rendah dari yang kami perkirakan. Pada CPU Arm 20-core di mesin yang sama, libx264 merender 12 detik video 1080p, dengan pergerakan kamera, caption yang dibakar ke dalam video, dan normalisasi loudness, dalam 7,6 detik. Untuk video pendek yang dibuat sekali sehari, CPU adalah encoder yang sangat baik. GPU jauh lebih penting untuk model gambar daripada untuk encoding.

Kesimpulan

Di mesin bersama, perlakukan encoder GPU sebagai opsional: gunakan saat tersedia, kembali ke alternatif saat tidak tersedia, dan catat mana yang Anda gunakan. Hal yang sama berlaku untuk fitur GPU apa pun yang membutuhkan memorinya sendiri pada mesin tempat server model sudah mengambil sebagian besar memori. Studio menyertakan perilaku ini secara default.

Diperbarui: