Menjalankan Inferensi AI dalam Skala Besar di Hybrid Cloud

  • Area penggunaan AI oleh Roblox, khususnya AI generatif, telah berkembang pesat selama beberapa tahun terakhir.

  • Kita berada pada bagian akhir dari proses tiga tahap untuk membangun dan mengoptimalkan infrastruktur yang diperlukan untuk menunjang perangkat AI dalam level ini.

  • Kami membagikan langkah-langkah yang telah kami tempuh untuk membuat infrastruktur hybrid cloud yang dapat mendukung inferensi ML dalam skala besar.

Di RDC minggu lalu, kami mengumumkan proyek inkubasi AI terbaru kami: mengembangkan model fondasi 3D multimodal yang dapat menunjang kreasi generatif. Menunjang kinerja AI untuk platform global 3D imersif yang selalu aktif dan digunakan oleh jutaan orang memerlukan daya komputasi yang sangat besar. Pada awal 2023, kami mendukung tidak lebih dari 50 alur inferensi pembelajaran mesin (ML). Kini, infrastruktur kami mendukung sekitar 250 alur. Ada puluhan ribu CPU dan lebih dari seribu GPU di dua pusat data dan infrastruktur hybrid cloud yang kami gunakan untuk menjalankan semua model ini. Namun, upaya kami akan terus berlanjut.

Kami telah membagikan pandangan kami tentang AI generatif bagi kreator, cara kami menggunakan AI untuk menjamin keamanan pengguna di Roblox, dan cara terjemahan AI membantu komunikasi pengguna di seluruh dunia. Namun, itu hanyalah beberapa contoh: Mengingat kira-kira ada 250 model dalam proses produksi, bisa dibilang hampir semua interaksi di Roblox ditunjang oleh AI. Ketika orang pertama kali datang ke Roblox dan mencari pengalaman virtual yang ingin dikunjungi, AI akan melakukan tugasnya di sistem rekomendasi dan pencarian kami. Lalu, ketika pengguna tersebut memilih pengalaman virtual dan menekan tombol main, algoritma pencocokan kami akan memilih server yang paling cocok untuk dimasuki.

Jutaan kreator sudah memiliki akses untuk memanfaatkan keunggulan alat AI generatif kami. Dengan Assistant, kreator bisa menggunakan perintah sederhana untuk membuat skrip dan tindakan yang dapat mempercepat pembuatan pengalaman virtual. Dengan alat Generator Tekstur dan Material kami, pengguna bisa dengan cepat mengubah dan melakukan iterasi tampilan dan gaya objek. Kini kita memasuki era AI generatif 4D dengan peluncuran terkini Penyiapan Avatar Otomatis, yang dapat menyederhanakan proses pembuatan avatar bagi kreator sehingga menghemat waktu berjam-jam. Per Agustus 2024, sekitar 8% dari tubuh avatar UGC yang dipublikasikan di Roblox dibuat menggunakan Penyiapan Avatar Otomatis.

Kini kami memasuki bagian akhir dari proses tiga tahap yang sudah berjalan selama beberapa tahun ini. Perjalanan ini dimulai pada akhir 2021. Pada saat itu, tidak adanya platform AI Roblox yang terpadu mendorong tim teknis untuk membuat platform kecil mereka sendiri dan memilih kerangka kerja yang berbeda-beda. Kami melihat tim mengembangkan komponen penting, termasuk Marketplace avatar, halaman beranda, dan fitur pencarian. Setiap tim membangun fitur khususnya sendiri. Tim-tim tersebut tidak memanfaatkan feature store terpusat, tetapi menyusun sendiri solusi sesuai dengan kebutuhan. Selain itu, setiap tim mengalami kesulitan karena harus melakukan pengoptimalan sendiri dan menghadapi tantangan peningkatan skala inferensi secara independen tanpa dukungan platform inti. Pendekatan yang terpecah-belah ini menyoroti kebutuhan mendesak akan platform terpusat dan terpadu yang dapat menyederhanakan proses dan meningkatkan efisiensi keseluruhan.

Fase Satu: Membangun Fondasi yang Kokoh untuk ML

Kami menerapkan Kubeflow sejak awal untuk memanfaatkan paket unsur-unsur utama pembentuk ML yang ditawarkannya, antara lain notebook, alur, eksperimen offline, dan penyajian model. Feature store masih diperlukan, jadi kami menerapkan solusi pihak ketiga untuk memulai. Agar ML lebih mudah diakses oleh para teknisi Roblox, kami mengembangkan roblox-ml, sebuah pustaka Python yang makin mengurangi tingkat kerumitan dalam mendorong model ke tahap produksi.

