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.

Güncellendi: