最好的学习方式莫过于自己从头做一遍。学习大模型的相关知识以来,一直都想从头自己训练一个 1B 以下的模型,感觉这样才算是真的学过了。不过以手头的资源,也只能玩玩儿迷你的小模型了。最近在网上搜了不少资料,主要是 GitHub 上的仓库和 Arxiv 上的 paper,顺便记录在这里。
https://github.com/karpathy/nanoGPT
nanoGPT 是 karpathy 大神写的 GPT-2 最小实现。麻雀虽小,五脏俱全。GPT-2 是大模型的鼻祖,很多论文都以 nanoGPT 为基础魔改或者作为 baseline。nanoGPT 共有 0.1B 到 1.5B 四个大小不同的版本。
训练 GPT-2 的文章有很多,虽然有些比较老的,但是也值得参考,列举一些我觉得不错的:
-
https://www.kaggle.com/code/pritishmishra/gpt-training-on-wikipedia-dataset-from-scratch -
https://zhuanlan.zhihu.com/p/79714797 -
https://zhuanlan.zhihu.com/p/606339093 -
https://finisky.github.io/2020/05/01/pretrainchinesegpt/ -
https://zhuanlan.zhihu.com/p/656758138 -
https://github.com/minimalist-nlp/gpt2-text-generation
tinyllama
Llama 的一个迷你版,花了 90 天,用了 16 个 A100-40G。和 Llama 完全相同的架构,可以无缝替换。
https://github.com/EleutherAI/pythia
这个参数范围更大了,从 14M 开始,一直到 12B,共 10 个不同大小的版本。也是出于学术研究目的,提供了这么多模型。
https://github.com/allenai/OLMo
有 1B 和 7B 两个版本,架构上没什么特色,优点是从训练数据到代码和 Checkpoint,做到了完全开源,而非某些模型的伪开源。
https://github.com/QwenLM/Qwen1.5
阿里出品的大模型,参数最小有 0.5B 的。看网上的评价,应该是中文这块做的最好的大模型了。
Phi-1.5
Phi-1 是微软出品的一个 350M 和 1.3B 的模型,使用由大模型合成的「教科书」级别数据,也就是说相比网页数据更优质一些的数据训练,具体可以参见他们的论文 Textbooks are all you need I/II。因为数据质量高,合成也困难,只用了 6B 的数据,在 8 个 A100 上训练了 4 天。
后来又出了一个 Phi-2,2.7B,号称性能达到了 13B 的模型。不过好像没有论文了,模型倒是也在 HF 上。https://huggingface.co/microsoft/phi-2
详细的解读可以参考这篇文章:https://zhuanlan.zhihu.com/p/690423105
这里还有网友做的中文版:https://github.com/charent/Phi2-mini-Chinese
OpenELM
Apple 出品的一组模型,从 0.27B 到 3B 不等,应该是冲着移动端的模型去的,还没仔细看。
下面再介绍一些网友的项目,可能更实际一些。
-
https://github.com/charent/ChatLM-mini-Chinese 从零开始训练的一个 0.2B 中文模型,用的 T5,可能比较早了。 -
https://github.com/jiahe7ay/MINI_LLM 从零开始训练的一个 1.4B 中文模型,基于 Qwen。可以参考作者的知乎文章:https://zhuanlan.zhihu.com/p/684946331 -
https://github.com/DLLXW/baby-llama2-chinese 基于 llama2 的中文模型,作者目标是 0.5B,但是貌似受硬件限制,只训练到了 0.2B 的模型。 -
https://github.com/OpenBMB/MiniCPM 2.7B 的参数,号称能跟 Mistral-7B 不相上下,感觉有点吹得过了…… -
https://github.com/Chinese-Tiny-LLM/Chinese-Tiny-LLM 一个 2B 的模型,貌似还没训练完。 -
https://github.com/keeeeenw/MicroLlama 又一个 0.3B 版 llama,相当于 TinyLlama 的再缩小版 -
https://github.com/zhanshijinwat/Steel-LLM 网友的又一个预训练计划,貌似还没开始
最后,再罗列一些小模型训练相关的技巧和资源:
-
一本书《Build a LLM from scrath》,还没写完,但是 GitHub 上已经有 13k star 了,可能是不错吧。 -
这个 Awesome Chinese LLM 罗列了一些数据集,也值得参考。 -
还有一篇叫做 MobileLLM 的 paper,介绍了一些训练小模型的 trick。 -
Llama from scratch,这篇文章介绍了 Llama 中一些关键的组件的影响。 -
Rethinking Optimization and Architecture for Tiny Language Models,解读:https://zhuanlan.zhihu.com/p/681614203 -
MNBVC:Massive Never-ending BT Vast Chinese corpus 超大规模中文语料集 -
RedPajama,Llama 的 dataset 重现