A NVIDIA integrou o Muon (MomentUm Orthogonalized by Newton-Schulz) e outros otimizadores de segunda ordem como MOP e REKLS no Megatron Core e no NeMo Megatron Bridge. Resultado: treino do Kimi K2 e Qwen3 30B em GB300 NVL72 com perda mínima de throughput contra o AdamW. A receita junta otimizador distribuído layer-wise e três modos de Newton-Schulz distribuído pra lidar com tensor parallelism.
A NVIDIA publicou um deep dive sobre como o Megatron Core agora suporta o Muon (MomentUm Orthogonalized by Newton-Schulz) e outros otimizadores de ordem superior. Muon já foi usado pra treinar modelos open source de peso, incluindo Kimi K2 e GLM-5, e a promessa é acelerar a convergência sem estourar custo computacional.
Treino medido com NeMo Megatron Bridge 26.02. Kimi K2 em 256 GPUs NVIDIA GB300 com paralelismo PP4DP64EP64. Qwen3 30B-A3B em 8 GPUs GB300 com DP8EP8. Throughput em MXFP8:
Ou seja, Muon empata ou passa o AdamW em MFU (Model FLOPs Utilization) quando você conta os FLOPs das multiplicações de matriz nas iterações de Newton-Schulz. Na prática, o custo extra do otimizador some no ruído, o que é a barreira principal pra adoção em produção.
O passo de preconditioning (via iteração Newton-Schulz ou decomposição de autovalores) aumenta custo de compute e memória. Soma isso a instabilidade numérica em treino mixed precision e ao gargalo de comunicação pra sincronizar updates ortogonalizados em milhares de GPUs, e você entende por que até hoje o AdamW dominava.
A NVIDIA ataca dois problemas:
Otimizador distribuído tradicional (element-wise, que funciona bem com AdamW) fatia os estados do otimizador byte a byte entre GPUs. Isso quebra com Muon: ele precisa do gradiente da camada INTEIRA pra calcular o update dos pesos daquela camada. Se peso e estado estão picadinhos entre DP ranks, cada GPU não tem dado suficiente pra calcular nada sozinha.
Solução: distribuir por camada. Cada GPU recebe camadas inteiras, permitindo calcular o preconditioner localmente. O preço é comunicação de tamanho variável (camadas têm tamanhos diferentes), resolvida com all_gatherv. Implementação tá em layer_wise_optimizer.py no Megatron Core.
Quando você usa tensor parallelism (TP), a matriz de pesos fica fatiada entre GPUs, e o passo de ortogonalização do Muon precisa da matriz de momentum inteira. Três estratégias no TensorParallelMuon:
A escolha depende do gargalo: se rede tá apertada, duplicated; se compute satura, distributed; se você topa aproximação por economia, blockwise.
A NVIDIA lista otimizações em andamento no projeto Emerging Optimizers:
Além do Muon, o repo NVIDIA-NeMo/Emerging-Optimizers tem:
O repo NVIDIA-NeMo/Megatron-Bridge tem as performance recipes. Pra rodar Kimi em 256 GB300, o exemplo é direto:
CONTAINER="nvcr.io/nvidia/nemo:26.04"
python scripts/performance/setup_experiment.py \
-m kimi -mr kimi_k2 \
--num_gpus 256 --gpus_per_node 4 \
-g gb300 -c fp8_mx
Pra Muon, o flag use_distributed_optimizer despacha automaticamente pro wrapper layer-wise em vez do element-wise.
Pra quem treina modelo próprio em escala, vale olhar: Muon entregando paridade com AdamW em MFU abre espaço pra ganho de convergência de graça. O teto é quem tem GB300 na mão, mas o código roda em qualquer GPU com suporte a MXFP8 ou precisão menor.
☕ gostou dessa?
Matérias favoritadas ficam no seu /favoritos e, se você tem o cafecomtech instalado, disponíveis offline — no metrô, no avião, na fila do café.
☕ comentários · 0