从零开始构建 LLM(第 32m 部分):干预措施总结Writing an LLM from scratch, part 32m -- Interventions: conclusion
作者完成了其著作《Build a Large Language Model (from Scratch)》后续目标之一:在个人设备上完整训练一个接近 GPT-2 Small 性能的模型。训练耗时 44 小时,最终模型在多项基准测试中表现与官方 GPT-2 Small 相当。该项目验证了现代开源工具链(如 PyTorch、Hugging Face)已使个人复现经典模型成为可能。
Giles Thomas
档案
分类
友情链接
去年十一月,当我完成《Build a Large Language Model (from Scratch)》的主体部分后,我给自己设定了一些后续目标。其中之一是“亲自训练完整的 GPT-2 base 模型”。
如今我已走完这段旅程,在本地机器上耗时 44 小时,训练出了一个几乎(即使不算完全)与 GPT-2 small 性能相当的模型。因此,我觉得有必要总结一下整个过程。
去年十二月,我训练了第一个模型,耗时两天,但结果令人失望:无论是损失值,还是指令微调的能力,都不如原始的 GPT-2 模型。
我推测,这种差距在很大程度上可能是因为原始模型训练时间更长,但我也注意到,在模型和训练流程方面,我可以实施若干改进措施,并认为这些措施或许能有所帮助。
今年一月,我搭建了一套 DDP 训练系统,这样就能快速迭代这些改进措施,而无需每次等待两天才能看到结果。
二月,我开始在云端训练一个基线模型,随后逐一尝试了所有改进措施,最终找到一组能显著降低损失值的方案——无论是在云端还是本地训练都有效。
在这个过程中,我学习或深化了对一系列机器学习概念的理解。按它们对降低损失值的帮助程度排序(前两项实际上略微增加了损失):
我还学会了如何将自定义模型上传至 Hugging Face,发现了随机噪声对训练的一些有趣影响,并改进了使用 LLM 作为指令微调模型评判者的设置方案。
不过在尝试指令微调测试时,出现了一个谜团:尽管我的两个模型在损失值上都非常接近 GPT-2 small,但其中一个模型的指令微调结果同样接近 GPT-2 small,另一个却差得多!这值得日后深入探究。
但即便如此,我仍感到十分满足——我最好的模型(在本地训练 44 小时)几乎达到了 GPT-2 small 的水平,即使略有不足。带着这份积极的心情,我将结束这个“改进措施”子系列,转向“LLM from scratch”整体系列收尾前还想完成的两件事:
我想先处理附录部分——稍后会发布相关内容。但我觉得最重要的还是 JAX 的实现——对此我非常期待。
需要完整排版与评论请前往来源站点阅读。