跳转至

个人从零预训练1B LLM心路历程

Ch01.1220 个人从零预训练1B LLM心路历程

📊 Level ⭐⭐ | 4.8KB | entities/个人从零预训练1b-llm心路历程.md

个人从零预训练1B LLM心路历程

来源: 炼钢AI

发布日期: 2024-11-13

原文链接: https://mp.weixin.qq.com/s/POUugkCNZTzmlKWZVVD1CQ


前言

项目开始于2024年3月初,当时朋友搞到了一台不知道能用多久的A100。这么棒的机器放着也是浪费,就琢磨着尝试从零训练一个小型号的LLM。其实在当时就有不少些这种“从零预训练LLM”的开源项目了,但是大多训练的数据量或者是模型都很小(几块4090+几十G数据就能跑起来),并没有暴露出一些工程上的问题,训练细节也没有分享的特别清晰。因此,我在制定训练LLM计划的时候有两个目标:

  • 模型参数量和数据量不能特别的demo:参数量上B,数据量上T。

  • 尽量详细的分享训练过程中的各种细节:让没有资源训练的同学能够了解到他们没有机会从实践得到的知识;让有训练资源的同学在复刻过程中少走弯路,以博客形式分享。

参考了TinyLlama项目的训练时间,估计了一下大概可以使用T级别的数据训练个1B大小的LLM(优先保证训练的数据量),耗时两个月左右。考虑到算力有限,决定这个LLM以中文语料为主(80%中文,20%英文),定位是中文LLM。

我给这个LLM命名为“Steel”(钢),名称灵感来源于华北平原一只优秀的乐队“万能青年旅店(万青)”。乐队在做一专的时候条件有限,甚至在自己家里搭的录音棚,自称是在“土法炼钢”,但却做出了一张非常牛的国摇专辑。我们训练LLM的条件同样有限,但也希望能炼出好“钢”来。

Steel-LLM项目初期,我还打算做一件个人认为还比较有意思的事情:因为开源的LLM往往不会包含特别小众、个性化的知识内容,因此计划持续收集围观读者们的数据并训练到模型中,各种亚文化、冷知识、歌词、小众读物、个人的一些小秘密等等啥都行,通过这种方式让围观读者和Steel-LLM能建立起一些联系。但是收到的数据几乎没有,倒是有群友建议训练一些医疗数据进去,可能是他们公司的业务有需要。不过即使我在预训练里加了这部分数据,效果也是大概率比不过在qwen、llama这种大机构发布的模型基础上进行微调的。因此,项目后期我就把收集数据的这个事情从github主页上下架了,在我的第一篇文章中,读者还是能看到“收集数据”相关的描述。

笔者工作比较忙,项目过程中还遇到了算力断供的情况,因此断断续续进行了8个月的时间,过程中,也得到了 @lishu14 的帮助。得益于开源数据,最终Steel-LLM在ceval取得了38分,cmmlu上取得了33分的成绩,表现超过了一些大几倍的机构发布的早期LLM。

随着项目的推进,我其实已经分享过了如下4篇文章:

【从零训练Steel-LLM】预训练数据收集与处理

【从零训练Steel-LLM】预训练代码讲解、改进与测试

【从零训练Steel-LLM】模型设计

【从零训练Steel-LLM】微调探索与评估

因为项目周期比较长,内容也不少,我觉得有必要写下这篇汇总文章,读者对哪部分感兴趣可以再去翻当时更详细的细节。除此之外, 本文会侧重介绍在做各部分内容的时候笔者遇到的问题、回过头来的思考、以及群友/读者问到过的技术细节 。

github:

https://github.com/zhanshijinwat/Steel-LLM

模型地址:

https://hf-mirror.com/gqszhanshijin/Steel-LLMhttps://modelscope.c

原文存档


关联