Engineering
Cara Kami Membuat Generate Beatmap AI Cukup Cepat untuk Terasa Interaktif
Mapset osu! mania penuh dalam sekitar 20 detik waktu GPU, bukan semenit lebih: ke mana waktu habis dalam request ManiaGAI, dan keputusan — dari browser hingga batch difficulty — yang memangkasnya.
Generator yang harus ditunggu bermenit-menit itu sebuah batch job. Kamu memasukkan lagu, mengerjakan hal lain, lalu kembali untuk melihat apa pun hasilnya — dan kalau kamu tidak suka, mencoba gaya lain atau set difficulty lain berarti harus menunggu lagi. Generator yang menjawab dalam hitungan detik adalah sebuah alat: kamu mencoba, mendengarkan, mengatur, lalu mencoba lagi.
Perbedaan itulah alasan kenapa, untuk ManiaGAI versi 2, kami memperlakukan latensi sebagai batasan desain di seluruh sistem, bukan sesuatu yang dioptimalkan di akhir. Versi 1 butuh satu menit atau lebih untuk satu mapset. Versi 2 butuh sekitar 20 detik waktu GPU untuk satu mapset penuh pada lagu biasa — umumnya 13 sampai 25 detik, tergantung lagu dan difficulty yang diminta. Berikut ke mana waktu itu pergi, dan keputusan-keputusan yang memangkas sisanya.
Anatomi sebuah request
- Browser-mu
- Timing ∥ fitur musik
- Planner
- Noter
- Validasi
- Unduh
Satu run produksi yang diukur saat peluncuran v2: lagu 2:50, 5 difficulty, di GPU NVIDIA T4 — 12,7 detik secara total.
| Tahap | Waktu |
|---|---|
| Timing + fitur musik (berjalan bersamaan) | 3,8 s |
| Perencanaan (semua difficulty) | 1,0 s |
| Generate not (semua 5 difficulty) | 6,1 s |
| Seluruh run | 12,7 s |
Waktu komputasi GPU untuk satu lagu di sistem peluncuran v2 (1 Oktober 2026), tidak termasuk upload, antrean, atau unduhan.
1. Kerjakan pemrosesan audio sebelum ada yang menekan Buat
Setiap lagu yang diunggah harus di-decode, dinormalisasi kerasnya, dan di-encode ulang ke satu format yang konsisten sebelum bisa dipakai model. Di server, itu pekerjaan beberapa detik yang harus ditunggu GPU. Di ManiaGAI, ini terjadi di browser-mu, begitu kamu memilih file — selagi kamu masih memilih jumlah key dan difficulty. Saat kamu menekan Buat, pekerjaan itu biasanya sudah selesai. Kalau menyiapkan lagu di perangkat yang lambat butuh lebih dari 20 detik, server yang mengambil alih, jadi optimasi ini tidak pernah membuat siapa pun menunggu.
2. Jalankan timing dan pemahaman musik berdampingan
Ada dua hal yang harus diketahui tentang lagu sebelum perencanaan dimulai: grid timing-nya (dari model open-source Beat This ditambah grid fitting buatan kami sendiri) dan fitur musikalnya (dari model musik MERT). Keduanya tidak saling bergantung, jadi tidak saling menunggu: GPU menjalankan Beat This dan MERT sementara grid fitting berjalan di CPU pada saat yang sama. Pada run di atas, seluruh tahap pemahaman memakan 3,8 detik.
3. Generate semua difficulty dalam satu putaran
Sebuah mapset ManiaGAI punya hingga sepuluh difficulty. Membuatnya satu per satu akan melipatgandakan waktu sebanyak jumlah difficulty. Sebagai gantinya, semua difficulty yang diminta direncanakan dan di-generate bersamaan, dalam satu putaran GPU yang di-batch — semuanya berbagi lagu dan fitur musikal yang sama, hanya targetnya yang berbeda. Begitulah generate not untuk lima difficulty muat dalam 6,1 detik pada run di atas.
4. Sempurnakan seluruh chart alih-alih menulisnya not demi not
Model not-nya non-autoregresif: ia menghasilkan seluruh chart dalam jumlah putaran penyempurnaan yang tetap, bukan satu token setiap kali dari awal sampai akhir lagu — jadi jumlah langkah model tetap, berapa pun jumlah not yang akhirnya ada di chart. (Kenapa model bekerja seperti ini adalah cerita tersendiri: artikel Planner + Noter.)
5. Mulai dari snapshot, bukan dari nol
Proses generate berjalan di worker GPU serverless, artinya tidak selalu ada worker yang sedang berjalan saat request datang. Memuat model dan memanaskan semuanya dari nol akan menambah banyak detik pada request pertama itu. Sebagai gantinya, worker dipulihkan dari snapshot memori yang diambil setelah semuanya dimuat dan dipanaskan, sehingga worker baru siap dalam sekitar satu detik alih-alih menghabiskan waktu itu untuk memuat model.
6. Jangan menunggu di garis finis
Langkah-langkah terakhir dulu menambah jedanya sendiri. Sekarang .osz yang bisa diunduh langsung dirakit begitu chart-chartnya siap, dan map yang sudah jadi tersimpan ke Chart-ku tepat saat proses generate selesai — bahkan kalau kamu sudah meninggalkan halamannya. Progres di generator melaporkan tahap sebenarnya dari setiap proses generate, jadi menunggu tidak pernah jadi misteri.
Lebih cepat lagi, dengan chart yang identik
Pada 8 Oktober 2026 kami merilis implementasi sistem generate yang lebih cepat: map sekarang dibuat sekitar dua kali lebih cepat, dan chart-nya sama persis — input yang sama, output yang sama. Kami menjadikannya aturan mutlak untuk perubahan itu: percepatan yang mengubah apa yang ditulis model adalah perubahan model, dan harus dinilai sebagai perubahan model. Hanya waktu tunggunya yang jadi lebih singkat.
Apa yang didapat dari kecepatan
Kecepatan mengubah cara ManiaGAI dipakai. Mencoba gaya kedua atau set difficulty lain jadi urusan beberapa detik, alur preview lalu unduh jadi terasa wajar, dan paket gratis jadi mungkin untuk terus dijalankan. Itu juga alasan kami mengoptimalkan seluruh request — dari browser sampai unduhan — bukan hanya modelnya: yang dirasakan pemain adalah waktu tunggunya, bukan waktu GPU-nya.
Untuk posisi tahap-tahap ini dalam sistem, lihat halaman Teknologi; untuk apa yang berubah dan kapan, lihat changelog.