构建 Apex-2 的经验教训

Reddit r/LocalLLaMA 新闻

摘要

一位开发者分享了他在构建 Apex-2 过程中的经验教训。Apex-2 是一个小型开源大语言模型,使用约 80B tokens 训练,成本约 2000 美元,涉及 GPU 瓶颈、基于 DiLoCo 风格的 GH200 实例分布式训练,以及对 FineWeb-Edu 和 DCLM 数据集的激进 MinHash 去重。

大家好,非常感谢大家对我这个模型的关注,热度远超我的预期。下面简要总结一下我在构建 Apex-2 过程中的摸索与试错经验。 **1. GPU 始终是瓶颈** 我原本计划用大约 1T tokens 进行训练,但最终只训练了约 80B tokens。仅 FineWeb-Edu 就有约 1.3T tokens,我显然低估了数据规模:一块 H100 根本不够用。这个项目让我真切体会到了为什么会有这么多资金投入到 GPU 和显存上。 **2. DiLoCo 分布式训练** 在同一个区域内,运行两个独立实例的效果对我而言更好。我没有使用 2x H100 实例,而是使用了两个 GH200 实例,每隔固定步数进行一次模型合并。每块 GPU 达到了约 40% 的 MFU。2x H100 实例的单卡成本更高(约 4.19 美元/小时,而 GH200 为 2.29 美元/小时)。使用两个 GH200 实例、每块 GPU 约 40% MFU、每 350 步合并一次的情况下,训练速度比单 GPU 快约 1.9 倍,成本也更低。(数据中心实例之间的网络带宽可能帮了忙;一次合并通常不到一分钟。) **3. 对 FineWeb-Edu 和 DCLM 进行去重** 当我对整个语料库一次性去重时(使用 MinHash,包含近似重复),我发现 FineWeb-Edu 样本中有 57%、DCLM 中有 34% 都是重复内容。FineWeb-Edu 仅在每个 Common Crawl 快照内部进行去重,因此在后续快照中被再次抓取的页面仍然保留。如果预算充足,这可能无关紧要,但我必须在极少的算力下发挥最大作用,所以把这些重复数据都删除了。(注意:FineWeb 的作者报告称跨快照去重并未提升他们的效果,所以这是一个权衡,而非免费的收益。) 关于 MoE 架构,我参考了 Mixtral 论文(https://arxiv.org/abs/2401.04088)。整个项目的花费约为 2000 美元。 我也在这里记录了我对大语言模型的思考,如果你感兴趣的话:https://github.com/DW-dev-UE/LLM-from-scratch/blob/main/ThinkingLab/ThinkingLab.en.md 我原本没打算在 Reddit 上分享这个模型,所以恐怕很多小错误已经记不太清了 😭 我现在正在构建一个 21B 参数的 MoE 模型,随着进展我会继续分享那个项目中的经验教训和错误。 再次感谢大家的关注!如果有机会,我很希望能加入实验室,帮助大家一起构建属于所有人的大语言模型。
查看原文

相似文章