SevenTnewS

开源

一场租用 GPU 的接力赛以 200 美元训练出 NanoColibri 的 2.7B MoE

NanoColibri-Instruct 以大约 200 美元从空白权重变成了一个可用的 2.7B MoE。志愿者在 Hugging Face Hub 上传递训练接力棒,一次一台租用 GPU,通过比较并交换租约确保永远不会有两个人在同一段上训练。

Emmanuel Fabrice Omgbwa Yasse AI 辅助

2026-08-04 · 阅读需 6 分钟

一场租用 GPU 的接力赛以 200 美元训练出 NanoColibri 的 2.7B MoE

从头预训练一个语言模型通常意味着一个集群、六位数的算力账单,以及被雇来维持训练运行的人。一个新的开源项目给出的答案更简短。NanoColibri-Instruct 是一个 2.7B 参数的混合专家(Mixture-of-Experts)模型,每个 token 仅有 0.34B 活跃参数,它从随机权重变成一个可用模型只花了大约 180 到 260 美元,没有集群,贡献者轮流在租用的 GPU 上逐个训练。代码、检查点以及谁训练了什么的公开账本都存放在训练仓库中。

模型从来不是最终目标。该项目的文档将 Nano 定位为更大想法的环路验证(proof-of-loop):模型的 int4 容器刻意大于消费级机器的内存,在固定的 RAM 预算下从 NVMe 流式加载专家。一台 16 GB 的笔记本电脑无法在内存中容纳 24 到 28B 的模型。在细粒度 MoE 中,每个 token 只触及稠密主干、一个常驻共享专家,以及几个 3 到 4 MB 的路由专家。用 LRU 缓存专家,让磁盘处理未命中。Nano 以犯错也不会造成损失的价格验证了整个流水线,包括 int4 导出。

架构与推理引擎 HYV3 的原生形态相匹配:24 层(1 层稠密、23 层 MoE),隐藏宽度 1024,64 个宽度为 512 的专家并采用 top-2 路由,一个永不离开内存的 2048 宽共享专家,4 倍分组查询注意力(grouped-query attention),每头带 QK 归一化,以及一个 sigmoid 加偏置的路由器。负载均衡遵循 DeepSeek-V3 的方案:按 gamma 乘以(目标减负载)的符号来微调每一层的专家偏置。

接力训练:Hub 上的比较并交换(compare-and-swap)

你无法像拆分代码库那样把顺序预训练拆分给志愿者。每一步都依赖前一步,因此整个训练过程存放在单个Hugging Face 模型仓库中:权重加优化器状态、training_state.json、RELAY.json、LEDGER.md,贡献者轮流操作:认领、拉取、训练一段、推送、释放。

冲突是必须做到万无一失的部分。如果两个人训练同一段,后推送的人会悄然毁掉一个 GPU 日。因此接力棒认领是一份租约,是与 Hub 之间真实的比较并交换(compare-and-swap),而非一种礼貌约定,训练期间通过心跳续租,这意味着被抢占的 spot 实例会自动释放接力棒。训练机器上的只读仪表盘显示损失、吞吐量、专家均衡度以及谁持有接力棒。

它奏效了:20,000 次更新,大约 5.2B token 的 FineWeb-Edu,然后是 1,500 次在 smol-smoltalk 上的聊天 SFT 更新,总计约 90 个 H100 小时。

有一个结果值得借鉴:即使推理时使用 top-1,训练时也要用 top-2 路由。在 top_k=1 时,路由权重坍缩为常数,路由器从 LM 损失中几乎得不到梯度,因此路由会冻结在随机初始化状态。top_k=2 通过两个胜者之间的竞争恢复梯度流动。推理时引擎仍然每个 token 只运行一个专家。无辅助损失的均衡在该规模下维持住了:死亡专家占比保持低位,负载保持健康,而残存的轻微路由偏斜正是流式缓存所喜欢的。

