从零开始编写 LLM,第 32m 部分——干预措施:结论Writing an LLM from scratch, part 32m -- Interventions: conclusion
作者完成了《从零构建大型语言模型》一书的主要部分后,设定了训练完整 GPT-2 基础模型的后续目标。经过努力,他成功训练出一个在 44 小时内完成的模型,其性能几乎(如果不是完全)达到了 GPT-2 small 的水平。
Giles Thomas
归档
分类
友情链接
去年11月,当我完成《从零开始构建大型语言模型》一书的正文部分后,给自己设定了一系列后续目标。其中之一是“亲自训练完整的 GPT-2 基础模型”。
如今,我已完成这段旅程,在个人电脑上经过44小时训练得到的模型性能几乎——如果不是完全——达到了 GPT-2 small 的水平。因此,我认为有必要总结一下整个过程。
12月份,我首次尝试训练模型,耗时两天,但结果令人失望:无论是在损失值方面,还是在指令微调后的表现上,都明显不如原始的 GPT-2 模型。
我推测这种差距可能部分源于原模型训练时间更长,但也注意到可以对模型和训练流程进行若干调整——即所谓的“干预措施”——并认为这些措施或许能带来改善。
1月份,我搭建了一个分布式数据并行(DDP)训练系统,使我能够在每次迭代中快速测试这些干预措施,而无需等待两天才能看到结果。
2月份,我从在云端训练一个基线模型开始,随后逐一尝试了所有干预措施,最终找到一组显著降低损失的方法,无论是在云端还是本地环境中均有效。
在此过程中,我对一系列机器学习概念有了更深入的理解或修正了原有认知。按其对损失的影响程度递增排列如下(前两项实际上略微增加了损失):
我还学会了如何将自定义模型上传到 Hugging Face,了解到随机噪声对训练的影响,并对使用 LLM 作为指令微调模型的评判标准这一设置进行了优化改进。
不过在测试指令微调效果时出现了一点小谜团:尽管我的两个模型在损失值上已接近 GPT-2 small,其中一个模型的指令微调结果也与之相当,另一个却差得很多!这留待日后深入探究。
尽管如此,能够用本地44小时的训练成果得到一个几乎媲美 GPT-2 small 的模型,依然令人非常满足——哪怕仍有差距。基于此积极进展,我将结束这个“干预措施”系列专题,转向“从零构建 LLM”整体系列的另外两个预定目标。
我觉得应该先处理附录部分——很快就会发布相关内容。不过,最让我期待的还是 JAX 的实现,非常期待看到成果。
需要完整排版与评论请前往来源站点阅读。