Bu sitedeki içerik yapay zeka (AI) veya makine çeviri teknolojisi kullanılarak çevrilmiştir ve hatalar içerebilir.

Skip to content

Roblox'ta 3D Oluşturma için AI Çıkarımını Hızlandırma

7,8 kat daha hızlı, daha duyarlı 3D nesne oluşturma

SEO image for Accelerating AI Inference for 3D Creation on Roblox
  • Roblox, daha hızlı yineleme için 3D ağ oluşturma sürecini hızlandırmak amacıyla CUDA Graphs ve KV önbellekleme teknolojilerini uyguladı.
  • Lansman sırasında, Cube 3D modeli 7,8 milisaniyede (60,5 milisaniyeden düşürülmüş) tokenler ve 4 saniyede (31 saniyeden düşürülmüş) tam nesneler oluşturabiliyordu. 

Bu yılın başlarında Roblox, Cube 3D temel modelimizin ilk yeteneğini paylaştı. Cube 3D ile içerik oluşturucular, metin komutlarından doğrudan 3D modeller ve ortamlar oluşturabilir. Başlangıçtan itibaren, yavaş oluşturma sürelerinin doğası gereği yinelemeli bir süreci aksattığını fark ederek gecikme optimizasyonuna öncelik verdik. Mart ayında Cube 3D piyasaya sürülmeden önce, hem geliştiriciler hem de kullanıcılar için çıkarım adımını 7,8 kat daha hızlı ve daha duyarlı hale getirmiştik. 

Piyasaya sürülmesinden bu yana, birçok önemli deneyimde 578.000'den fazla nesne oluşturuldu. Geliştiriciler ayrıca, kullanıcıların "kediler", "hamburgerler" gibi metin komutlarıyla deneyimler içinde 3D nesneler oluşturabilmelerini sağlamaya ilgi gösterdi. En önemlisi, sesli sohbet kullanan popüler bir takılma oyunu olan Mic Up, oyunculara nesneleri oluşturmak için eğlenceli ve etkileşimli bir yol sunmak amacıyla Cube 3D'yi kullandı. Uygulamada oyuncular, AI simgesi de dahil olmak üzere ek özelliklerin bulunduğu sol taraftaki menüyü açabilirler. Bu simgeye tıkladıktan sonra oyuncular, bir 3D nesne oluşturmak için metin komutu girebilirler. Kullanıcılar için daha uzun oluşturma süreleri sıkıntı yaratır ve fikirlerinin gerçek zamanlı olarak 3D'ye dönüştüğünü görmenin büyüsünden mahrum kalmalarına neden olur. 

3D oluşturma deneyimini, dur-bekle etkileşiminden, hızlı denemelere olanak tanıyan, duyarlı ve doğal hissettiren bir deneyime dönüştürmek istedik. Bir sahneye hızlı bir şekilde nesne ekleyebilme yeteneği, geliştiriciler için çok önemlidir. Cube 3D'yi hızlandırmak için, önce çıkarım boru hattını profilleyerek performans darboğazlarını belirledik. Güçlü GPU'lar kullanmamıza rağmen, işlemler arasında önemli ölçüde bekleme süresi olduğunu tespit ettik.

CPU-GPU Zamanlama Darboğazının Çözülmesi

Modern derin öğrenme çerçeveleri, GPU'da işlemleri (veya çekirdekleri) planlamak ve başlatmak için CPU'ya güvenir. CPU her işlemi hazırlar, GPU'ya gönderir ve bir sonraki işlemi hazırlamadan önce onay bekler. Bu bekleme, CPU bir sonraki iş grubunu hazırlarken GPU'nun boşta kalabileceği bir planlama darboğazı yaratır. İdeal olarak, CPU'nun GPU'dan önde çalışmasını, işlemleri hazırlayıp sıraya koymasını ve böylece GPU'nun her zaman yapacak işi olmasını isteriz.

Bu durum, Cube 3D gibi transformatör tipi modellerdeki otoregresif kod çözücüler için özellikle sorun teşkil eder; çünkü bu modeller, girdileri işlemek ve tokenleri sırayla üretmek zorundadır. Bu modeller, tek bir üretim için binlerce ayrı işlem gerektirir ve hesaplama yükü, dizideki her adımda artar.