Kami menggunakan notebook Jupyter untuk menyediakan lingkungan pengembangan yang dioptimalkan untuk iterasi model, dengan server yang dikonfigurasi untuk mendapatkan akses data dan sumber daya GPU yang diperlukan. Meningkatkan skala tugas pelatihan atau menjalankannya secara berkala untuk melatih kembali suatu model biasanya membutuhkan penulisan alur. Pustaka roblox-ml kami memudahkan teknisi dalam mengonversi kode notebook menjadi alur Kubeflow dengan melakukan snapshot lingkungan runtime dan kode sumber tanpa perlu membuat image Docker, serta dengan memilih sumber daya komputasi yang diberi prioritas, mengatur notifikasi, dan menangani autentikasi.

Model hanya akan efektif jika memiliki fitur yang tepat pada saat yang tepat. Feature store kami menyederhanakan proses penentuan fitur baru, serta mendukung pembagian lebih dari 900 fitur di lebih dari 100 layanan fitur. Dengan demikian, tim bisa membuat dan mengerahkan model baru secara lebih cepat seiring dengan bertambahnya koleksi fitur kami.

Setelah platform alur ML kami berfungsi dan stabil, kami menyadari adanya peningkatan permintaan dukungan inferensi online—dengan personalisasi, pencarian, dan Marketplace sebagai ujung tombaknya. Meskipun kami merekomendasikan inferensi batch sebagai jalan meraih operasi ML yang matang, kami telah mengembangkan registri model dan platform layanan kami agar mendukung inferensi secara real-time. Dengan registri model ini, teknisi Roblox bisa menggunakan roblox-ml untuk mengunggah dan mengunduh model, yang selanjutnya ditandai dan diberi versi secara otomatis agar bisa memfasilitasi keterlacakan, rollback, dan uji A/B. Contohnya, model personalisasi kami dilatih dan dikerahkan setiap harinya, dan biasanya ada sekitar 20 uji A/B yang dijalankan secara bersamaan. Untuk platform layanan, kami menggunakan KServe dengan Server Inferensi Triton sebagai model serving runtime yang melandasinya karena kinerjanya yang tinggi, serta dukungannya untuk banyak kerangka kerja ML yang menggunakan baik GPU maupun CPU.

Baik dalam operasi secara batch maupun online, model Roblox harus melalui berbagai pengujian sebelum diluncurkan. Pengujian ini meliputi eksperimen offline, shadow testing, dan uji A/B. Setelah rilis, model akan terus dipantau untuk memastikan bahwa kinerjanya sesuai harapan, baik dari segi operasional (misalnya, latensi inferensi) maupun dari segi akurasi. Sebagai bagian dari komitmen kami untuk mewujudkan lingkungan yang aman dan sopan, manusia juga akan menjadi moderator yang mengevaluasi ketidaksesuaian inferensi yang dilaporkan. Dengan demikian, kami dapat mengambil keputusan kritis yang tepat dan turut meningkatkan kualitas set data pelatihan bagi model kami.

Fase Dua: Menyiapkan Peningkatan Skala Inferensi

Pada awal 2023, kami melihat adanya potensi besar AI generatif untuk mempercepat kreasi di Roblox. Agar dapat lebih optimal dalam memanfaatkan potensi tersebut, kami menghabiskan sebagian besar tahun 2023 untuk mengoptimalkan kinerja dan efisiensi pelatihan ML serta infrastruktur inferensi kami. Berkat pengoptimalan ini, kami berhasil mengurangi biaya komputasi pembuatan embedding CLIP secara signifikan. Pertama-tama, kami memperluas sistem pelatihan terdistribusi agar bisa melatih dengan set data besar dan menjalankan model dengan miliaran parameter di banyak node pekerja.

Ketika mulai membangun alur kerja terdistribusi, kami sadar bahwa pengaturan inferensi offline kami tidak akan mampu mendukung tingkat pertumbuhan pada saat itu untuk waktu yang lama. Pengaturan awal kami dirancang untuk inferensi secara real-time, yang di dalamnya data input dan output bersifat sekuensial. Meskipun efektif untuk upaya awal kami, pengaturan ini tidak mendukung pelaksanaan tugas secara paralel ataupun pemrosesan multitahap. Pengaturan tersebut juga kurang hemat sumber daya untuk menunjang skala yang kini kami perlukan. Selain itu, teknisi kami harus menulis logika pemecahan data (data chunking) dan penanganan eror sendiri, yang kian memakan waktu seiring dengan bertambahnya kebutuhan inferensi kami.

