HuggingFace镜像/OmniCoder-2-9B
模型介绍文件和版本分析
下载使用量0
OmniCoder 2

OmniCoder-2-9B

OmniCoder 第二代模型。推理速度更快,重复现象大幅减少,训练流水线全新重构。

License Base Model Previous


v2 版本新特性

OmniCoder-2-9B 是 OmniCoder-9B 的彻底重构版本,而非简单续作。我们重新设计了整个训练流水线,以解决用户反馈的第一代模型核心问题:

  • 告别重复循环。 第一代模型训练时使用了全部 tokens(包括系统提示词、工具输出、模板等),这导致模型学会了生成重复性的模板内容。第二代模型仅针对助手 tokens 进行训练。由于模型不再学习模仿模板,因此在长对话多轮交互中能保持连贯性。
  • 推理更快、更聚焦。 第一代模型的 </think> 块常常内容冗余、逻辑循环。第二代模型生成的推理链更加精炼,能更快切入核心,因为它只学习了实际的推理过程,而非周围的框架性内容。
  • 在智能体循环中表现更稳定。 第一代模型有时会陷入重复性的工具调用循环。第二代模型能更清晰地处理多步骤智能体任务。它知道何时停止、何时切换工具、何时给出最终答案。
  • 全新重构的训练流水线。 从全 token 余弦调度训练切换为仅针对助手 tokens 的恒定学习率训练(基于 Schulman 的 "LoRA Without Regret" 理论)。模型收敛速度更快,且不会因学习率过早衰减而影响学习效果——这正是第一代模型学习效率低下的原因。

总结: OmniCoder-2-9B 解决了第一代模型存在的重复和不稳定问题。模型权重和架构不变,但训练方法截然不同。


基准测试

基准测试OmniCoder-2-9BOmniCoder-9BQwen3.5-9BGPT-OSS-120BGLM 4.7Claude Haiku 4.5
AIME 2025(pass@5)909091.6
GPQA Diamond(pass@1)8383.881.771.573
GPQA Diamond(pass@3)8686.4
Terminal-Bench 2.025.823.614.633.427

核心结果

  • GPQA Diamond pass@1:83%(164/198)。与OmniCoder-9B(83.8%)和Qwen3.5-9B基础版(81.7%)水平相当。Pass@3提升至86%。
  • Terminal-Bench 2.0:25.8%(23/89)。相较于OmniCoder-9B(23.6%)提升2.2个百分点,较Qwen3.5-9B基础版(14.6%)提升76%。
  • AIME 2025 pass@5:90%(27/30)。与OmniCoder-9B持平。

快速开始

Transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Tesslate/OmniCoder-2-9B"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")

messages = [
    {"role": "system", "content": "You are a helpful coding assistant."},
    {"role": "user", "content": "Write a Python function to find the longest common subsequence of two strings."},
]

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer([text], return_tensors="pt").to(model.device)

outputs = model.generate(**inputs, max_new_tokens=2048, temperature=0.6, top_p=0.95, top_k=20)
print(tokenizer.decode(outputs[0][inputs.input_ids.shape[-1]:], skip_special_tokens=True))

vLLM

vllm serve Tesslate/OmniCoder-2-9B --tensor-parallel-size 1 --max-model-len 65536
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="token")
response = client.chat.completions.create(
    model="Tesslate/OmniCoder-2-9B",
    messages=[{"role": "user", "content": "Explain the difference between a mutex and a semaphore."}],
    temperature=0.6,
)
print(response.choices[0].message.content)

llama.cpp(GGUF)

llama-cli --hf-repo Tesslate/OmniCoder-2-9B-GGUF --hf-file omnicoder-2-9b-q4_k_m.gguf -p "Your prompt" -c 8192

训练详情

v1 与 v2 流水线对比

OmniCoder-9B (v1)OmniCoder-2-9B (v2)
计算损失的对象所有 tokens(系统、用户、工具、助手)仅助手 tokens
学习率调度余弦调度(衰减至零过早)带预热的恒定学习率
EOS 训练方式全局按轮次 (train_on_eos: turn)
思考块被标准模板剥离在所有轮次中保留(自定义 Jinja2)
重复问题生成中频繁出现循环几乎为零
收敛情况学习率在第 60 步终止了学习在第 80-100 步平稳收敛

训练配置

基础模型Qwen3.5-9B
方法LoRA SFT(r=64,alpha=32,包含所有层及 MLP)
数据集来自 5 个来源的 425K 智能体轨迹
损失仅助手 tokens(roles_to_train: [assistant])
序列长度65,536 tokens(样本打包)
学习率调度带预热的恒定学习率(2e-4,10 步预热)
硬件4x NVIDIA H200(DDP)
框架Axolotl
精度bf16
优化器AdamW(权重衰减=0.001)
有效批次大小32
步数350(约为一个 epoch 的 10%)

训练数据来源

来源样本数描述
NVIDIA Nemotron-Terminal-Corpus226K终端智能体轨迹
CoderForge-Preview(奖励 >= 0.5)155KSWE-bench 风格的编码轨迹
Nemotron Skill-Based24K基于技能的编码任务
Scale-SWE20K真实 GitHub 问题补丁(合成轨迹)
Opus Reasoning2.3K思维链推理

为何采用恒定学习率?(Schulman《LoRA Without Regret》)

v1 在 80 步内采用余弦学习率调度。学习率在第 60 步衰减至零,在模型收敛前终止了学习。损失看似稳定在 0.45,但实际上仍在下降。

v2 遵循 Schulman 等人的研究发现:

  • 恒定学习率:无衰减,避免过早收敛终止。
  • LoRA 学习率约为全参数微调的 10 倍:我们的 2e-4 对 9B 级模型是合适的。
  • 在所有层(包括 MLP)上应用 LoRA:仅在注意力层应用 LoRA 的性能显著不足。
  • 批次大小 32:LoRA 对大批次的容忍度较低;32 是最佳平衡点。

架构

OmniCoder-2 继承了 Qwen3.5-9B 的混合架构:

  • 门控 Delta 网络:线性注意力层与标准注意力交错,以高效处理长距离依赖关系。
  • VLM 骨干网络:基于 Qwen3_5ForConditionalGeneration 构建。
  • 262K 原生上下文:完整的 262,144 token 上下文窗口。

推荐采样参数

参数值
Temperature0.6
Top-P0.95
Top-K20
Presence Penalty0.0

对于智能体/工具调用任务,可考虑降低 temperature(0.2-0.4)以获得更具确定性的行为。


局限性

  • 尚未对非英语任务的性能进行广泛评估
  • 工具调用格式具有灵活性,但在训练中所见的框架模式下效果最佳

致谢

特别感谢 Axolotl 团队以及 axolotl#3453 中的讨论,他们帮助实现了 Qwen3.5 的打包支持。


引用

@misc{omnicoder2_2025,
  title={OmniCoder-2-9B: A Frontier Open Coding Agent},
  author={Tesslate},
  year={2025},
  url={https://huggingface.co/Tesslate/OmniCoder-2-9B}
}

由 Tesslate 打造