Konten di situs ini telah diterjemahkan menggunakan kecerdasan buatan (AI) atau teknologi penerjemahan mesin, dan mungkin terdapat kesalahan.

Skip to content

Mempercepat Inferensi AI untuk Pembuatan 3D di Roblox

Pembuatan Objek 3D 7,8x Lebih Cepat dan Lebih Responsif

SEO image for Accelerating AI Inference for 3D Creation on Roblox
  • Roblox mengimplementasikan CUDA Graphs dan KV caching untuk mempercepat pembangkitan mesh 3D demi iterasi yang lebih responsif.
  • Pada peluncuran, model Cube 3D dapat menghasilkan token dalam 7,8 milidetik (turun dari 60,5 milidetik) dan objek lengkap dalam 4 detik (turun dari 31 detik). 

Awal tahun ini, Roblox membagikan kemampuan pertama dari model dasar Cube 3D kami. Dengan Cube 3D, kreator dapat menghasilkan model dan lingkungan 3D langsung dari prompt teks. Sejak awal, kami memprioritaskan optimasi latensi, menyadari bahwa waktu pembangkitan yang lambat mengganggu proses iteratif yang inheren. Sebelum Cube 3D diluncurkan pada bulan Maret, kami telah membuat langkah inferensi 7,8 kali lebih cepat dan lebih responsif bagi pengembang maupun pengguna. 

Sejak diluncurkan, lebih dari 578.000 objek telah dihasilkan di berbagai pengalaman yang menonjol. Pengembang juga menunjukkan minat untuk memungkinkan pengguna menghasilkan objek 3D dalam pengalaman menggunakan prompt teks seperti “kucing”, “burger”, dan sebagainya. Salah satu yang paling menonjol adalah Mic Up, permainan hangout populer yang menggunakan obrolan suara, yang memanfaatkan Cube 3D untuk memberikan pemain cara yang menyenangkan dan interaktif dalam menghasilkan objek. Dalam implementasinya, pemain dapat membuka menu di sisi kiri yang berisi fitur tambahan, termasuk ikon AI. Setelah mengklik ikon tersebut, pemain dapat memasukkan prompt teks untuk menghasilkan objek 3D. Bagi pengguna, waktu generasi yang lama menimbulkan hambatan, menghalangi mereka untuk merasakan keajaiban melihat ide mereka diubah menjadi 3D secara real-time. 

Kami ingin mengubah pengalaman pembuatan 3D dari interaksi yang terhenti dan menunggu menjadi sesuatu yang terasa responsif dan alami, sehingga memungkinkan eksperimen yang cepat. Kemampuan untuk menambahkan objek ke dalam sebuah adegan dengan cepat sangat penting bagi para pengembang. Untuk mempercepat Cube 3D, pertama-tama kami membuat profil pipa inferensi untuk mengidentifikasi hambatan kinerja. Meskipun menggunakan GPU yang kuat, kami menemukan waktu idle yang signifikan di antara operasi.

Mengatasi Hambatan Penjadwalan CPU-GPU

Kerangka kerja pembelajaran mendalam modern mengandalkan CPU untuk menjadwalkan dan meluncurkan operasi (atau kernel) pada GPU. CPU mempersiapkan setiap operasi, mengirimkannya ke GPU, dan menunggu konfirmasi sebelum mempersiapkan operasi berikutnya. Penantian ini menciptakan kemacetan penjadwalan di mana GPU bisa menganggur sementara CPU mempersiapkan batch pekerjaan berikutnya. Idealnya, kita ingin CPU berjalan lebih cepat dari GPU, mempersiapkan dan mengantrekan operasi sehingga GPU selalu memiliki pekerjaan yang harus dilakukan.

Hal ini sangat menjadi masalah bagi decoder autoregresif dalam model tipe transformer seperti Cube 3D, yang perlu memproses input dan menghasilkan token secara berurutan. Model-model ini memerlukan ribuan operasi individual untuk satu generasi, dan beban komputasi menumpuk pada setiap langkah dalam urutan tersebut.