Untuk mengatasi masalah ini, kami menambahkan dukungan untuk Ray, sebuah kerangka kerja komputasi sumber terbuka yang memudahkan peningkatan skala alur kerja inferensi batch. Dengan membangun alur tugas terdistribusi berbasis Ray untuk inferensi batch, kami dapat mengoptimalkan penggunaan sumber daya, menerapkan pemrosesan multitahap, dan memungkinkan pelaksanaan tugas secara paralel dengan efektif serta toleransi kesalahan yang lebih baik. Selain itu, pustaka Ray Data juga membantu teknisi untuk menentukan alur dengan eksekusi streaming hanya dalam beberapa baris. Hal ini membantu meningkatkan kecepatan dan efisiensi developer. Dengan memanfaatkan Ray untuk inferensi batch, kami meraih peningkatan efisiensi yang luar biasa sejauh ini.

Seiring dengan bertambahnya kebutuhan inferensi, kami memindahkan semua inferensi CPU ke pusat data kami sendiri. Dengan begitu, kami punya kendali langsung yang lebih baik atas latensi dan pengaturan privasinya. Kami memproses sekitar 1 miliar permintaan personalisasi setiap harinya dari 79,5 juta pengguna aktif harian (per 30 Juni 2024). Dengan memindahkan beban kerja ini ke pusat data kami sendiri, kami dapat mempertahankan efisiensi tanpa mengorbankan pengalaman pengguna. Untuk menghemat biaya inferensi, ada banyak sistem yang melakukan cache permintaan—hal ini dapat menyebabkan rekomendasi yang tidak update karena banyak pengguna mengunjungi halaman beranda Roblox beberapa kali dalam sehari. Pemindahan ini juga meningkatkan efisiensi kami sehingga dapat lebih melakukan pengoptimalan ketika inferensi dijalankan dan mendistribusikan beban kerja guna mengurangi sumber daya komputasi yang diperlukan.

Saat melanjutkan peningkatan skala, kami menyadari adanya kebutuhan solusi feature store khusus yang dapat mendukung throughput tinggi, latensi rendah, dan efisiensi biaya, serta tetap mendukung iterasi cepat untuk berbagai layanan. Solusi pihak ketiga yang ada tidak memenuhi kebutuhan ini, jadi kami mengembangkan feature store khusus yang dibuat dengan proyek sumber terbuka, yaitu Feast. Feature store kami menyediakan bahasa kustom khusus domain untuk menentukan transformasi bagi fitur batch dan streaming. Flink digunakan sebagai mesin pemrosesan stream untuk mendukung fitur real-time yang sangat penting bagi model dengan kebutuhan untuk menyertakan informasi paling terkini. Di sisi lain, ada fitur yang perlu diturunkan dari pemrosesan sejumlah besar aset 3D dalam batch dengan menjalankan ulang mesin game Roblox dalam lingkungan yang terdistribusi. Feature store kami kini mengolah sekitar 30 miliar rekaman dan menyajikan 70 miliar rekaman per harinya dengan latensi P99 sebesar 50 ms—serta mendukung lebih dari 100 layanan fitur.

Penggunaan embedding oleh model juga telah berkembang pesat, didorong oleh meningkatnya pertumbuhan tentang pemahaman semantik, baik melalui NLP, visi komputer, atau sistem rekomendasi. Hal ini mendorong kami untuk membuat basis data vektor yang dapat secara efisien menyimpan dan mengambil vektor sebagai poin dimensi tinggi. Basis data vektor telah memungkinkan pencarian tetangga terdekat dengan cepat untuk menunjang kapabilitas tertentu, misalnya, pencarian multimodal dan deteksi pelanggaran konten.

Seiring dengan bertambahnya tim yang mulai memanfaatkan model ML, kami ingin menentukan efisiensi skala dan membantu teknisi meraih kesuksesan dengan lebih cepat. Oleh karena itu, kami membentuk tim ground truth sendiri. Tim ini membantu teknisi merancang alur produksi set datanya sendiri, melatih dan memvalidasi data menggunakan evaluator manusia, dan menyampaikan data berkualitas tinggi. Hal ini telah membantu kami dalam melakukan standardisasi proses pembuatan alur data dan memvalidasi set data, serta format penyampaian, pelacakan, dan pemantauan data.

Fase Tiga: Mengoperasionalkan Inferensi Besar

