CoolFace
Modelpublic

zhubolin/olmo2-0.837b-zh-en-dpo

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
1likes211downloads
Model Card

olmo2-0.837b-zh-en-dpo

从零训练的 0.837B 中英双语对话模型(DPO 对齐版)。纯个人学习项目,完整走完 「语料 → Tokenization → 预训练 → SFT → DPO → 评测」全流程。

![License](https://www.apache.org/licenses/LICENSE-2.0) ![Parameters]() ![Context]() ![Base]()

模型信息

项目值
架构OLMo2(reordered norm、QK-norm、tied embedding),16 层 / d_model 1536 / 16 头 / SwiGLU 6144
参数量837,037,056(0.837B)
上下文4096
TokenizerQwen2.5(词表 151665),chat 模板为 Qwen 风格
预训练132.1B tokens 单遍(中英约 3:7,悟道 2.0 + Dolma 1.7 子集),62,999 步,8×A100
SFT509,515 条 / 129.7M tokens(中文 30.0%),3 epoch,4×A100
DPO17,291 偏好对(中文 29.9%),LoRA(rank 16 / alpha 32)1 epoch 后 merge,beta 0.1,lr 5e-6

本仓库为 DPO 最终产物;SFT 版本见 `zhubolin/olmo2-0.837b-zh-en-sft`。

使用方法

python
from transformers import AutoModelForCausalLM, AutoTokenizer

path = "zhubolin/olmo2-0.837b-zh-en-dpo"
tok = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(path, dtype="bfloat16", device_map="auto")

messages = [{"role": "user", "content": "保持健康的三个提示。"}]
text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tok(text, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=512, do_sample=False)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

生成停止符:eos_token_id = [151645, 151643](<|im_end|> / <|endoftext|>), Qwen 模板生成会在 <|im_end|> 处正常停止。

评测

OpenCompass(core 数据包子集,约 9.5K 题,SFT/DPO 同题对比):

评测结果

局限性

  • —0.8B 小模型:事实性知识薄弱,会一本正经地胡说八道(幻觉),不要用于事实查询。
  • —训练数据为纯语言指令/对话,未做代码、数学专项训练,也不含安全对齐。
  • —预训练语料的中英配比约 3:7,英文能力强于中文。
  • —仅供学习交流,生产使用需自行评估数据许可与安全风险。