“Kami ingin membangun sesuatu yang memungkinkan interaksi empat dimensi,” kata Wakil Presiden Teknik Anupam Singh, menjelaskan mengapa Roblox memilih pendekatan autoregresif. “Kami tidak hanya ingin membangun mobil; kami juga ingin dapat membuka pintu mobil dan masuk ke dalamnya.”

Setiap operasi memerlukan:

  • Waktu CPU untuk menyiapkan setiap kernel
  • Beban dari peluncuran kernel
  • Waktu eksekusi GPU (komputasi sebenarnya)
  • Overhead sinkronisasi saat memeriksa penyelesaian

Dalam kasus operasi kecil yang dieksekusi dengan cepat di GPU, overhead ini dapat mendominasi waktu inferensi. GPU mungkin hanya melakukan komputasi aktif selama sebagian kecil dari total waktu inferensi.

Jadwal keseluruhan untuk pembuatan satu token tanpa optimasi apa pun.
Tampilan garis waktu eksekusi GPU untuk model yang belum dioptimalkan, menunjukkan waktu idle GPU yang tinggi.
Menerapkan CUDA Graphs: Menghilangkan Perantara

Untuk mengatasi hambatan ini, kami memanfaatkan CUDA Graphs—fitur yang memungkinkan perekaman dan pemutaran ulang urutan operasi GPU tanpa campur tangan CPU. Komponen dekoder autoregresif dari arsitektur Cube 3D memproses prompt teks dan menghasilkan token bentuk melalui vektor panjang tetap. 

Meskipun secara fungsional mirip dengan model bahasa besar (LLM) tradisional, arsitektur dekoder aliran ganda kami memiliki perbedaan penting—yaitu menggunakan dua aliran perhatian paralel. Satu aliran didedikasikan untuk token kondisi dan yang lainnya untuk token bentuk. Mesin inferensi LLM yang tersedia di pasaran tidak sesuai dengan kebutuhan kami, dan kami memerlukan implementasi khusus yang disesuaikan dengan arsitektur spesifik kami.

Bayangkan CUDA Graphs seperti merekam makro untuk GPU. Alih-alih CPU mengeluarkan setiap perintah secara individual, ia merekam urutan lengkap operasi GPU (grafik) dan meluncurkan seluruh grafik dengan satu instruksi CPU. Pendekatan ini secara drastis mengurangi beban peluncuran kernel dengan menghilangkan kebutuhan CPU untuk menjadwalkan setiap operasi secara individual selama inferensi. Setelah grafik diluncurkan, GPU mengeksekusi seluruh urutan secara otonom, tanpa menunggu instruksi lebih lanjut.

CUDA Graphs memang memiliki beberapa batasan. Karena struktur grafik harus ditentukan sebelumnya, mereka memerlukan ukuran batch dan dimensi input yang tetap. Ini berarti grafik terpisah harus dibuat untuk setiap ukuran batch atau bentuk input. Untuk kasus penggunaan kami dengan Cube 3D, batasan ini dapat diterima, karena kami dapat menstandarkan proses inferensi berdasarkan dimensi input yang umum.

Kami harus menyesuaikan pendekatan kami untuk mengimplementasikan CUDA Graphs pada model Cube 3D kami. Pada LLM tradisional, operasi perhatian selalu dilakukan dengan panjang urutan yang sama, sehingga memberikan bentuk statis untuk dikerjakan. Namun, dalam arsitektur dual-stream kustom kami, beberapa lapisan perhatian beroperasi hanya pada panjang urutan, sementara yang lain beroperasi pada kombinasi panjang urutan dan kondisi.

