Apabila NVENC gagal dimulakan: GPU penuh dengan model, dan perender yang kembali ke mod sandaran
Video
Perender video kami berjalan pada mesin yang sama dengan model bahasa yang menulis skripnya. Pada suatu petang, pengkod hardware enggan dibuka: "CUDA_ERROR_OUT_OF_MEMORY: out of memory", kemudian "No capable devices found".
Apa yang berlaku
Mesin tersebut ialah desktop NVIDIA GB10, yang CPU dan GPU berkongsi satu kolam memori. Ia melayani model tempatan kami melalui vLLM, dan Studio merender pada kotak yang sama dengan ffmpeg, menggunakan NVENC apabila mampu. Semasa percubaan tanpa perubahan, pengkod gagal mencipta konteks CUDA-nya. Kegagalan itu datang dan pergi dalam beberapa saat: satu pemeriksaan NVENC ringkas berjaya dan render selepas itu gagal; pada larian seterusnya, pemeriksaan itu sendiri gagal; pada larian selepas itu, pemeriksaan dan render kedua-duanya melalui NVENC.
Mengapa
vLLM memperuntukkan bahagian tetap memori GPU apabila ia dimulakan, untuk model dan cache-nya. NVENC memerlukan sedikit memorinya sendiri untuk konteks CUDA setiap sesi. Apabila pelayan model dan kerja lain tidak meninggalkan apa-apa, pengkod tidak dapat dimulakan, walaupun ia adalah enjin berasingan pada cip dan hampir tidak menyentuh pengkomputeran GPU.
Pembetulan: putuskan semasa pengkodan, bukan semasa pemeriksaan
Pemeriksaan semasa permulaan memberitahu anda bahawa NVENC berfungsi seketika lalu, bukan bahawa ia akan berfungsi untuk fail seterusnya. Jadi Studio cuba NVENC untuk setiap render dan, jika ffmpeg gagal, menjalankan graf penapis yang sama sekali lagi dengan libx264. Saluran langsung menjalankan ujian pengkodan setengah saat dengan tetapan langsungnya sebelum setiap permulaan dan menggunakan libx264 jika NVENC gagal; ralat NVENC atau CUDA semasa aliran menukar permulaan seterusnya kepada libx264. Setiap video yang selesai merekodkan pengkod mana yang menghasilkannya, supaya sandaran muncul dalam fail kerja dan tidak terlepas pandang.
Kos sandaran
Kurang daripada yang kami jangkakan. Pada CPU Arm 20 teras mesin yang sama, libx264 merender 12 saat video 1080p, dengan pergerakan kamera, kapsyen yang dibakar dan penormalan kelantangan, dalam 7.6 saat. Untuk video pendek yang dibuat sekali sehari, CPU adalah pengkod yang cukup baik. GPU jauh lebih penting untuk model imej daripada untuk pengkodan.
Pengajaran utama
Pada mesin berkongsi, anggap pengekod GPU sebagai pilihan: gunakannya apabila ia tersedia, kembali kepada alternatif apabila ia tidak tersedia, dan logkan yang mana satu yang anda gunakan. Perkara yang sama terpakai untuk mana-mana ciri GPU yang memerlukan memorinya sendiri pada mesin di mana pelayan model telah mengambil sebahagian besar memori tersebut. Studio dihantar dengan kelakuan ini secara lalai.