Nous Research lança NousCoder modelo competitivo de programação olímpica pós treinado em Qwen por reforço e com alto desempenho em LiveCodeBench
1 semana ago · Updated 1 semana ago

- Ouça este artigo
- Nous Research lança NousCoder-14B post‑treinado por RL e libera pesos
- Resultado principal e significado de Pass@1
- Dados de treino e infraestrutura
- Como funcionou o treino por reforço (visão geral)
- Ambiente de verificação e pipeline
- Objetivos de otimização: GRPO, DAPO, GSPO e GSPO
- Resultados por objetivo e janela de contexto
- Estratégia contra programas longos (overlong filtering)
- Conclusão
- Perguntas frequentes
Ouça este artigo
Você vai ler sobre como o NousCoder foi criado ao pós-treinar o modelo base Qwen com aprendizado por reforço e recompensas verificáveis para resolver problemas de programação competitiva. O artigo descreve execução segura de código com Modal dentro do ambiente Atropos, os objetivos de treino GRPO, DAPO, GSPO e GSPO, e por que a extensão iterativa de contexto combinada com filtragem de programas muito longos (overlong filtering) fez a diferença. Também mostra como o pipeline que separa inferência e verificação aumentou a taxa de acertos do primeiro programa gerado e os principais aprendizados do trabalho.
- NousCoder melhora acertos em programação competitiva via pós‑treino por RL com recompensas verificáveis
- Treinado em 24.000 problemas verificáveis; pesos liberados sob licença Apache‑2.0
- Execução segura em sandbox com Modal e verificação com Atropos
- Usa GRPO com variações DAPO, GSPO e GSPO (diferenças modestas)
- Extensão iterativa de contexto e filtro para programas muito longos que evita viés por soluções curtas
Nous Research lança NousCoder-14B post‑treinado por RL e libera pesos
Você precisa saber: a Nous Research publicou o modelo NousCoder-14B, pós‑treinado sobre Qwen3-14B usando aprendizagem por reforço com recompensas verificáveis. No benchmark de programação competitiva LiveCodeBench v6, o modelo alcançou Pass@1 de 67,87%, superando em 7,08 pontos percentuais o ponto de partida Qwen3-14B (60,79%). O treino usou 24.000 problemas verificáveis em 48 GPUs Nvidia B200 por 4 dias. Os pesos foram disponibilizados no Hugging Face sob licença Apache‑2.0.
Resultado principal e significado de Pass@1
- Benchmark: LiveCodeBench v6
- Tamanho do teste: 454 problemas
- Métrica principal: Pass@1 — fração de problemas em que a primeira solução gerada passa todos os testes ocultos (inclui limites de tempo e memória)
- Desempenho: 67,87% para NousCoder-14B vs 60,79% para Qwen3-14B
O benchmark exige soluções que respeitem limites rígidos de tempo e memória e um grande conjunto de testes ocultos.
Dados de treino e infraestrutura
Fontes de dados:
- TACO Verified
- PrimeIntellect SYNTHETIC‑1
- LiveCodeBench (criado antes de 31/07/2024)
Recursos e tempo de treino:
- 24.000 problemas verificáveis
- 48 GPUs Nvidia B200 por 4 dias
- Pesos publicados sob Apache‑2.0 no Hugging Face
Como funcionou o treino por reforço (visão geral)
A equipe usou execução real de código como sinal de recompensa:
- Cada geração produz código Python.
- O código é executado e verificado contra casos de teste.
- Recompensas: 1 se todos os testes passarem; -1 se o código falhar, exceder 15 segundos de execução ou ultrapassar 4 GB de RAM.
- Verificação feita em sandboxes autoscalados para segurança e isolamento.
Ambiente de verificação e pipeline
- Ambiente RL implementado com Atropos.
- Para rodar código não confiável em escala, usaram sandboxes autoscalados e containers isolados para reduzir latência e risco.
- Pipeline:
- Worker de inferência gera código e envia ao verificador Modal.
- O worker inicia nova geração sem esperar pela verificação, mantendo o loop limitado pela inferência, não pela verificação.
Avaliaram três formas de paralelizar verificação (container por problema, por rollout e por caso de teste). Optaram por containers que rodem vários testes e priorizem casos mais difíceis, permitindo interrupção precoce quando um teste falha.
Objetivos de otimização: GRPO, DAPO, GSPO e GSPO
A otimização usou Group Relative Policy Optimization (GRPO), que dispensa um modelo de valor separado. Variantes testadas:
- DAPO (Dynamic sAmpling Policy Optimization): aplica importância e clipping ao nível de token, com correções de amostragem.
- GSPO (Group Sequence Policy Optimization): aplica ponderação de importância ao nível da sequência (programa inteiro).
- GSPO: correção por sequência e reescalonamento de gradientes para equalizar o peso dos tokens, independentemente do comprimento.
Para contexto sobre algoritmos e práticas de otimização em agentes treinados por reforço, a equipe se apoiou em técnicas comuns ao treinamento de agentes com RL. Todas usam a mesma definição de vantagem: recompensa do rollout normalizada pela média e desvio dentro do grupo.
Resultados por objetivo e janela de contexto
Treino seguiu cronograma de extensão de contexto: inicial 32k tokens → continuação 40k tokens (máximo do Qwen3-14B no treino); avaliação com extensão via YaRN até 81.920 tokens — aproveitando técnicas recentes para lidar com contexto extremamente longo.
| Objetivo | Contexto (tokens) | Pass@1 |
|---|---|---|
| DAPO | 81.920 | 67,87% |
| GSPO | 81.920 | 66,26% |
| GSPO | 81.920 | 66,52% |
| Todos | 40.960 | ≈ 63% |
Diferenças entre objetivos são moderadas; DAPO tem vantagem leve em janelas muito longas.
Estratégia contra programas longos (overlong filtering)
Para evitar viés por comprimento:
- Se uma geração excede a janela máxima de contexto, a vantagem daquele rollout é zerada.
- Isso remove o rollout do sinal de gradiente em vez de penaliz‑á‑lo.
- Segundo o relatório, a técnica evita forçar o modelo a produzir soluções mais curtas por otimização e preserva qualidade quando o contexto é estendido na avaliação.
A concepção das recompensas e a escolha de não punir diretamente gerações overlong se alinha a práticas de desenho de sinal encontradas em métodos que usam preferências e modelos de recompensa para guiar agentes (aprendizado por preferência).
Conclusão
O NousCoder-14B mostrou ganho prático na programação competitiva: pós‑treinado por RL com recompensas verificáveis, alcançou 67,87% Pass@1 — cerca de 7,08 pontos sobre o ponto de partida. Dois pilares se destacaram: execução segura e isolada do código (Modal Atropos) permitindo usar resultados reais como sinal de treino; e o pipeline que separa inferência e verificação, acelerando o loop e aumentando acertos no primeiro programa gerado.
No nível algorítmico, GRPO e suas variantes (DAPO, GSPO, GSPO) apresentaram diferenças modestas, com DAPO ligeiramente à frente em contextos muito longos. A combinação de extensão iterativa de contexto e overlong filtering evitou viés por soluções curtas sem reduzir qualidade em avaliações estendidas.
Resumo prático: treinaram em 24.000 problemas verificáveis, com 48 GPUs B200 por 4 dias, e liberaram os pesos sob Apache‑2.0. É um avanço promissor para soluções confiáveis e escaláveis em código gerado por IA.
Para acompanhar desdobramentos, veja mais artigos em https://blog.aidirectory.com.br.
Perguntas frequentes
- O que é o NousCoder-14B e qual foi seu desempenho no LiveCodeBench v6?
NousCoder-14B é um modelo de programação competitiva pós‑treinado em Qwen3-14B com RL e recompensas verificáveis. No LiveCodeBench v6 alcançou Pass@1 = 67,87%, 7,08 pontos sobre Qwen3-14B (60,79%). Treinado em 24k problemas, 48 GPUs B200 por 4 dias. Pesos liberados sob Apache‑2.0.
- O que significa Pass@1 neste contexto?
Pass@1 é a fração de problemas em que o primeiro programa gerado passa todos os testes ocultos, incluindo restrições de tempo (15s) e memória (4GB). É uma medida rígida e prática para programação competitiva.
- De onde vieram os dados de treino e como foi feita a verificação?
Dados: TACO Verified, PrimeIntellect SYNTHETIC‑1 e LiveCodeBench (antes de 31/07/2024). Conjunto de treino: 24k problemas; teste: 454 problemas. Verificação usa Atropos e containers Modal por rollout; cada container executa vários testes e falha rápido ao detectar erro.
- O que são DAPO, GSPO e GSPO e como se comparam?
Todos são variantes sobre GRPO (sem modelo de valor separado). DAPO aplica correções ao nível de token; GSPO ao nível de sequência; GSPO reescalona gradientes para equalizar peso de tokens. Em 81.920 tokens: DAPO 67,87%, GSPO 66,26%, GSPO 66,52%; em 40.960 tokens todos ≈63%.
- Como lidam com contexto longo e programas que excedem o limite (overlong)?
Treinaram com janela iterativa (32k → 40k) e avaliaram até 81.920 tokens com YaRN. Se um programa excede o limite, sua vantagem é zerada, removendo o rollout do sinal de gradiente em vez de puni‑lo — o que evita viés por soluções curtas e mantém qualidade ao escalar contexto.
Se você quiser conhecer outros artigos semelhantes a Nous Research lança NousCoder modelo competitivo de programação olímpica pós treinado em Qwen por reforço e com alto desempenho em LiveCodeBench, você pode visitar a categoria Notícias e Tendências.