Terlepas dari tantangan ini, kami melihat hasil yang luar biasa setelah mengimplementasikan CUDA Graphs. Kami menggunakan waktu per token keluaran (TPOT) untuk mengukur waktu pembangkitan setiap token selama inferensi. Setelah mengimplementasikan CUDA Graphs, TPOT kami meningkat dari 60,5 milidetik menjadi 20,5 milidetik, peningkatan sebesar 2,9 kali lipat. Waktu pembangkitan keseluruhan turun 66%, dari 31 detik menjadi 10,5 detik.

KV Caching: Membangun atas Kesuksesan Kami

Untuk lebih meningkatkan latensi, kami menerapkan KV caching, sebuah praktik standar dalam inferensi LLM yang telah terbukti sangat efektif di seluruh industri. 

Dalam model berbasis transformer seperti Cube 3D, setiap pembangkitan token memerlukan perhitungan matriks kunci (K) dan nilai (V) berdasarkan semua token yang dihasilkan sebelumnya. Seiring bertambahnya panjang urutan, menghitung ulang matriks-matriks ini untuk setiap token menjadi semakin tidak efisien.

Pencadangan KV mengatasi hal ini dengan:

  1. Menyimpan matriks K dan V untuk semua token yang dihasilkan sebelumnya
  2. Menghitung matriks K dan V hanya untuk token baru
  3. Menambahkan matriks baru ini ke nilai yang disimpan

Pendekatan ini menghilangkan perhitungan yang berlebihan, sehingga mengurangi beban kerja yang diperlukan untuk setiap token baru. Hal ini menjadi sangat berpengaruh seiring bertambahnya panjang urutan yang dihasilkan.

Pendekatan kami dalam mengintegrasikan penyimpanan cache KV dengan implementasi CUDA Graph mirip dengan inferensi LLM tradisional. Penambahan penyimpanan cache KV mengurangi TPOT kami menjadi hanya 7,8 milidetik. Waktu generasi keseluruhan berkurang 87%, dari 31 detik menjadi hanya 4 detik. Pengurangan waktu yang signifikan ini membuatnya jauh lebih efektif bagi para kreator yang menggunakan alat ini.

Garis waktu keseluruhan dari pembangkitan satu token dengan CUDA Graphs dan cache KV.
Tampilan garis waktu eksekusi GPU untuk versi CUDA Graph yang menunjukkan waktu idle GPU yang hampir tidak ada
Menilai Dampak Nyata bagi Pengembang dan Pengguna
Peningkatan ini secara langsung memberikan manfaat nyata bagi pengembang dan pengguna. Bahkan dengan pemrosesan pasca-mesh, latensi end-to-end (E2E) akhir kami adalah tujuh detik. Pengembang kini dapat bekerja dalam siklus iterasi yang lebih cepat, dan pengguna merasakan pembangkitan 3D yang lebih responsif.
*All latency measurements were performed on NVIDIA H100 GPUs.

Kami sedang mengeksplorasi teknik-teknik yang lebih mengurangi latensi dan meningkatkan pengalaman pengguna, termasuk kernel yang dioptimalkan, kuantisasi model untuk inferensi yang lebih cepat, optimisasi khusus perangkat keras, dan pembangkitan token paralel.

Pekerjaan ini menjadi lebih kompleks saat kami memperluas ke pembangkitan dan pemahaman adegan penuh, di mana banyak elemen 3D perlu bekerja sama dalam konteks satu sama lain di dalam tata letak. Kami juga ingin objek dan dunia 3D yang kami buat berfungsi sepenuhnya, sehingga pintu dapat dibuka dan ditutup, roda berputar, dan sebagainya. Untuk mencapainya, kami memerlukan pembangkitan dan iterasi yang cepat untuk mencakup adegan penuh, objek yang berfungsi sepenuhnya, dan avatar. Kami sangat antusias untuk membagikan peningkatan lebih lanjut dan fungsionalitas baru seiring kami memperluas model dasar Cube 3D kami—dan untuk melihat dunia imersif yang dibangun oleh komunitas kreator kami dengan model tersebut.