Roblox'un neden otoregresif bir yaklaşımı seçtiğini açıklayan Mühendislikten Sorumlu Başkan Yardımcısı Anupam Singh, "Dört boyutlu etkileşimi mümkün kılan bir şey oluşturmak istedik" dedi. "Sadece arabayı yapmakla kalmak istemiyoruz; aynı zamanda arabanın kapısını açıp içine girebilmek de istiyoruz."

Her işlem için gereken:

  • Her bir çekirdeği hazırlamak için gereken CPU süresi
  • Çekirdeğin başlatılmasından kaynaklanan yük
  • GPU yürütme süresi (gerçek hesaplama)
  • Tamamlanma kontrolü sırasında senkronizasyon ek yükü

GPU'da hızlı bir şekilde yürütülen küçük işlemlerde, bu ek yük, çıkarım süresinin büyük bir kısmını oluşturabilir. GPU, toplam çıkarım süresinin sadece küçük bir kısmında aktif olarak hesaplama yapabilir.

Herhangi bir optimizasyon yapılmadan tek bir token üretimi için genel zaman çizelgesi.
Optimize edilmemiş bir model için GPU yürütmesinin zaman çizelgesi görünümü; yüksek GPU bekleme süresini göstermektedir.
CUDA Grafiklerini Uygulama: Aracıyı Ortadan Kaldırma

Bu darboğazı gidermek için, CPU müdahalesi olmadan GPU işlem dizilerini kaydetmeye ve yeniden oynatmaya olanak tanıyan bir özellik olan CUDA Graphs'ı kullandık. Cube 3D mimarisinin otoregresif kod çözücü bileşeni, metin komutlarını işler ve sabit uzunluklu bir vektör aracılığıyla şekil belirteçleri üretir. 

İşlevsel olarak geleneksel büyük dil modeline (LLM) benzer olsa da, çift akışlı kod çözücü mimarimizin önemli bir farkı vardır: iki paralel dikkat akışı kullanır. Bir akış durum belirteçlerine, diğeri ise şekil belirteçlerine ayrılmıştır. Hazır LLM çıkarım motorları ihtiyaçlarımıza uygun değildi ve özel mimarimize uyarlanmış özel bir uygulamaya ihtiyacımız vardı.

CUDA Graphs'ı GPU için bir makro kaydetmek gibi düşünün. CPU'nun her komutu tek tek vermesi yerine, GPU işlemleri dizisinin tamamını (grafiği) kaydeder ve tek bir CPU komutuyla grafiğin tamamını başlatır. Bu yaklaşım, çıkarım sırasında CPU'nun her işlemi tek tek planlama ihtiyacını ortadan kaldırarak çekirdek başlatma yükünü önemli ölçüde azaltır. Grafik başlatıldığında, GPU başka komutlar beklemeden tüm diziyi otonom olarak yürütür.

CUDA Grafikleri bazı sınırlamalarla birlikte gelir. Grafik yapısının önceden belirlenmiş olması gerektiğinden, sabit bir parti boyutu ve giriş boyutları gerektirirler. Bu, her parti boyutu veya giriş şekli için ayrı grafiklerin oluşturulması gerektiği anlamına gelir. Cube 3D ile kullanım durumumuzda, ortak giriş boyutları etrafında çıkarım sürecini standartlaştırabildiğimiz için bu sınırlama kabul edilebilirdi.

Cube 3D modelimiz için CUDA Grafiklerini uygulamak üzere yaklaşımımızı uyarlamamız gerekti. Geleneksel LLM'lerde, dikkat işlemleri her zaman aynı dizi uzunluğuyla gerçekleştirilir ve çalışmak için statik bir şekil sağlar. Ancak, özel çift akış mimarimizde, bazı dikkat katmanları yalnızca dizi uzunluğu üzerinde çalışırken, diğerleri dizi ve koşul uzunluğunun bir kombinasyonu üzerinde çalışır.

