Escalando a Inferência do Kimi com Decodificação Especulativa DSpark no vLLM

Escalando a Inferência do Kimi com Decodificação Especulativa DSpark no vLLM

O DSpark é um método de decodificação especulativa publicado pela Novita. Treinamos e disponibilizamos especuladores DSpark orientados à produção para o Kimi-K2.6 e Kimi-K2.7-Code, os integramos ao vLLM e avaliamos como sua abordagem de rascunho em bloco paralelo escala à medida que a janela especulativa cresce.

Os checkpoints são projetados para tornar a inferência do Kimi mais rápida sem alterar o modelo alvo. Um modelo de rascunho leve propõe um bloco de tokens candidatos, e o modelo Kimi completo verifica esses candidatos antes que sejam aceitos.

Em nossas avaliações noturnas do vLLM com tamanho de lote 1, o DSpark com num_speculative_tokens=7 alcançou um ganho médio de taxa de transferência de 2,55x para o Kimi-K2.6 e 2,36x para o Kimi-K2.7-Code. À medida que a janela especulativa aumentava de n=3 para n=7, o DSpark converteu os tokens de rascunho adicionais em taxa de transferência de forma mais consistente do que as baselines Eagle3-MLA disponíveis.

Os checkpoints disponibilizados são:

Resultados do benchmark DSpark para Kimi-K2.6 e Kimi-K2.7-Code

Com tamanho de lote 1, aumentar num_speculative_tokens de 3 para 7 elevou o ganho médio do DSpark de 2,17x para 2,55x no Kimi-K2.6 e de 2,12x para 2,36x no Kimi-K2.7-Code. As baselines Eagle3-MLA listadas permaneceram quase planas em média.

Ganho médio de taxa de transferência para DSpark e Eagle3-MLA em n=3 e n=7 no Kimi-K2.6 e Kimi-K2.7-Code

Modelo alvo Modelo de rascunho Ganho médio n=3 Ganho médio n=7 Mudança em relação a n=3
Kimi-K2.6 DSpark 2,17x 2,55x +17,8%
Kimi-K2.6 Eagle3-MLA 2,01x 2,01x +0,2%
Kimi-K2.7-Code DSpark 2,12x 2,36x +11,7%
Kimi-K2.7-Code Eagle3-MLA 2,04x 2,05x +0,3%

Esses valores são médias simples e não ponderadas dos ganhos em nível de benchmark em GSM8K, MATH500, AIME, HumanEval, LiveCodeBench e SPEED-Bench Coding; eles não são ponderados pela contagem de prompts. Uma janela de rascunho maior não melhora automaticamente a taxa de transferência: as propostas adicionais devem ser aceitas com frequência suficiente para compensar a sobrecarga de rascunho e verificação.

O LiveCodeBench torna a diferença concreta. Para o Kimi-K2.6, o DSpark passou de 1,86x em n=3 para 1,87x em n=7, enquanto o Eagle3-MLA caiu de 1,67x para 1,48x. Para o Kimi-K2.7-Code, o DSpark aumentou de 1,75x para 1,78x, enquanto o Eagle3-MLA caiu de 1,69x para 1,52x. No SPEED-Bench Coding, o DSpark aumentou de 2,19x para 2,41x no Kimi-K2.6 e de 2,15x para 2,31x no Kimi-K2.7-Code.

Configuração de avaliação: tamanho de lote 1, decodificação especulativa online no vLLM nightly, decodificação gulosa, TP=8, max_model_len=20000, gráficos CUDA ativados e fuse_allreduce_rms=false. Maior tokens/s e ganho são melhores. O tamanho de lote 1 isola o comportamento de decodificação de requisição única; os resultados podem diferir sob agrupamento contínuo ou cargas de trabalho de produção com maior concorrência. Resultados completos estão disponíveis nas páginas do Hugging Face para Kimi-K2.6 DSpark e Kimi-K2.7-Code DSpark.

Por que o DSpark melhora a decodificação especulativa do Kimi

Nossos checkpoints aplicam o DSpark ao Kimi-K2.6 e Kimi-K2.7-Code como modelos de rascunho para inferência via vLLM.

Em relação ao backbone de rascunho paralelo DFlash, o DSpark adiciona duas cabeças leves: uma cabeça de viés de logits Markov para dependência intra-bloco de baixo rank, e uma cabeça de confiança por posição para previsão de aceitação. O DSpark propõe o bloco de rascunho completo em paralelo e, em seguida, usa essas cabeças para melhorar a qualidade do rascunho em nível de bloco e estimar quais posições o verificador provavelmente aceitará.

Treinamos os modelos de rascunho com um fork personalizado do framework Speculators do vLLM. Durante o treinamento, o rascunho consome estados ocultos transmitidos de um verificador Kimi em execução no vLLM, alinhando o especulador com o comportamento do verificador que encontrará no momento da inferência.

Nossas tabelas publicadas usam os checkpoints Eagle3-MLA de código aberto disponíveis como baselines de modelo de rascunho sob a mesma configuração de verificador e inferência. O resultado central é como os métodos escalam com uma janela especulativa maior: de n=3 para n=7, o ganho médio do DSpark aumentou 17,8% para o Kimi-K2.6 e 11,7% para o Kimi-K2.7-Code, enquanto as baselines Eagle3-MLA listadas permaneceram quase planas em média e desaceleraram em ambas as avaliações do LiveCodeBench. Isso sugere que o DSpark preserva a qualidade útil do rascunho de forma mais eficaz à medida que a janela cresce. A comparação é específica para os checkpoints, carga de trabalho de tamanho de lote 1 e configuração de inferência testados aqui.

Como servir o Kimi-K2.7-Code com DSpark no vLLM

O suporte ao DSpark atualmente requer uma versão nightly do vLLM. Para o Kimi-K2.7-Code, use a seguinte configuração de decodificação especulativa:

uv pip install vllm --extra-index-url https://wheels.vllm.ai/nightly

vllm serve moonshotai/Kimi-K2.7-Code \
  --tensor-parallel-size 8 \
  --max-model-len 20000 \
  --trust-remote-code \
  --compilation-config='{"pass_config": {"fuse_allreduce_rms": false}}' \
  --speculative-config '{
    "model": "novita/kimi-k2.7-code-dspark",
    "num_speculative_tokens": 7,
    "method": "dspark"
  }'

Para o Kimi-K2.6, use a mesma configuração e aponte speculative_config.model para novita/kimi-k2.6-dspark.

Ressalvas conhecidas da versão nightly: O agendamento AOT do FA3 no lado do rascunho pode exigir a passagem de fast_build=True ao construir os metadados de atenção do rascunho, e a captura do gráfico CUDA pode encontrar um erro de tamanho de workspace de all-reduce do FlashInfer. A configuração testada desabilita o fuse_allreduce_rms; consulte as páginas vinculadas do Hugging Face para as soluções alternativas atuais.

O DSpark altera o caminho de decodificação sem modificar o modelo Kimi alvo. Recomendamos começar com num_speculative_tokens=7 e, em seguida, validar a taxa de transferência, o comprimento aceito, a latência entre tokens e a latência ponta a ponta em relação ao tráfego de produção representativo. A melhor configuração dependerá da forma da carga de trabalho, do agrupamento e do hardware de inferência.