用 Rust 端到端训练语言模型:经验报告
Training a Language Model End-to-End in Rust: An Experience Report
摘要
我用 Rust 端到端地预训练了一个语言模型 - 独自一人,没有团队,没有 PyTorch,训练路径中没有 Python - 租用的 GPU 时间为 164 美元。我将其报告为一项成就,而不是建议:更有用的贡献是对两个领先的 Rust ML 框架 Candle 和 Burn 作为 2026 年训练(而非推理)后端的测量失败分类。我记录了 5 个 Candle 缺陷,包括默默地不产生梯度的融合内核,以及 3 个 Burn 缺陷,包括大约 3% 的理论 GPU 吞吐量的反向传递和一个在训练中出现段错误的内核融合路径数十亿参数规模。均通过普通损耗曲线检验;没有一个宣布自己。我描述了捕获六个此类无声故障的验证规则,以梯度流仲裁器为中心:运行一次前向/后向传递并断言每个可训练参数接收有限的非零梯度的测试,可推广到任何框架。训练后的模型(大约 0.4B 参数,孟加拉优先)显示出强烈的孟加拉语言建模信号 - 每个词元的负对数似然为 0.93,而随机初始化的双胞胎为 12.60 - 同时在英语常识多项选择上偶然得分,这是故意较小的孟加拉加权预算的预期结果(约 20 亿个词元,54.6 小时,一个租用的 H100)。我还报告了孟加拉语脚本中的分词器丰富性陷阱:幼稚的字节级分词器将孟加拉语的每个标记压缩为大约 1.4 个字符,而英语为 3.9 个字符,默默地颠倒了语料库的语言平衡;修复后大约达到4.1。据我所知,这是第一个有记录的纯 Rust 端到端 LM 预训练运行。这次运行之后,我将训练转移到 PyTorch,并保留 Rust 用于设备上服务:在我手中,Rust 还不是一个训练语言模型的竞争场所,尽管它可能是一个服务语言模型的好地方。