Bu zorluklara rağmen, CUDA Graphs'ı uyguladıktan sonra dikkate değer sonuçlar elde ettik. Çıkarım sırasında her bir token için üretim süresini ölçmek için çıktı token başına süre (TPOT) kullanıyoruz. CUDA Graphs'ı uyguladıktan sonra TPOT değerimiz 60,5 milisaniyeden 20,5 milisaniyeye düştü; bu, 2,9 katlık bir iyileşme anlamına geliyor. Genel üretim süresi %66 azalarak 31 saniyeden 10,5 saniyeye düştü.

KV Önbellekleme: Başarımızı Daha Da İleriye Taşımak

Gecikmeyi daha da iyileştirmek için, sektör genelinde oldukça etkili olduğu kanıtlanmış bir LLM çıkarımında standart bir uygulama olan KV önbelleklemeyi uyguladık. 

Cube 3D gibi dönüştürücü tabanlı modellerde, her bir token üretimi, önceden üretilmiş tüm tokenlere dayalı olarak anahtar (K) ve değer (V) matrislerinin hesaplanmasını gerektirir. Dizi uzadıkça, her token için bu matrisleri yeniden hesaplamak giderek daha verimsiz hale gelir.

KV önbellekleme bunu şu şekilde çözer:

  1. Daha önce üretilen tüm tokenler için K ve V matrislerini depolayarak
  2. Yalnızca yeni tokenler için K ve V matrislerini hesaplamak
  3. Bu yeni matrisleri önbelleğe alınmış değerlere eklemek

Bu yaklaşım, gereksiz hesaplamaları ortadan kaldırarak her yeni token için gereken iş yükünü azaltır. Bu, üretilen dizi uzadıkça özellikle etkili hale gelir.

KV önbelleklemeyi CUDA Graph uygulamasına entegre etme yaklaşımımız, geleneksel LLM çıkarımına benzerdi. KV önbelleklemenin eklenmesi, TPOT'umuzu sadece 7,8 milisaniyeye düşürdü. Genel oluşturma süresi, orijinal 31 saniyeden sadece 4 saniyeye düşerek %87 azaldı. Bu önemli zaman tasarrufu, bu aracı kullanan içerik oluşturucular için çok daha etkili hale getirir.

CUDA Graphs ve KV önbelleği ile tek bir token üretiminin genel zaman çizelgesi.
GPU bekleme süresinin neredeyse hiç görülmediği bir CUDA Graph sürümü için GPU yürütme zaman çizelgesi görünümü
Geliştiriciler ve Kullanıcılar Üzerindeki Gerçek Dünya Etkisini Değerlendirme
Bu iyileştirmeler, geliştiriciler ve kullanıcılar için doğrudan somut faydalar sağlıyor. Mesh son işleme uygulansa bile, nihai uçtan uca (E2E) gecikme süremiz yedi saniyedir. Artık geliştiriciler daha hızlı yineleme döngülerinde çalışabilir ve kullanıcılar daha hızlı yanıt veren 3D oluşturma deneyimi yaşayabilir.
*All latency measurements were performed on NVIDIA H100 GPUs.

Gecikmeyi daha da azaltan ve kullanıcı deneyimini iyileştiren teknikleri araştırıyoruz. Bunlar arasında optimize edilmiş çekirdekler, daha hızlı çıkarım için model niceleme, donanıma özgü optimizasyonlar ve paralel token üretimi yer alıyor.

Bu çalışma, birçok 3D öğenin bir düzen içinde birbiriyle bağlamsal olarak birlikte çalışması gereken tam sahne oluşturma ve anlama aşamasına geldiğimizde daha karmaşık hale geliyor. Ayrıca, oluşturduğumuz 3D nesnelerin ve dünyaların tamamen işlevsel olmasını istiyoruz; yani kapıların açılıp kapanması, tekerleklerin dönmesi vb. Bunu başarmak için, tüm sahnelere, tamamen işlevsel nesnelere ve avatarlara ölçeklenebilecek hızlı oluşturma ve yineleme süreçlerine ihtiyacımız var. Cube 3D temel modelimizi genişletirken, daha fazla iyileştirme ve yeni işlevleri paylaşmaktan ve yaratıcı topluluğumuzun bunlarla oluşturduğu sürükleyici dünyaları görmekten heyecan duyuyoruz.