Avatar videosu ancak kişi zaman içinde tutarlı kaldığında inandırıcı gelir. Yüz kaydığında, dişler değiştiğinde, dudak senkronizasyonu bozulduğunda veya klipler arasında hareket sıfırlandığında insanlar bunu anında fark eder. Bu durum, izleyici belirli bir kişiyi genellikle yakın planda ve uzun süre konuşurken izlediği için, birçok diğer video oluşturma görevine kıyasla avatarlar için çok daha önemlidir.
Günümüzün video oluşturma dünyasında, süre hâlâ en görünür kısıtlamalardan biri. Birçok model ve ürün, oluşturmayı sabit uzunlukta bir klip olarak sunuyor — birkaç saniye, çok az sistem birkaç dakikadan fazlasını oluşturabiliyor. Avatar ürünlerinde ise bu sınır, doğrudan müşteri iş akışlarında kendini gösteriyor. Müşteriler eğitim videoları, satış demoları, ürün tanıtımları, eğitim içerikleri, destek ve görevi tamamlayana kadar konuşmaya devam etmesi gereken yapay zeka ajanları için daha uzun ve tutarlı sahneler/videolar istiyor; ayrıca prompt, hareket ve metin üzerinde yineleme yapabilmek için hızlı önizleme talep ediyor.
HeyGen'de bu durum üç somut gereksinime dönüştü:
- Uzun sahne tutarlılığıAvatarın, yalnızca kısa bir klip için değil, oluşturulan videonun birçok parçası boyunca kimliği, dudak senkronizasyonunu, ifadeyi ve hareket sürekliliğini koruması gerekir.
- Sabit bir süre sınırı yokBir oluşturma on saniye, on dakika ya da ucu açık, gerçek zamanlı bir oturum olabilir.
- Hızlı önizleme, gerçek zamanlı veya gerçek zamandan daha hızlı oluşturmaSistem, kareleri hızla üretmeye başlamalı ve çıkarım hâlâ devam ederken oluşturulan karelerin akış olarak iletilmesine dahi izin vermelidir.
Bu yazıda, bu gereksinimleri karşılamak için oluşturduğumuz çıkarım çerçevesini adım adım inceliyoruz.
Temel model mimarisi
Bu çerçeve, HeyGen'in avatar video oluşturma modelleri — Avatar IV ve Avatar V aileleri — etrafında inşa edilmiştir. Üst düzeyde model; referans bir görsel/video, yönlendirici ses ve isteğe bağlı metin veya sahne koşullandırmasını alır, ardından o avatarın doğru kimlik, ifade ve hareketle konuştuğu bir video oluşturur.
Çekirdek oluşturma modeli, akış eşleştirme (flow matching) ile eğitilmiş bir Diffusion Transformer (DiT)’tır. Kişiyi küçük bir kimlik gömmesine sıkıştırmak yerine, model zengin referans token’larına koşullanır; böylece avatarlar için önemli olan ayrıntıları koruyabilir: yüz şekli, dişler, cilt dokusu, ağız hareketi, jest stili ve konuşma ritmi.
Üretim çıkarım yolu üç ana aşamadan oluşur:
- Sesten videoya oluşturma Bir temel DiT, referans kimlik, ses özellikleri ve koşullandırma sinyallerinden düşük çözünürlüklü video latentleri oluşturur. Bu aşama, hareket, dudak senkronizasyonu ve zamansal tutarlılığa odaklanır.
- Kimlik odaklı süper çözünürlükİkinci bir model, bu latentleri yüksek çözünürlüklü çıktıya dönüştürür ve özellikle yüz ve ağız bölgesi olmak üzere, insanların yapaylık ve bozulmalara en duyarlı olduğu alanlara ekstra dikkat gösterir.
- Akış tabanlı VAE çözme Bir VAE kod çözücü, yüksek çözünürlüklü latentleri parça parça RGB karelere dönüştürür; böylece tüm video tamamlanmadan kareler üretilebilir.
Uzun videolar oluşturmak için sistem verileri parçalara ayırarak işler. İlk parça tamamen statik referansa dayanırken, sonraki parçalar önceki segmentlerden gelen sınır verilerini kullanır. Bu sayede avatar, duruşunu veya kimliğini baştan sıfırlamaya gerek kalmadan doğal bir şekilde konuşmaya devam edebilir.
Akış çerçevesi ve pipeline döngüsü
Parça tabanlı yürütmeyi desteklemek için çıkarım çerçevesi, yerelleştirilmiş zaman pencereleri üzerinde çalışan ve her bir parça işlendiğinde kaynakları anında serbest bırakan, modüler, üç katmanlı bir mimari kullanır.
- Modül: Belirli bir model ve onun checkpoint'ini saran bir katman (örneğin A2V DiT, Süper Çözünürlük DiT, VAE bileşenleri, metin/ses kodlayıcıları).
- Aşama: Bir veya daha fazla modülü koordine eden, türü belirli bir yürütme birimi (örneğin bağlam oluşturma, süper çözünürlük).
- Pipeline: Aşamaları birbirine bağlayan, paylaşılan durumu yöneten ve akış veya toplu yürütme modlarını koordine eden yürütme grafiği.
Başlatma aşaması, her istek için referans kimliği bir kez örtük temsillere (latentlere) kodlar. Ardından pipeline, giriş ses akışı tamamen bitene kadar kalan aşamalar arasında kesintisiz bir döngü yürütür:

- Bağlam oluşturma: Gelen ses segmentlerini özniteliklere dönüştürür, bunları metin veya sahne koşullandırmasıyla birleştirir ve hedef gürültü tensörlerini hazırlar.
- Ses'ten Videoya: Düşük çözünürlüklü latentler oluşturmak için çok adımlı bir difüzyon geçişi yürütür. Bu aşama, hareket sürekliliğini korumak için mevcut parçayı, önceki parçanın sınır karelerine göre koşullandırır.
- Süper çözünürlük: Hareket latentlerini tek adımda tam çözünürlüğe yükseltir ve yüzdeki mekansal ayrıntıyı önceliklendirir.
- VAE Decode-and-Publish: Yüksek çözünürlüklü latentleri RGB karelere dönüştürür ve bunları anında depolama veya canlı oynatma için doğrudan çıktı kodlayıcısına (H.264 / AAC) yazar.
Sınır sürekliliği ve parça tutarlılığı
Videoyu ayrı segmentler hâlinde oluşturmak, potansiyel sınır süreksizlikleri ortaya çıkarır. Çerçeve, bunu iki farklı parça sınıflandırması kullanarak azaltır:
- N Parçaları: avatarın birincil zaman çizelgesini oluşturan segmentler.
- I Chunks (Interpolasyon): Ardışık N chunk'ları arasındaki geçişleri yumuşatmak için tasarlanmış segmentlerdir.
Yürütme sırası aşağıdaki şekilde yapılandırılmıştır:
N0 -> N1 -> I0 -> N2 -> I1 -> N3 -> I2 -> ...
Bir I parçası, yalnızca önceki ve sonraki N parçaları tamamlandıktan sonra oluşturulur. Geçiş hareketini hesaplamak için, önceki N parçasının son karesini ve mevcut N parçasının erken bir karesini çapa kareler olarak kullanır. Oluşturmanın ardından, gereksiz çapa tahminleri atılır ve yalnızca düzgün şekilde enterpole edilmiş geçiş bırakılır. Bu mekanizma, gerekli bağlam penceresini sınırlandırırken zamansal tutarlılığı korur.
Süre boyunca sabit bellek kullanımı
Geleneksel bir video iş hattı, çalıştırma sırasında latentleri, çözümlenmiş kareleri ve dikkat bağlamını biriktirerek GPU bellek kullanımının video süresiyle doğrusal olarak artmasına neden olur.
Açık uçlu oluşturmayı mümkün kılmak için bu çerçeve katı bir döner durum (rolling state) yapısını korur. Sistem, yalnızca statik referans koşullandırmasını ve parça geçişleri için gereken asgari sayıda çapa tensörünü saklar. Ses özellikleri, gürültü tensörleri, dahili aktivasyonlar ve ham RGB kareler de dahil olmak üzere tüm ara varlıklar, her bir parça çözümlenip yazıldıktan hemen sonra bellekten temizlenir.
Sonuç olarak, en yüksek GPU bellek profili ister kısa bir klip ister uzun bir sekans oluşturulsun sabit kalır; kaynak kullanımı oturumun toplam süresi yerine tanımlanan parça boyutuna göre ölçeklenir.
İş hattındaki yükleme/boşaltma aşamaları
Her istek, 8 GPU'lu bir düğüm üzerinde çalışır. Büyük model parametrelerini GPU'lar arasında parçalara ayırmak için FSDP kullanıyoruz. Her rank, ağırlıkların yalnızca bir kısmına sahip olur, bir hesaplama için ihtiyaç duyduğu parametreleri toplar ve ardından bunları tekrar serbest bırakır. Bu sayede temel DiT, süper çözünürlüklü DiT, metin kodlayıcı, ses kodlayıcı ve VAE gibi birden fazla büyük model tek bir düğüme sığar.
Burada bir ödünleşim vardır. FSDP, çıkarım sırasında ek iletişim yükü getirir çünkü ileri geçişler sırasında parametrelerin toplanması gerekir. Bu ek yükü gizlemek ve birlikte konumlandırılmış modelleri kullanılmadıkları zaman GPU dışında tutmak için çeşitli teknikleri bir arada kullanıyoruz:
- İleriye dönük önyükleme. Sonraki bloğun parametrelerine ait AllGather işlemi önceden başlatılır ve mevcut bloğun hesaplamasıyla çakıştırılır; böylece kritik yoldaki toplama gecikmesi gizlenir.
- CPU'dan tembel blok başına yeniden birleştirmeBir model sabitlenmiş CPU belleğinden geri getirildiğinde, ağırlıkların tamamını en baştan yüklemeyiz. Her bir transformer bloğu, ileri geçişinden hemen önce yeniden birleştirilir (host-to-device kopyalama + AllGather), böylece blok n+1'in H2D transferi, blok n'in hesaplamasıyla örtüşür.
- Aşamalar arasında sabitlenmiş CPU offload'u. Şu anda çalışmayan bir modelin parametreleri sabitlenmiş CPU belleğinde tutulur; böylece birlikte konumlandırılmış modellerin (base DiT, super-resolution DiT, text encoder, audio encoder, VAE) hepsinin ağırlıklarını aynı anda GPU üzerinde tutması gerekmez. Sabitlenmiş bellek, H2D kopyalarının hesaplama ile örtüşecek kadar hızlı olmasını sağlar.
- NUMA farkındalıklı işlem yerleşimiHer işlem, atandığı GPU ile aynı NUMA düğümüne sabitlenir; böylece CPU↔GPU aktarımları, soketler arası ara bağlantıyı geçmeden, tam PCIe/NVLink bant genişliğinde çalışır.
Aşamalar arasında 10 ms altı model geçişi
Yukarıdaki tekniklerin pratik getirisi, GPU'yu bir aşamanın modelinden bir sonrakine devretmenin — örneğin A2V DiT → Super-Resolution DiT veya SR DiT → VAE decoder — fiilen maliyetsiz olmasıdır. Çıkış yapan model eşzamanlı olmayan şekilde offload edildiği ve gelen modelin ilk bloğu tam zamanında shard'lardan çıkarıldığı için, hem H2D kopyalama hem de AllGather, zaten çalışan hesaplamanın arkasına gizlenir. Uçtan uca bakıldığında, gözlemlenebilir her geçiş başına ek yük 10 ms'nin altındadır — hedef kare hızlarımızda tek bir kare bütçesinin çok altındadır. Somut olarak, bu sayede akış hattı döngüsü (Context Gen → A2V → SR → VAE Decode-and-Publish), model değişiminin kendisi hiçbir zaman darboğaz hâline gelmeden, her parça için birden fazla büyük model arasında döngü yapabilir.
Gerçek zamanlı akış yayını
Modeli gerçek zamanlı yayın yapabilecek kadar hızlı hale getirmek için çok sayıda çıkarım optimizasyonu gerçekleştirdik, bu kısma ilişkin daha fazla ayrıntı için lütfen https://www.heygen.com/research/avatar-v-inference adresine bakın.
Boru hattı gerçek zamanlı olarak videoyu parça parça ürettikten sonra, akış teslimi ayrı bir sonradan işleme adımı olmak yerine çıkarımın doğal bir uzantısı hâline gelir.
Yayın tarzı gerçek zamanlı yol için, oluşturulan kareleri Amazon Kinesis Video Streams (KVS) üzerine yayınlıyoruz. KVS genellikle kameralar, IoT cihazları ve yüklenen medya bağlamında ele alınır. Bizim durumumuzda ise “kamera”, doğrudan çıkarım (inference) hattının kendisidir: kareler model tarafından oluşturulur, anında kodlanır ve canlı yayın olarak KVS’ye aktarılır.
Çıkış yazıcısı, akış yapan VAE'den çözümlenmiş RGB kareleri alır ve bunları bir GStreamer iş akışına gönderir. Video H.264, ses ise AAC olarak kodlanır ve ardından her iki parça da KVS üretici çıkışı olan kvssink'e iletilir. Buradan izleyiciler, oturumu hâlâ oluşturulurken bile canlı yayın olarak oynatabilir.
Sonuçlar ve çıkarımlar
Bu çerçeve, Avatar IV ve Avatar V oluşturmayı sabit sahne işlemeden açık uçlu akış tabanlı oluşturma modeline dönüştürdü. En önemli sonuç aslında basit: Avatar IV ve Avatar V için sahne süresi sınırlarını kaldırdık. Gerçek zamanlı Avatar IV oluşturma için, ilk kareye ulaşma süresini 5 saniyenin altına indirdik ve 720p Avatar IV videolarında saniyede 27+ kare hızına ulaştık — gerçek zamanlı oynatmadan daha hızlı.