Engenharia
Como deixamos a geração de beatmaps com IA rápida o bastante para ser interativa
Um mapset completo de osu! mania em cerca de 20 segundos de GPU, e não um minuto ou mais: para onde vai o tempo de uma requisição do ManiaGAI e o que o eliminou.
Um gerador que te faz esperar minutos é um processamento em lote. Você envia uma música, vai fazer outra coisa e volta para ver o que saiu — e, se não gostar, testar outro estilo ou outro conjunto de dificuldades custa mais uma espera. Um gerador que responde em segundos é uma ferramenta: você testa, ouve, ajusta e testa de novo.
É por causa dessa diferença que, na versão 2 do ManiaGAI, tratamos a latência como uma restrição de design no sistema inteiro, e não como algo a otimizar no final. A versão 1 levava um minuto ou mais por mapset. A versão 2 leva cerca de 20 segundos de GPU para um mapset completo de uma música típica — normalmente de 13 a 25 segundos, dependendo da música e das dificuldades pedidas. Veja para onde vai esse tempo e as decisões que eliminaram o resto.
Anatomia de uma requisição
- Seu navegador
- Timing ∥ features musicais
- Planner
- Noter
- Validação
- Download
Uma execução real em produção, medida no lançamento da v2: uma música de 2:50, 5 dificuldades, em uma GPU NVIDIA T4 — 12,7 segundos no total.
| Etapa | Tempo |
|---|---|
| Timing + features musicais (em paralelo) | 3,8 s |
| Planejamento (todas as dificuldades) | 1,0 s |
| Geração de notas (todas as 5 dificuldades) | 6,1 s |
| Execução inteira | 12,7 s |
Tempo de computação na GPU para uma música no sistema de lançamento da v2 (1º de outubro de 2026), sem contar upload, fila ou download.
1. Fazer o trabalho com o áudio antes de alguém clicar em Criar
Toda música enviada precisa ser decodificada, ter o volume normalizado e ser recodificada em um formato único e consistente antes que os modelos possam usá-la. Em um servidor, isso são alguns segundos de trabalho pelos quais a GPU teria que esperar. No ManiaGAI, isso acontece no seu navegador, assim que você escolhe o arquivo — enquanto você ainda está escolhendo o número de teclas e as dificuldades. Quando você clica em Criar, o trabalho normalmente já está feito. Se preparar a música em um dispositivo lento levar mais de 20 segundos, o servidor assume no lugar, então essa otimização nunca atrasa ninguém.
2. Rodar o timing e a compreensão musical lado a lado
Duas coisas precisam ser conhecidas sobre a música antes de o planejamento começar: a grade de timing (do modelo de código aberto Beat This mais o nosso próprio ajuste de grade) e as features musicais (do modelo musical MERT). Uma não depende da outra, então uma não espera pela outra: a GPU roda o Beat This e o MERT enquanto o ajuste de grade roda na CPU ao mesmo tempo. Na execução acima, a etapa de compreensão inteira levou 3,8 segundos.
3. Gerar todas as dificuldades de uma vez
Um mapset do ManiaGAI tem até dez dificuldades. Gerá-las uma depois da outra multiplicaria o tempo pelo número de dificuldades. Em vez disso, todas as dificuldades pedidas são planejadas e geradas juntas, em uma única passada em lote na GPU — elas compartilham a mesma música e as mesmas features musicais, e só os alvos mudam. É assim que a geração de notas de cinco dificuldades coube em 6,1 segundos na execução acima.
4. Refinar o chart inteiro em vez de escrevê-lo nota por nota
O modelo de notas é não autorregressivo: ele produz o chart inteiro em um número fixo de passadas de refinamento, em vez de um token por vez, do início ao fim da música — então o número de passos do modelo é fixo, não importa quantas notas o chart acabe tendo. (Por que o modelo funciona assim é outra história: o artigo sobre o Planner + Noter.)
5. Começar de um snapshot, não do zero
A geração roda em workers de GPU serverless, o que significa que nem sempre há um worker rodando quando chega uma requisição. Carregar os modelos e aquecer tudo do zero acrescentaria muitos segundos a essa primeira requisição. Em vez disso, os workers são restaurados a partir de um snapshot de memória feito depois de tudo estar carregado e aquecido, então um worker novo fica pronto em cerca de um segundo, em vez de passar esse tempo carregando modelos.
6. Não esperar na linha de chegada
As últimas etapas costumavam acrescentar o seu próprio atraso. Agora o .osz para download é montado no momento em que os charts ficam prontos, e um mapa pronto é salvo em Meus charts no instante em que a geração termina — mesmo que você tenha saído da página. O progresso no gerador mostra a etapa real em que cada geração está, então uma espera nunca é um mistério.
Mais rápido de novo, com charts idênticos
Em 8 de outubro de 2026, lançamos uma implementação mais rápida do sistema de geração: os mapas agora são gerados cerca de duas vezes mais rápido, e os charts são exatamente os mesmos — mesma entrada, mesma saída. Fizemos disso uma regra rígida para essa mudança: um ganho de velocidade que altera o que o modelo escreve é uma mudança de modelo, e precisa ser avaliado como tal. Só a espera ficou mais curta.
O que a velocidade traz
A velocidade muda o jeito como o ManiaGAI é usado. Ela faz com que testar um segundo estilo ou outro conjunto de dificuldades seja questão de segundos, torna natural um fluxo de prévia e depois download e torna possível manter um plano grátis funcionando. É também por isso que otimizamos a requisição inteira — do navegador ao download — e não só o modelo: os jogadores sentem a espera, não o tempo de GPU.
Para ver onde essas etapas ficam no sistema, veja a página de Tecnologia; para saber o que mudou e quando, o changelog.