O número de manchete do Kimi K3 é 2,8 trilhões de parâmetros. E é o número menos interessante do relatório.
O interessante é que a arquitetura foi organizada em torno de uma pergunta que nada tem a ver com tamanho: onde o fluxo de informação está travando? A resposta tem três partes — ao longo da sequência, ao longo da profundidade, ao longo da largura — e cada uma ganha seu próprio mecanismo.
Mesmo poder computacional, cerca de 2,5× a eficiência de escala do Kimi K2. Esse número vem das curvas de scaling law ajustadas pela própria equipe, não de uma reprodução independente — leia como uma afirmação deles. Mas os mecanismos por trás são específicos o bastante para serem contestados, e é isso que faz o relatório valer o tempo.
Esta é uma leitura atenta do relatório técnico do Kimi K3 (Moonshot AI), focada na seção de arquitetura. Já escrevemos sobre design de agentes de longo horizonte; este texto fica uma camada abaixo na pilha.
Três direções, não um número
Toda camada de um transformer mistura informação de três maneiras. Entre tokens, para que a posição 900.000 possa afetar a posição 1. Entre profundidades, para que a camada 90 use o que a camada 3 percebeu. Entre canais, para que features se recombinem.
A maior parte do trabalho de escala move as três de uma vez, aumentando tudo. O K3 as separa e dá a cada uma seu próprio mecanismo:
- Sequência — atenção híbrida: três camadas de Kimi Delta Attention para cada camada de Gated MLA.
- Profundidade — Attention Residuals: cada camada presta atenção às saídas de todas as camadas anteriores em vez de herdar um único estado acumulado.
- Largura — Stable LatentMoE: 896 especialistas roteados, 16 acordados por token.
A dimensão oculta não mudou nada. 7.168 no K2, 7.168 no K3. O que quer que tenha crescido, não foi a largura de uma camada.
Sequência: três quartos das camadas pararam de ler tudo
A atenção padrão relê todo o prefixo a cada novo token. Em um milhão de tokens, é essa conta que quebra.
O K3 divide o trabalho. Três camadas KDA mantêm um estado de tamanho fixo — mais perto de tomar notas do que de reler a fonte — seguidas por uma camada Gated MLA que faz atenção global completa. O padrão se repete, com uma camada MLA extra no final para que a última camada sempre veja tudo. Em 93 camadas: 69 KDA, 24 MLA.
O tamanho fixo é o ponto central. O estado não cresce com a sequência, então não estoura. Ele também é com perdas, e é por isso que uma camada de atenção completa aparece a cada quatro camadas para recuperar o que as notas descartaram.
Depois vem um efeito de segunda ordem. Como o estado recorrente carrega um decaimento — tokens recentes ficam naturalmente mais presentes que os antigos — a informação de posição vem de brinde. Por isso o K3 não aplica nenhuma codificação posicional às suas camadas de atenção global. Sem RoPE, nada para reescalar.
Ou seja: estender para um milhão de tokens não exigiu nenhuma cirurgia de codificação posicional. Nenhum dos truques de interpolação que a área acumulou para extensão de contexto se aplica aqui, porque não há codificação a interpolar.
Um limite inferior que apagou um caminho de código na GPU
Esta é nossa parte favorita do relatório, e é pequena o bastante para passar despercebida.
O estado recorrente esquece conforme avança. Calcular isso de forma eficiente em blocos exige dividir pelo decaimento acumulado, e o decaimento acumulado é um produto de números menores que um. Deixe correr e você estará dividindo por algo arbitrariamente próximo de zero.
A geração anterior resolveu isso dividindo cada bloco em tiles de 16 tokens e trabalhando em espaço log. Funcionava, mas os tiles da diagonal ainda precisavam ser avaliados par de posições por par de posições — um caminho lento, tratado como caso especial, incapaz de usar os tensor cores.
A correção do K3 é uma linha de parametrização. Limite o log-decaimento por baixo: cada passo pode esquecer até 0,67% do que carregava, e nada além disso.
Siga o raciocínio. Com esse limite, o log-decaimento acumulado em um tile de 16 tokens fica dentro de (−80, 0). O recíproco é portanto menor que e80 ≈ 5,5 × 1034, confortavelmente dentro da faixa do BF16, de cerca de 3,4 × 1038. Nada transborda. Então os tiles diagonais podem usar a mesma multiplicação densa de matrizes que todos os outros.
O caminho especial não foi otimizado. Ele sumiu.
Leia a causalidade de trás para frente e fica melhor: a faixa dinâmica do hardware determinou o intervalo aceitável, que determinou a constante, que determinou que a ativação precisava ser limitada por baixo. A aritmética escolheu a matemática, e não o contrário.
Profundidade: de corrida de revezamento a grupo de conversa
A noventa e três camadas de profundidade, o fluxo residual padrão é uma corrida de revezamento. A camada 50 recebe um estado acumulado da camada 49. O que as camadas 1 a 48 perceberam individualmente foi somado nesse estado e não é mais separável.
O enquadramento do artigo é que esse é o mesmo gargalo que um RNN tem no tempo — e a área já resolveu aquele, com atenção. Attention Residuals aplicam a mesma correção à profundidade: cada camada carrega uma pseudo-query aprendível e presta atenção às saídas de todas as camadas anteriores, escolhendo o que ler.
Feito ao pé da letra, isso custa computação quadrática na profundidade e, pior, mantém a saída de cada camada viva na memória e no fio sob paralelismo de pipeline. Por isso o K3 usa a variante em blocos: 93 camadas particionadas em grupos de doze, somadas dentro do grupo, atenção completa entre grupos. O custo cai de por camada para por grupo, e o estado em inferência permanece limitado.
Largura: 896 especialistas, 16 acordados
Mixture-of-experts mantém um grande pool e acorda alguns por token. O K2 escolhia 8 de 384. O K3 escolhe 16 de 896 — uma esparsidade de 56.
Crescer o pool até esse ponto quebra duas coisas, e o relatório é incomumente direto sobre ambas.
Comunicação. Em um MoE convencional, todo especialista selecionado recebe o token em largura total, então o tráfego escala com quantos você seleciona. O LatentMoE desacopla os dois: especialistas roteados trabalham em um espaço latente compacto com metade da largura do modelo, enquanto dois especialistas compartilhados em largura total cuidam do que todo token precisa. O pool cresce sem que o custo de rede cresça junto.
Estabilidade. Nessa esparsidade o ramo roteado vira uma cadeia de quase quatro multiplicações de matrizes consecutivas, e as ativações explodem. Duas correções: um RMSNorm entre a agregação dos especialistas e a projeção de subida, e uma nova ativação, SiTU-GLU, que limita ambos os fatores de um SwiGLU com uma tanh escalada para que nenhum dispare em baixa precisão.
Balanceamento. A terceira correção é a que vale roubar. Manter cerca de 900 especialistas com carga uniforme significa ajustar um viés por especialista a cada passo. O método padrão empurra cada viés por um incremento fixo na direção do erro, o que ou oscila ou fica para trás. O K3 resolve diretamente: rode top-(k+1) em vez de top-k, e a entrada extra é o escore que um token exige para admissão. Com esses cortes em mãos, a carga que um especialista recebe sob um viés candidato é monótona, então o viés que atinge a carga alvo é simplesmente um quantil das margens. Uma passagem para frente, sem tamanho de passo para calibrar.
Em escala real, esse quantil abrange milhões de valores espalhados por todos os ranks, então eles o estimam por histograma: cada rank conta seus bins, um all-reduce soma tudo, e o quantil é lido das contagens agregadas. Contagens somam, então a estimativa reflete o lote inteiro independentemente de como os tokens foram divididos, ao custo de algumas centenas de bins por especialista.
A conta chega na camada de serving
Nada disso é de graça, e a parte honesta do relatório é a seção de infraestrutura, onde o custo aterrissa.
Um estado recorrente de tamanho fixo é barato de armazenar e barato de mover, mas atualiza serialmente e não soma de forma simples. As duas propriedades geram trabalho:
- Dividir uma sequência entre dispositivos. A atenção linear comum permite que cada dispositivo compute seu estado local a partir do zero e some. O KDA aplica uma transição dependente do token ao estado de entrada, então somar dá errado. A correção decompõe cada segmento em uma transição acumulada e um estado iniciado do zero — duas grandezas que de fato compõem — e recupera o estado de entrada de cada dispositivo com um prefix scan e um all-gather de tamanho fixo.
- Reaproveitar um prefixo entre requisições. Metade dos caches são páginas por token, metade é um estado fixo por requisição, e um acerto exige que ambos sejam restauráveis na mesma fronteira. A resposta deles é desacoplar as granularidades: hash a cada 512 tokens, alocação em blocos de 1024 a 6144, e checkpoint do estado recorrente apenas em um subconjunto esparso dos pontos de hash.
- Decodificação especulativa. O estado é atualizado no lugar, então um rascunho rejeitado não pode ser desfeito. Eles armazenam em cache as entradas projetadas — bem menores que o próprio estado — e reconstroem no chip.
O padrão nos três casos é o mesmo do limite de decaimento, rodando na direção oposta: a arquitetura escolheu uma representação, e a representação ditou o trabalho de sistemas.
Um hábito que o artigo abandona discretamente
O K3 é nativamente multimodal, e seu encoder de visão é treinado do zero com predição do próximo token. Sem inicialização SigLIP, sem pré-treino contrastivo — que é a receita padrão, inclusive no modelo anterior da própria equipe.
A razão declarada não é qualidade. É estabilidade: o encoder inicializado de forma contrastiva apresentou normas de gradiente persistentemente mais altas, com picos frequentes, sob otimização conjunta, enquanto o treinado do zero se manteve estável. As avaliações de visão empataram.
O empate torna o achado mais afiado do que uma vitória. Se o treino do zero fosse melhor, você o chamaria de receita melhor. Ele empatou — então a afirmação é que, nessa escala, um passo que a área trata como obrigatório é apenas opcional.
O que isso significa se você roda agentes sobre esses modelos
Construímos um cliente desktop multiagente, então o que observamos é se uma execução de longo horizonte continua viável, não quem lidera um ranking.
O número que importa não é o tamanho da janela de contexto; é quanto custa servir um milhão de tokens. Três quartos das camadas carregam um estado de tamanho fixo, então o cache que cresce com a conversa é um quarto do que seria em um modelo de atenção plena com a mesma profundidade. No BrowseComp o relatório coloca o K3 em 91,2% a cerca de US$ 2 por tarefa — aproximadamente metade do custo do resultado proprietário mais próximo e uma ordem de grandeza abaixo dos modelos Claude em esforço máximo.
Para um agente que dispara centenas de chamadas de ferramenta, essa razão decide se a tarefa vale a tentativa. Trabalho de arquitetura que antes parecia pesquisa pura agora aparece diretamente em se uma execução longa é economicamente sensata.
O que levamos disso
Duas coisas, ambas transferíveis.
Primeiro, o enquadramento. Onde o fluxo de informação está travando? produz um trabalho diferente de quanto maior conseguimos ficar? — e ele se decompõe, o que explica por que três mecanismos puderam ser desenvolvidos e medidos separadamente.
Segundo, o limite de decaimento. Uma restrição que quase não custa expressividade removeu um caminho inteiro de caso especial do kernel. Não um caminho mais rápido — nenhum caminho. Essa troca está disponível muito mais vezes do que é aproveitada, e só é visível para quem segura a matemática e o hardware ao mesmo tempo.
O relatório e os pesos estão abertos no GitHub. A seção de arquitetura tem oito páginas e recompensa uma leitura cuidadosa.
