エンジニアリング
AIによるbeatmap生成を、インタラクティブに感じられるほど速くした方法
osu! mania mapset一式を、1分以上ではなくGPU時間約20秒で。ManiaGAIのリクエストで時間がどこに使われるのか、そしてブラウザでの処理から難易度のバッチ生成まで、時間を削った判断を紹介します。
何分も待たされるジェネレーターは、バッチ処理です。曲を送信して、別のことをして、戻ってきたら何かができている — 気に入らなければ、別のスタイルや別の難易度の組み合わせを試すたびに、また待たされます。数秒で応えてくれるジェネレーターは、道具です:試して、聴いて、調整して、また試せます。
この違いがあるからこそ、ManiaGAIのバージョン2では、レイテンシを最後に最適化するものではなく、システム全体にわたる設計上の制約として扱いました。バージョン1ではmapset一つに1分以上かかっていました。バージョン2では、一般的な曲のmapset一式にGPU時間で約20秒— 曲と指定した難易度によって、通常13〜25秒です。ここでは、その時間が何に使われているのか、そして残りの時間を削った判断を紹介します。
リクエストの内訳
- あなたのブラウザ
- タイミング ∥ 音楽特徴量
- Planner
- Noter
- 検証
- ダウンロード
v2リリース時に本番環境で測定した1回の実行例:2:50の曲、5難易度、NVIDIA T4 GPUで — 合計12.7秒。
| 段階 | 時間 |
|---|---|
| タイミング+音楽特徴量(並行実行) | 3.8 s |
| プランニング(全難易度) | 1.0 s |
| ノーツ生成(全5難易度) | 6.1 s |
| 実行全体 | 12.7 s |
v2リリース時のシステム(2026年10月1日)での1曲あたりのGPU計算時間。アップロード、キュー待ち、ダウンロードは含みません。
1. 「作成」が押される前に音声処理を済ませる
アップロードされた曲はすべて、モデルが使えるようになる前に、デコードし、ラウドネスを正規化し、一つの統一された形式に再エンコードする必要があります。サーバーでやると、その数秒間GPUが待たされることになります。ManiaGAIでは、これをあなたのブラウザで、ファイルを選んだ瞬間から実行します — あなたがまだキー数や難易度を選んでいる間にです。「作成」を押す頃には、たいてい処理は終わっています。遅い端末で曲の準備に20秒以上かかる場合は、代わりにサーバーが引き継ぐので、この最適化のせいで誰かが待たされることはありません。
2. タイミングと音楽理解を並行して実行する
プランニングを始める前に、曲について二つのことを知っておく必要があります:タイミンググリッド(オープンソースのBeat Thisモデルと独自のグリッドフィッティングによるもの)と、音楽特徴量(MERT音楽モデルによるもの)です。この二つは互いに依存しないので、互いを待つ必要もありません:GPUがBeat ThisとMERTを実行している間、同時にCPUでグリッドフィッティングを行います。上の実行例では、理解の段階全体で3.8秒でした。
3. すべての難易度を1回のパスで生成する
ManiaGAIのmapsetには最大10個の難易度があります。一つずつ順番に生成すれば、時間は難易度の数だけ倍増します。そこで、指定されたすべての難易度をまとめて、1回のバッチGPU処理でプランニングし生成します — 同じ曲と同じ音楽特徴量を共有していて、違うのは目標値だけだからです。上の実行例で、5難易度分のノーツ生成が6.1秒に収まったのはこのためです。
4. ノーツを一つずつ書くのではなく、譜面全体を改良する
ノーツモデルは非自己回帰型です:曲の頭から終わりまでトークンを一つずつ出すのではなく、決まった回数の改良パスで譜面全体を生成します —だから、譜面のノーツ数がいくつになっても、モデルのステップ数は一定です。(なぜモデルがこう動くのかは、それだけで一つの話になります:Planner + Noterの記事をご覧ください。)
5. ゼロからではなく、スナップショットから起動する
生成はサーバーレスのGPUワーカーで実行されます。つまり、リクエストが届いたときにワーカーが常に動いているとは限りません。何もない状態からモデルを読み込んですべてをウォームアップすると、最初のリクエストに何秒も上乗せされてしまいます。そこで、すべてを読み込んでウォームアップした後に取ったメモリスナップショットからワーカーを復元します。これにより、新しいワーカーはモデルの読み込みに時間を費やすことなく、約1秒で準備が整います。
6. ゴール直前で待たせない
以前は最後のステップでも独自の遅延が発生していました。今では、譜面ができた瞬間にダウンロード用の.oszが組み立てられ、生成が終わった瞬間に完成した譜面がマイ譜面に保存されます — ページを離れていてもです。ジェネレーターの進捗表示は、各生成が実際に今どの段階にあるかを示すので、何を待っているのかわからないということはありません。
さらに高速に、譜面はまったく同じまま
2026年10月8日、生成システムの高速な実装をリリースしました:譜面の生成速度は約2倍になり、しかも譜面はまったく同じです —同じ入力なら、同じ出力。この変更では、それを絶対のルールにしました:モデルが書く内容を変えてしまう高速化はモデルの変更であり、モデルの変更として評価されなければなりません。短くなったのは待ち時間だけです。
速さがもたらすもの
速さは、ManiaGAIの使われ方を変えます。二つ目のスタイルや別の難易度の組み合わせを試すのが数秒で済むようになり、プレビューしてからダウンロードする流れが自然になり、無料プランを維持し続けることも可能になります。また、モデル単体ではなく、ブラウザからダウンロードまでのリクエスト全体を最適化しているのもそのためです:プレイヤーが感じるのは待ち時間であって、GPU時間ではありません。