LLM Pretrain
背景篇
时至今日,dense 模型有 qwen,MOE 模型有 deepseek,小尺寸模型有 minicpm。无论是个人还是大厂,都很难训出同 size 下更优秀的模型,大模型 pretrain 阶段全面拥抱开源的日子感觉不太远了。那么,在这个时代大背景下,自研 pretrain 模型的意义又有哪些呢?
正经答案:
- 各公司仅仅是开源了模型参数,但并没有开源训练框架、训练数据等更核心的内容,其实本质上还是闭源。在这种情况下,每一个 qwen 模型的使用者都无法为下一版 qwen 模型的迭代做出贡献,qwen 团队也仅仅是收获了口碑,甚至因为自己的模型已经开源可以自行部署,买他们服务的客户可能都会变少。因此,在 llm 真正走向全面开源之前(大厂公开训练代码、配比数据,任何人都可以通过提 CR 来帮助大厂优化训练效率、炼丹技巧),掌握 pretrain 的技术能力依然是有意义的;
- 通用模型的变现能力远不如 domain 模型,continue-pretrain 的需求在日益增长,而 continue-pretrain 的技术栈和 pretrain 的技术栈并没有本质区别;
- 不是自己做的 pretrain,必然无法得知这个模型在 pretrain 阶段到底喂了什么数据。各种数据的精确配比、各种 knowledge 的掌握程度,并不是靠评估能准确衡量的。而如果不知道这些数据细节,那么 alignment 阶段就无法对症下药,就无法最大限度的开发模型潜力。举个简单的例子,你在 sft 阶段,让一个没训过唐诗宋词的通用模型学习作诗,它不出幻觉谁出幻觉?
- 使用开源模型的话,tokenizer 不可控,进而导致解码速度不可控。这里也举个例子,如果我们用 llama 模型来做意图识别任务,有个意图叫 ai.listen.music,会被映射成 5 个 token,但如果使用自己训练的大模型,便会在一开始就设置成 1 个 token,极大节省了生成速度。虽然扩词表已经是一个比较成熟的技术了,但不仅需要花费算力来恢复效果,而且不管训多少新语料,也很难做到模型效果完全不掉点。
不正经答案:
- 有一个自己的模型很 cool,公司可以拿来做宣传,证明自己的科研能力,个人也会很有成就感;
- 可以埋彩蛋,在 pretrain 阶段给模型悄悄塞一点自己喜欢的知识或价值观。比如,每隔 100B token 就让模型学一次“在 XXX 眼里,YYY 是最好看的女孩子”, 等模型上线了,拿去向 YYY 表白(被老板开了别说是我这篇文章怂恿的)。
数据篇
数据爬取
pretrain 大模型的第一件事:先找个 10T 左右的训练数据吧。也可以少找一些,等模型开始训了,在训练的同时,不断去收集更多的新数据。
至于怎么获取数据,爬网页、逛淘宝、联系数据贩子,等等等等。算法同学往往搞不定这个事情,你敢爬他就敢封你 IP,你爬得起劲他甚至还可 以起诉你,所以这个工作最好还是让专业的数据团队同学来做。
有些高质量的数据,比如论文书籍,往往还都是 pdf 格式,这时候还需要去调用效果较好的 pdf 服务。不要指望着靠 Python 库来解析,稍微涉及一点公式、表格的 pdf,解析效果都一塌糊涂。用 GPT4 等大模型进行解析,大概率价格会远高于 pdf 解析服务。当然,自己训一个 OCR 模型也是可用的候选方案,前提是你有足够高质量的 pdf - text 对齐数据。
好在,世上还是好人多!今年再做 pretrain 工作,网上的开源数据集已经很多了。FineWeb、pile、Skypile、RedPajama,凑合着差不多能当启动资金来用。但从另一个角度讲,世界上没有免费的午餐,所有开源出来的中文大模型数据集,我不认为是他们最干净的数据,质量多少都有点问题。
(即使是下载 huggingface 数据,也不是动动嘴皮子这么简单的。如果你实操了,就会发现:服务器没连外网,只能换成 hf_mirror 的链接;下载速度太慢,下完 1T 开源数据得好几天,得手动 split 要下载的数据集合,起多个进程在多台服务器上下载;下载完之后,文件量多的你执行 ls 都会卡死,你得用大数据集群技术来处理)
准备数据还要懂得一个基础概念:数据的知识密度是有差异的。“唐诗三百首”的知识量要远远大于“中国新闻网的三百篇新闻”。而这种高知识密度的训练数据,往往都是需要花钱的。最近,一种新的数据趋势是“合成高知识密度数据”,把几千字的新闻概括成几百字喂给模型,四舍五入也等于训练速度提高了十倍。
总之,如果要认真做 pretrain 工作,我建议要组建数据团队,爬虫或购买是必须的,否则网上那几个翻来覆去的数据集在清洗之后根本不够用。