NVENC başlatılamadığında: Modellerle dolu bir GPU ve geri dönüş yapan bir işleyici
Video
Video işleyicimiz, senaryolarını yazan dil modeliyle aynı makinede çalışır. Bir akşam donanım kodlayıcı bir türlü açılmadı: "CUDA_ERROR_OUT_OF_MEMORY: out of memory", ardından "No capable devices found".
Ne oldu
Makine, CPU ve GPU'sunun tek bir bellek havuzunu paylaştığı bir NVIDIA GB10 masaüstü bilgisayarıdır. Yerel modelimize vLLM üzerinden hizmet verir ve Studio, aynı makinede ffmpeg ile, mümkün olduğunda NVENC kullanarak render alır. Bir test çalıştırması sırasında kodlayıcı CUDA bağlamını oluşturamadı. Hata saniyeler içinde gelip gitti: Kısa bir NVENC denemesi geçti ve hemen ardından gelen render başarısız oldu; bir sonraki çalıştırmada denemenin kendisi başarısız oldu; ondan sonraki çalıştırmada ise hem deneme hem de render NVENC üzerinden geçti.
Neden
vLLM, başlatıldığında model ve önbelleği için GPU belleğinin sabit bir bölümünü ayırır. NVENC, her oturumun CUDA bağlamı için kendine ait az miktarda belleğe ihtiyaç duyar. Model sunucusu ve diğer işler geriye hiçbir şey bırakmadığında, çip üzerinde ayrı bir motor olsa ve GPU'nun hesaplama gücüne neredeyse hiç dokunmasa bile kodlayıcı başlatılamaz.
Çözüm: Denemede değil, kodlamada karar ver
Başlangıçtaki bir deneme, NVENC'in bir an önce çalıştığını söyler, bir sonraki dosya için çalışacağını değil. Bu nedenle Studio her render için NVENC'i dener ve ffmpeg başarısız olursa aynı filtre grafiğini libx264 ile tekrar çalıştırır. Canlı kanal, her başlangıçtan önce canlı ayarlarıyla yarım saniyelik bir test kodlaması yapar ve NVENC başarısız olursa libx264 kullanır; akış sırasında bir NVENC veya CUDA hatası oluşursa bir sonraki başlangıç libx264'e geçer. Tamamlanan her video, hangi kodlayıcının ürettiğini kaydeder; böylece bir geri dönüş, fark edilmeden geçmek yerine iş dosyasında görünür.
Geri dönüşün maliyeti
Beklediğimizden daha az. Aynı makinenin 20 çekirdekli Arm CPU'sunda libx264, kamera hareketleri, gömülü altyazılar ve ses seviyesi normalizasyonu içeren 12 saniyelik 1080p videoyu 7,6 saniyede render etti. Günde bir kez üretilen kısa videolar için CPU gayet iyi bir kodlayıcıdır. GPU, kodlama için değil, görüntü modeli için çok daha önemlidir.
Çıkarılacak ders
Paylaşımlı bir makinede GPU kodlayıcıyı isteğe bağlı olarak ele alın: kullanılabilir olduğunda onu kullanın, değilse yedek yönteme geçin ve hangisini kullandığınızı günlüğe kaydedin. Bir model sunucusunun belleğinin çoğunu zaten kullandığı bir makinede, kendi belleğine ihtiyaç duyan herhangi bir GPU özelliği için de aynı durum geçerlidir. Studio, bu davranışı varsayılan olarak açık şekilde sunar.