如何从零到一做大模型pretrain

知乎:https://zhuanlan.zhihu.com/p/718354385

这篇文章介绍下如何从零到一进行 pretrain 工作。

类似的文章应该有很多,不同的地方可能在于,我并不会去分析 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 工作,我建议要组建数据团队,爬虫或购买是必须的,否则网上那几个翻来覆去的数据集在清洗之后根本不够用。

数据清洗

“清洗”是数据环节最最核心的工作,没有之一!

目前,利用模型对 pretrain 数据的质量进行打分,已经成了数据清洗工作的标配,llama3、qwen2 的技术报告都有提及。需要注意的是,基本上大家都认同:同等 size 下,BERT 结构的模型的表征能力是强于 transformer-decoder 模型的,因此打分模型最好还是从 BERT 家族中选一个来训,效果好、速度还快。至于训练数据怎么搞,还是老一套,让 GPT4 标注一下,或者是利用“某个源的数据是高质量数据,某个源的数据是低质量数据”这种规则生产一些。特别强调,任何打分器,都会给 code、markdown、latex 等格式数据打很低的分数,我们必须把这些数据摘出来,免得被直接洗没了。(fineWeb 这个数据集,就洗的基本没有 code 数据了)

训打分器这个工作的难点是要学会放低心态,别那么执拗,不要执着于打分器 100% 的准确率,凑合能用就行了,有打分器总比没打分器强,但你要花一个月来训打分器,那就还不如没打分器。此外要学会变通,你有 32K 的语料不代表你要训 32K 的打分器,训个 4K 就差不多了,你非要纠结存在“前 4K 低质量,后 28K 高质量”这种特殊情况,我只能说算你牛逼。

打分器结果只是众多数据特征中的一个特征,并不一定要完全依赖它来洗数据,可以和其他特征结合使用。这也引出了数据清洗的另一个大杀器:规则。不要瞧不起规则!不要瞧不起规则!不要瞧不起规则!

数据长度是否少于某个值,数据中某个 token 的比例超过某个阈值,数据的 zh 占比、en 占比、数字占比,数据是否有“http”字段,数据是否包含了“新冠”、“疫情”等低质量关键词,数据是否包含某些反动词汇,数据是否包含某些黄色字眼,等等等等。用启发式的规则过滤数据并不丢人,洗不干净数据才丢人。

但同时,必须注意到,用规则清洗或者过滤数据的时候,一定不要把数据搞成分布有偏的数据。比如、你觉着:“包含网址的数据质量低,而网址的英文占比高”,所以你把英文占比高的数据都去掉了。整挺好,模型成了单语模型。因此,用规则的时候,一定要多 check 下被滤出去的数据长什么样子,勤 vim 一下!

另外,数据脱敏也是数据清洗环节必须要做的一个工作。我们要尽可能的把训练数据中涉及到的人名、电话号码、邮箱等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值