Dengan peluncuran Roblox Assistant, jumlah token yang diproses meningkat menjadi 1,5 miliar per minggu. Kami juga merilis fitur baru, antara lain, terjemahan chat AI real-time dan model keamanan suara (kini menjadi sumber terbuka), yang secara signifikan meningkatkan permintaan kapasitas inferensi. Kami mengerjakan dua proyek inti untuk mendorong pengembangan aplikasi AI: gateway ML, dan platform operasi model bahasa besar (LLMOps) yang didasarkan pada proyek vLLM. Bersama-sama, kedua proyek ini sangatlah penting untuk generasi ML masa depan di Roblox.

Kami membangun gateway ML terpadu untuk memusatkan aset ke semua model besar, baik yang bersifat sumber terbuka maupun yang dikembangkan secara internal, di berbagai lingkungan, termasuk CPU dan GPU di cloud dan on-premise. Sasaran kami adalah menciptakan sistem yang efisien dan sederhana untuk mengelola sumber daya AI di seluruh perusahaan. Di back end, gateway ini menyediakan antarmuka API bersama, opsi konfigurasi yang ramah pengguna, dan pembagian sumber daya yang efisien antara semua model yang telah kami kerahkan.

Gateway tersebut meningkatkan ketahanan layanan inferensi kami dengan menyediakan throttle terpusat berdasarkan jumlah token untuk beban kerja AI generatif dan penyeimbangan beban antarwilayah dengan mempertimbangkan latensi. Selain itu, gateway ini juga meningkatkan keamanan dengan memusatkan pengelolaan kunci API sehingga dapat dilakukan pelacakan penggunaan secara komprehensif dan kemungkinan implementasi pemberian hak, serta integrasi dengan alat pemantauan guna meningkatkan keteramatan. Semua fitur ini akan membantu kami mengoptimalkan penggunaan model besar, memangkas biaya, dan memberikan wawasan yang bermanfaat bagi teknisi di seluruh Roblox.

Selain itu, kami telah menerapkan vLLM sebagai mesin inferensi primer untuk LLM, dengan memanfaatkan kapabilitas kinerja tinggi vLLM untuk menunjang aplikasi AI di seluruh Roblox. Sejak beralih ke vLLM, kami meraih hampir 2 kali lipat perbaikan latensi dan throughput, dan kami saat ini melayani sekitar 4 miliar token per minggu.

Pilihan vLLM kami selaras dengan komitmen untuk memanfaatkan teknologi sumber terbuka dan mutakhir dengan skala yang dapat ditingkatkan secara efisien demi memenuhi kebutuhan basis pengguna kami yang besar dan pengalaman virtual yang beragam. Roblox adalah kontributor aktif terhadap proyek vLLM sumber terbuka yang menjadi ujung tombak pengembangan dukungan multimodal vLLM. Dengan demikian, mesin dapat menangani tidak hanya teks, tetapi juga gambar dan mungkin tipe data lainnya pada masa depan. Kami juga telah menerapkan teknik dekode spekulatif untuk makin menyempurnakan kinerja inferensi agar bisa memproses tugas bahasa secara lebih cepat dan efisien.

Dengan gateway ML dan vLLM, kami dapat secara efisien mendukung ratusan alur ML yang digunakan di Roblox—serta terus meningkatkan skala inferensi seiring dengan bertambahnya permintaan fitur yang didukung oleh AI. Pekerjaan ini masih belum rampung bagi kami. Kami punya rencana besar untuk masa depan AI di Roblox. Kami tengah mengembangkan alat berbasis AI baru untuk meningkatkan efisiensi kreasi bagi kreator pemula dan ahli. Seperti biasa, kami tengah mengembangkan cara untuk meningkatkan kinerja dan efisiensi infrastruktur kami agar bisa lebih menunjang alat AI yang digunakan oleh kami dan kreator kami setiap harinya.

Komitmen Kami terhadap Sumber Terbuka

Kami telah tiba sejauh ini berkat peran sejumlah proyek sumber terbuka yang berhasil. Sebagian besar stack teknis kami dibangun menggunakan teknologi sumber terbuka yang disebutkan di atas.

Kami berkomitmen untuk menjadi mitra yang kuat bagi komunitas AI sumber terbuka, dan menyumbangkan sebagian dari teknologi sumber terbuka milik kami. Kami belum lama ini mengumumkan model sumber terbuka pertama kami, yaitu penggolong keamanan suara, dan kami tengah mengembangkan gateway ML kami sendiri, dengan harapan bisa menjadikannya sumber terbuka juga. Kami percaya bahwa masa depan AI harus berlandaskan keterbukaan dan transparansi, dan kami sangat senang bisa menjadi anggota aktif dari komunitas ini.