这类模型被广泛使用,例如经典的 Qwen 系列(Qwen2-1.5B、Qwen2.5-1.5B、Qwen3-1.7B……)。不过 Qwen 系列尽管开源了权重,却未完整公开预训练配方。而 OLMo、SmolLM 等进一步开放了数据和训练细节,但复现依然昂贵:据估计,即使只有十亿级参数,OLMoE-1B/7B 和 SmolLM3-3B 的算力复现成本分别约为 20 万美元和 71.9 万美元。
对于普通实验室,知道“怎么训”还不够,还得真正“训得起”。我们需要一套低成本、可复现的“穷人版”预训练方案。
围绕这个问题,清华大学陈文光教授与吕凯风教授团队联合推出全流程开源的 Puro-2B(普罗-2B),开源了训练数据、训练框架、训练配置和模型权重。Puro-2B 采用约 2.03B 参数的 dense 因果语言模型架构,基于 Qwen3-1.7B 配置,从随机初始化开始训练,在消费级显卡 RTX 5090 的计算集群上,最多使用了 1.4 万亿 token。
在覆盖 15 项任务的综合性评测中,以约 4400 美元的预训练计算成本,模型在 15 项任务平均指标上超过 Qwen2-1.5B。6900 美元成本的最佳版本,平均性能接近 Qwen2.5-1.5B。相比其他开源方案,Puro-2B 显著降低了训练成本。
ModelScope: https://www.modelscope.cn/models/thu-pacman/Puro-2B-Base 训练数据: https://www.modelscope.cn/datasets/thu-pacman/Puro-2B 论文链接: https://www.modelscope.cn/papers/2608.27370 Github: https://github.com/thu-pacman/Puro-Megatron
硬件:RTX 5090 的成本效率与通信优化
节点间启用 GPUDirect RDMA,让 24 卡 AllReduce 总线带宽从 8.87 提升到 19.93 GB/s。Puro 的训练策略也针对十亿级参数规模的计算负载与 RTX 5090 的硬件特点进行优化:他们采用数据并行与流水线并行组合,避免通信频繁的张量并行;
通过重新分配流水线各阶段的计算量,调整微批次大小,并按显存占用情况均衡放置优化器状态,平衡不同节点的显存负载。通过上述优化,综合 MFU 能超过 70%,消费卡的性价比通过这些工程适配与系统优化转化为训练成本的优势。
有了更划算的算力,下一步是提高计算精度效率。
精度:FP8 分块量化与净效率收益
与此同时,FP8 的训练吞吐效率得到 1.36 倍提升;把精度损失折算为达到相同损失所需的额外计算后,据估计仍有约 1.34 倍净效率收益。
优化器与学习率:MuonH 与有效学习率视角
这样一来,衡量更新量相对权重尺度的有效学习率(Effective LR,ELR),就能被显式预设,而不随权重尺度在训练过程中的变化而间接漂移。
这让他们把注意力从“用哪个优化器”,转向“如何设计更合理的有效学习率调度(ELR schedule)”。随后,他们针对训练的衰减阶段占比对峰值学习率和训练数据量进行消融。结果显示,较高的峰值学习率和更长的训练周期,通常更需要较长的衰减过程。
因此,他们在训练第一阶段采用不依赖预设终点的 power schedule,支持持续训练;第二阶段采用长线性衰减,为最终的损失收敛留出空间。基于 Scaling Ladder 的比较进一步显示,MuonH 方案相比调参后的 Muon 基线,训练效率约为 1.19 倍。
数据排布:课程模型平均(CMA)
这样既让训练过程中数据集逐步走向更高质量的区间,又保持局部训练区间的数据集配比近似稳定,避免质量变化同时造成领域数据比例的突变。
但数据排好了,并不等于模型能充分学到。Puro 团队此前的研究发现:当训练后期学习率过低时,最后出现的优质数据难以推动参数更新。
为此,他们采用了课程模型平均(Curriculum Model Averaging,CMA)在训练后期保持恒定学习率,使模型继续学习优质数据,再对末端的检查点做权重平均,来缓解较高学习率带来的训练噪声。
数据选择:代理评测流程
据此,他们在第二阶段适当提高了数学数据比重,同时结合领域覆盖和质量筛选确定最终配比。这些小规模的实验为“选哪些数据、保留哪些分数区间、给不同来源分配多少比例”提供了一定参考,相关数据集评估结果也公开在报告中。
这些改进共同组成了 Puro 的低成本训练流程。
在 Tulu-3 混合领域微调中,15 项基准平均分提高 1.17 个百分点,IFEval 提高 1.36 个百分点。三组对照均呈现总体提升,说明 CMA 的优势整体能够延续到后训练之后。
pip install -U modelscopemodelscope download --model thu-pacman/Puro-2B-Base --local_dir thu-pacman/Puro-2B-Base
from transformers import AutoModelForCausalLM, AutoTokenizermodel_id = "thu-pacman/Puro-2B-Base"tokenizer = AutoTokenizer.from_pretrained(model_id)model = AutoModelForCausalLM.from_pretrained(model_id,torch_dtype="auto",device_map="auto",)prompt = "The central limit theorem states that"inputs = tokenizer(prompt, return_tensors="pt").to(model.device)outputs = model.generate(**inputs,max_new_tokens=128,do_sample=True,temperature=0.7,top_p=0.9,)print(tokenizer.decode(outputs[0], skip_special_tokens=True))
👇点击关注ModelScope公众号获取 更多技术信息~