专家不均衡是 MoE 频谱另一端的同一种失败模式。Nous Research 的实地笔记在描述预训练 1 万亿参数模型时指出,核心挑战是路由器将不成比例的流量发送给某些专家,导致一些 GPU 空闲而另一些排队。NanoColibri 版的那个问题,只花了几百美元就得以应对。

5.4B token 能买到什么

这些数字都附有方法论。基准测试通过仓库内的、兼容 lm-evaluation-harness 的测试框架运行,使用相同的提示词和相同的评分方式,稠密参照模型也通过同一套代码运行,而非相信已发布的数据行。

模型活跃参数token 数lambadapiqawinoarc-earc-cobqahswag
NanoColibri (chat)341M5.4B26.362.749.243.422.822.031.1
Pythia-410M @ step3000405M6.3B26.359.850.941.318.815.627.0
Cerebras-GPT-256M (final)256M5.1B29.361.351.141.017.015.827.4

NanoColibri 在两个基线上都赢了 7 项中的 5 项,在 LAMBADA 上与 Pythia 打平,在 WinoGrande 上处于噪声范围内(±1.4,n=1267)。这些注意事项是公开的。Pythia 检查点只运行了其学习率调度的大约 2%,这对其不利;完全退火的 Cerebras-GPT-256M 那行是保守的比较,而 Nano 同样赢了。LAMBADA 的落后看起来至少部分是一个数据伪影:FineWeb-Edu 基本上不含虚构类文本,而 LAMBADA 是用小说构建的。

该项目对结果的解读是克制的:在这个预算下,一个 2.7B 总参数的 MoE 表现得像一个 300 到 600M 级别的优秀稠密模型,总参数数量带来了相对于两个 token 匹配的稠密基线的真实优势。与 SmolLM2 级别的数字之间的差距是三个数量级的数据,而非架构。

两个尴尬的教训

第一个是页缓存陷阱。为了“测量”流式加载,团队在一台租用的服务器上给推理引擎设置了远小于容器内存的 RAM 预算,结果在比容器小五倍的预算下仍得到可疑的平稳速度。服务器的 RAM 远大于 1.2 GB 的容器,因此操作系统页缓存悄然支撑了每一次未命中。那些运行从未触及磁盘;它们刻画的是引擎的缓存记账。真正的磁盘压力数字需要在硬件上施加内存上限的 cgroups,且团队承认,还需要一个更大的容器。此后在速度测试框架中发现的一个基准测试缺陷,就是这篇文章没有任何 tokens/s 声明的缘故。以 200 美元的代价学会测量纪律,要划算得多。

第二个是耗尽了的余弦。固定到步数目标的余弦学习率调度在到达目标时已经耗尽,没有余量继续借助动量训练。后续运行使用 WSD(warmup-stable-decay,预热-稳定-衰减):一个适合接力段的漫长稳定阶段,在团队选定的时机一次性衰减。

下一步:一次 7B 预演,然后是一个 24 到 28B 的容器

NEXT_MODEL.md 中的路线图有两个阶段。Colibri-Micro:总共 7B,1B 活跃参数,100B token,以代码为主的混合数据,先 SFT 再对代码做 RLVR,以及一个真正足够大的容器, , int4 下 3.8 GB, , 用于在目标笔记本电脑上测量真实的磁盘流式加载。然后是 Colibri-Grande,总共 24 到 28B,约 2.4B 活跃参数,其容器刻意超订一台 16 GB 笔记本电脑的内存。Grande 的专家数量只有在 Micro 的实测未命中和速度曲线存在之后才会冻结。一切都开源发布:权重、数据配方、训练代码、接力协议、基准 JSON、账本。

Nano 是自掏腰包支付的。下一阶段需要几千个 H100 小时,按市场价大约 9,000 到 12,000 美元,作者正在申请算力资助。200 美元的环路验证已经完成。它标出的那些教训, , 页缓存和耗尽了的余弦, , 恰恰是一次 9,000 美元的训练无法承受从头去学的。

每天早晨用 3 分钟掌握科技要闻

每个工作日一封邮件,只讲真正重要的 AI 与科技动态。