Mühendislik
Yapay Zekâ ile Beatmap Üretimini Etkileşimli Hissettirecek Kadar Nasıl Hızlandırdık
Bir dakika ya da daha fazlası yerine yaklaşık 20 saniyelik GPU süresinde tam bir osu! mania mapset’i: bir ManiaGAI isteğinde süre nereye gidiyor ve tarayıcıdan toplu zorluklara onu kısaltan kararlar.
Dakikalarca beklediğin bir oluşturucu, bir toplu iştir (batch job). Bir şarkı gönderirsin, başka bir şeyle uğraşırsın ve ne ürettiyse ona geri dönersin — beğenmezsen, farklı bir stil ya da farklı bir zorluk seti denemek sana bir bekleme daha kaybettirir. Saniyeler içinde cevap veren bir oluşturucu ise bir araçtır: denersin, dinlersin, ayarlarsın ve yeniden denersin.
İşte bu fark yüzünden ManiaGAI’ın 2. sürümünde gecikmeyi (latency), sonda optimize edilecek bir şey olarak değil, tüm sistem boyunca bir tasarım kısıtı olarak ele aldık. 1. sürüm bir mapset için bir dakika ya da daha fazla sürüyordu. 2. sürüm tipik bir şarkıda tam bir mapset için yaklaşık 20 saniyelik GPU süresi harcıyor — şarkıya ve istenen zorluklara bağlı olarak genellikle 13 ila 25 saniye. Bu sürenin nereye gittiğini ve geri kalanını ortadan kaldıran kararları aşağıda anlatıyoruz.
Bir isteğin anatomisi
- Tarayıcın
- Timing ∥ müzikal özellikler
- Planner
- Noter
- Doğrulama
- İndirme
v2 lansmanından ölçülmüş bir üretim çalıştırması: 2:50 uzunluğunda bir şarkı, 5 zorluk, bir NVIDIA T4 GPU üzerinde — toplam 12,7 saniye.
| Aşama | Süre |
|---|---|
| Timing + müzikal özellikler (eşzamanlı çalışır) | 3,8 s |
| Planlama (tüm zorluklar) | 1,0 s |
| Nota üretimi (5 zorluğun tamamı) | 6,1 s |
| Tüm çalıştırma | 12,7 s |
v2 lansman sisteminde (1 Ekim 2026) tek bir şarkı için GPU hesaplama süresi; yükleme, sırada bekleme ve indirme hariç.
1. Ses işini, kimse Oluştur’a basmadan önce yap
Yüklenen her şarkının, modeller kullanabilmeden önce çözülmesi, ses yüksekliğinin normalleştirilmesi ve tek ve tutarlı bir biçime yeniden kodlanması gerekir. Bir sunucuda bu, GPU’nun aksi halde bekleyeceği birkaç saniyelik bir iştir. ManiaGAI’da bu iş, dosyayı seçtiğin anda tarayıcında yapılır — sen daha tuş sayısını ve zorlukları seçerken. Oluştur’a bastığında iş genellikle bitmiş olur. Yavaş bir cihazda şarkıyı hazırlamak 20 saniyeden uzun sürerse, işi bunun yerine sunucu devralır; böylece bu optimizasyon kimseyi asla bekletmez.
2. Timing’i ve müziği anlamayı yan yana çalıştır
Planlama başlamadan önce şarkıyla ilgili iki şeyin bilinmesi gerekir: timing ızgarası (açık kaynaklı Beat This modeli ve kendi ızgara fitting yöntemimiz) ve müzikal özellikleri (MERT müzik modelinden). Birbirlerine bağlı değiller, bu yüzden birbirlerini de beklemiyorlar: GPU Beat This’i ve MERT’i çalıştırırken ızgara fitting’i aynı anda CPU’da çalışıyor. Yukarıdaki çalıştırmada tüm anlama aşaması 3,8 saniye sürdü.
3. Her zorluğu tek bir geçişte üret
Bir ManiaGAI mapset’inde en fazla on zorluk olur. Onları birbiri ardına üretmek süreyi zorluk sayısıyla çarpardı. Bunun yerine, istenen her zorluk birlikte, tek bir toplu (batched) GPU geçişinde planlanır ve üretilir — aynı şarkıyı ve aynı müzikal özellikleri paylaşırlar, yalnızca hedefler farklıdır. Yukarıdaki çalıştırmada beş zorluğun nota üretiminin 6,1 saniyeye sığması bu sayede.
4. Chart’ı nota nota yazmak yerine bütün olarak iyileştir
Nota modeli otoregresif değildir: tüm chart’ı, şarkının başından sonuna her seferinde tek bir token yerine sabit sayıda iyileştirme geçişinde üretir — yani chart sonunda kaç nota içerirse içersin model adımlarının sayısı sabittir. (Modelin neden böyle çalıştığı ayrı bir hikâye: Planner + Noter yazısı.)
5. Sıfırdan değil, bir anlık görüntüden başla
Üretim serverless GPU worker’ları üzerinde çalışır; bu da bir istek geldiğinde her zaman çalışan bir worker olmadığı anlamına gelir. Modelleri yüklemek ve her şeyi sıfırdan ısıtmak o ilk isteğe saniyeler ekler. Bunun yerine worker’lar, her şey yüklenip ısındıktan sonra alınmış bir bellek anlık görüntüsünden (snapshot) geri yüklenir; böylece yeni bir worker, o süreyi model yüklemeye harcamak yerine yaklaşık bir saniyede hazır olur.
6. Bitiş çizgisinde bekleme
Son adımlar eskiden kendi gecikmelerini ekliyordu. Artık indirilebilir .osz, chart’lar hazır olduğu anda paketleniyor ve biten bir map, üretim sona erdiği anda Map’lerim’e kaydediliyor — sayfadan ayrılmış olsan bile. Oluşturucudaki ilerleme göstergesi her üretimin gerçekte hangi aşamada olduğunu bildiriyor; böylece bekleme hiçbir zaman bir muamma olmuyor.
Birebir aynı chart’larla, yine daha hızlı
8 Ekim 2026’da üretim sisteminin daha hızlı bir uygulamasını yayına aldık: map’ler artık yaklaşık iki kat daha hızlı üretiliyor ve chart’lar birebir aynı — aynı girdi, aynı çıktı. Bu değişiklik için katı bir kural koyduk: modelin yazdığını değiştiren bir hızlanma bir model değişikliğidir ve öyle değerlendirilmelidir. Yalnızca bekleme kısaldı.
Hızın kazandırdıkları
Hız, ManiaGAI’ın nasıl kullanıldığını değiştiriyor. İkinci bir stili ya da farklı bir zorluk setini denemeyi birkaç saniyelik bir iş haline getiriyor, önce önizle-sonra indir akışını doğal kılıyor ve ücretsiz bir katmanı ayakta tutmayı mümkün kılıyor. Yalnızca model için değil, tarayıcıdan indirmeye kadar tüm istek için optimize etmemizin nedeni de bu: oyuncular GPU süresini değil, beklemeyi hisseder.
Bu aşamaların sistemde nerede durduğu için Teknoloji sayfasına, neyin ne zaman değiştiği için de değişiklik günlüğüne bak.