为什么说大模型训练很难?
问题描述
自从Bert网络模型产数量超过3亿规模,当时候只是觉得性能好,没想到GPT系列出来后,GPT-3直接用170B规模的参数量模型精度碾压竞品。
接着就是新一轮的竞争了,后面的事情就有点可怕了,Google推出万亿稀疏switch transformer,huawei推出2000亿稠密鹏程盘古大模型,微软推出Turing-NLG有1000亿参数,英伟达推出MegatronLM系列。
大家都说大模型难,大模型训练除了集群调度麻烦,还难在哪里吗?
来自 罗小黑大佬 的回答
罗小黑 东北大学 个人主页:https://www.zhihu.com/people/feng-qing-yang-72-97
之前做过一部分预训练的工作,训的模型是7B,13B大小,分享一下个人的感受
首先是训练方面,这两个量级的模型训练起来其实和小模型差不多,参数设置上有两个地方需要注意:一个是学习率需要略小,在e-5这个量级就可以,其次是global_batch需要比较大,一般在2-4M tokens,这样训练起来会比较稳定
对于7B这个量级的模型,一般stage=2,tp=1,zero1=8,因为如果单卡能放下一份模型的参数和梯度就不需要用tp,不然会很慢,这样相当于一张80G卡存一份完整模型参数和部分优化器转态,模型参数占7 * 2 =14G,而优化器状态则分布在单节点的8张GPU内,平均每张卡占7 * (4+4+4+2)/8 =13G,这个就相当于在单节点内做8路数据并行,在seq_len=2048的情况下,单张卡的micro_batch大概可以到8左右,如果不进行梯度累积,global_batch=2M的情况下至少需要128张卡( 8 * 2048 * 128),24h大概能训30-40B tokens,1T tokens大概训一个月左右(凭印象写的,如果有错误欢迎指正),设置好后剩下的就交给时间了,每天上去看一下loss,如果没有机器故障,通常是可以一把从头训到尾的,不需要中间再去调各种参数
而大到千亿这个级别的模型,难度就上来了,会出现一些数值计算/收敛稳定性等各方面的问题,除此之外,机器数量一多起来后故障率就非常高了, 感兴趣可以解了一下GLM 130B训练的分享报告,或者Mate训OPT的logbook ,如Meta这种大厂调度千卡的故障也是非常多的,这是没法避免的
我个人感觉在模型训练之外其实更重要的是数据,在同一scale下,数据质量直接决定了模型性能的上限。模型大家可能会开源,但数据,特别是有价值的数据一般是不会轻易开源的。英文语料数量很大,可以通过严格筛选来得到高质量的diversity语料,而且也已经有很多开源的现成可用的语料数据,比如c4,Pipe,RedPajam,refinedweb。中文早先开源的不多,现在大家也已经开始卷数据了,我了解的一些开源数据有:
- WuDaoCorpus,200G中文,https://data.baai.ac.cn/details/WuDaoCorporaText
- TigerBot,100G中英,https://github.com/TigerResearch/TigerBot?tab=readme-ov-file#预训练数据
- SkyPile-150B,150B tokens,https://huggingface.co/datasets/Skywork/SkyPile-150B
- WanJuan ,文本1TGB,应该是目前开源最大的一个了,https://github.com/opendatalab/WanJuan1.0/blob/main/WanJuan1.0-CN.md
- CCI ,104GB文本,https://data.baai.ac.cn/details/BAAI-CCI
但总体规模上比英文还是小很多,而且中文语料的质量也一言难尽,广告,AIGC内容 ,错误的内容,违反安全的内容等各种乱七八糟的数据也很多,所以数据这方面不是一个人两个人就能做的,得需要一个专门的数据团队来专项负责。
最后一点是,训大模型的试错成本非常高,时间、机器、人力搭进去了,但谁也没法保证训出来的模型效果就一定好,因为数据质量比较难以客观量化,所以炼丹前也很难判断这批数据训出来的模型效果到底如何,风险比较大,只能一边训一般观察模型的状态,如果没有达到预期,只能通过持续添加更高质量的数据来调整。并且按照现在开源模型与日俱增的训练数据量来看,后续开源的基础模型估计都得2T tokens起步了,否则效果难以比肩(按照scaling law来看),开源出来也没太大意义,因为大家不会去用。不过后面开源的模型还是有一定的数据优势的,因为可以用更新的数据来训,而benchmark相对来说是旧的,所以刷分可能相对更容易一些,分不高没法做pr,但分高并不代表模型的水平。
所以综合来看,训大模型的难不是单点技术上的难,而是系统性的难,需要数据,炼丹师,框架,硬件等几方面人力间的紧密配合,并且围绕着炼丹师的需求来开展工作。这也是为什么创业公司往往更容易做出成果,因为大家目标比较专注一致,执行力就会比较强,而大公司由于各种原因就非常容易互相扯皮。
来自 金瀛若愚大佬 的回答
金瀛若愚 Microsoft AI 资深科研工程师
主要难点是出了问题时(一定会出问题)怎么找到问题在哪。举一些实操会遇到的例子:
几千块上万块GPU一起训练,单笔训练成本千万元起,你有100个实验都想试试,怎么判断哪些最有可能成功?
哪些数据是值得去train的,哪些不重要可以扔了,哪些数据加进去反而效果变差。
只有英文数据,没有中文数据怎么办。
那么巨大的数据存在哪里、怎么存取能保证不把机器塞满且能快速调取。
程序随机发生crash,怎么debug?是数据问题,还是硬件问题,还是代码问题。
如果是硬件问题,几千块GPU有一个会随机产生奇怪的报错,怎么在不花几千万重跑一次的情况下找出是哪一块?
模型训练一个月才知道结果好坏,知道时候几千万已经花了。怎么能早点知道大致的结果来停掉没前途的实验?
用户说模型会胡说八道,你不修好这个问题你的模型就会被下架,怎么修?调参?改训练数据?改模型结构?
总之,挑战太多了。总结一句就是大模型训练是在巨大的解空间中搜索,每次出手都有巨大时间和经济成本,如何在最小成本下找到最优解。
来自 尤洋大佬 的回答
尤洋 新加坡国立大学校长青年教授,UC Berkeley计算机博士
个人主页:https://www.zhihu.com/people/berkeley-you-yang
链接:https://www.zhihu.com/question/498271491/answer/3378199868
来源:知乎
首先,其实大模型训练是non-convex优化,我们每次训练收敛的点都无法确定是最优点。
并且,early stopping广泛应用于今天的实验,一个好的算法可能10亿次循环才能展示出效果,我们却需要100万次循环停止。更加使得大模型训练无法进行理论分析。
所以,大模型训练其实没有严格的理论指导,更多是经验总结。另外,实验成本过高。
基础设施方面,先不说并行分布式计算的效率问题,其它方面也有很多问题。去年10月听说国内某个top 3科技巨头用2000卡训练,中途有卡崩溃,他们花了2天才找到是哪张卡出故障 (不是2小时或2分钟)。听起来非常原始 😦
严格讲,我们无法从收敛曲线去预测模型的实际效果 (generalization performance)。
每次效果不好,都应该重新做一次完整预训练和微调实验(实际上不会,迫于成本的压力)。每次完整的GPT-4实验可能需要几千万美元并且需要等待数月。
我们很可能才探索了AGI的一点皮毛,Transformer大概率不是最优的架构,但是没太多人有资格说自己有一个更好的架构。由于训练超参数和优化策略太多,稍微的方案错误或实验疏忽可能都导致产品质量出问题,并且很难找到真正的原因。因为试错成本太高了。
前段时间,有人问OpenAI首席科学家Ilya Sutskever未来的GPT有没有可能用LSTM或RNN。Ilya说我们可能已经不会训练RNN了 😦
来自 Quokka大佬 的回答
Quokka 新加坡国立大学校长青年教授,UC Berkeley计算机博士
个人主页:https://www.zhihu.com/people/berkeley-you-yang
链接:https://www.zhihu.com/question/498271491/answer/3378199868
来源:知乎
确实大模型训练的绝大部分困难都是大规模并行系统带来的,但说来说去其实也就是那么些问题个一个磨过去就完了。单纯从技术角度讲,大模型训练这件事真没有想象得那么难。
最近各家公司相继发布自家 7B/13B 乃至几十 B 参数的模型,你追我赶好不热闹,让人不禁想起四五年前 BERT 出来时的盛况:一开始,有人估了一下这样的巨无霸(在当时看来)模型需要什么样的天量算力只,用 2080Ti(当时性价比较高的显卡)要训多久,科研人一片哀嚎在各个榜单被BERT 刷爆的情况下没有资源的穷人未来的科研方向在哪里。结果呢?没出多久,各家公司人手发布一个 BERT,你方唱罢我登台;后来甚至有人搞 24hBERT,单机八卡 12G 显存的 Titan-V 训-天就行...
现在呢?训练 GPT-3 级别的模型需要的算力自然比 BERT 高很多,但是我们现在拥有的条件也比OpenAl第一次训练 GPT-3 时强很多:论硬件,以前 OpenAl用 V100 现在大家都用 A100,不受制裁的厂商甚至可以用 H100,单卡性能直接提升 N 倍;论数据,OpenAl 私有的数据固然不可得,但各种开源数据集也越来越多,也有很多工作(例如 ‖ama 1/2)报告了只需在开源数据集9上进一步加工和清洗就能获得喜人的训练结果;论代码实现,以前 OpenAl什么都要手撸,现在有Flash-Attention、Megatron-LM、DeepSpeed 等等,有些做算法的人甚至几乎完全不了解并行训练9的原理(当然我不认为这是一件好事),反正跑一跑 DeepSpeed 就是几行代码的事情..未来不见得高校实验室也能训练 GPT-3,但是至少各大公司掏出自己的大模型应该没那么难,绝不是OpenAl -骑绝尘剩下的机构都靠边站。
我越来越觉得,训大模型就像造原子弹。说到这里,我想提到一段历史--第N国计划。简单来说,美国想知道在没有专业的核武器知识、只有公开的核武器的知识和材料下,是否有技术人员可以研究制造出原子弹。美国选取了两名物理学博士(并非核物理方向),允许他们查阅公开资料但不允许他们和真正有原子弹制造经验的人交流:他们可以自行设计实验方案,但实验结果并非中他们亲自得出,而是由真正参与过原子弹设计的专家(通过理论模拟等方式)给出,然后他们自己对实验结果进行分析和进一步改进。不到三年的时间,他们就给出了一份完整的技术报告,并且军方评估认为这一方案是完全可行的(甚至军方还想按这个方案实际制造一枚原子弹进行测试,但因为种种原因最终作罢)。
也就是说,制造原子弹的困难之处其实不在于原理和方法,而是在于资源(铀矿/离心机/核试验数据)的获取,这也确实是现实世界中有核国家这么少的原因。对大模型来说,谷歌研究员有一句话-We Have No Moat, And Neither Does OpenA!(我们没有护城河,OpenAl 也没有),我表示认同。高端显卡就是铀矿/离心机,训练大模型的过程就是制造原子弹。训练本身没有那么难难的是你有足够的资源做这件事。
原子弹和大模型还有另一个相似之处:只要原子弹造出来了,就算我比你技术差一点(爆炸当量9裂变效率等),我们也可以实现互相威慑;只要大模型训出来了,就算我比你模型差一点(通用性、知识全面程度等),但只要我的模型可以在我的场景下够用,我也可以不被你卡脖子。
假设我们接受造原子弹/训大模型在技术上没有太大的难度,那难点在哪里呢?如果仔细看一遍上面就会发现这里说的是“第二个做”没有太大的难度。那的论述(无论是关于原子弹还是大模型),对第一个做的人来说呢?
关于原子弹有一句话(在 OpenAl 刚刚发布 GPT-4 的时候,我也把这句话发布到了朋友圈):
The biggest secret of the atomic bomb was that it could be made. 原子弹最大的秘密就是它可以被制造出来。
第一个做的难点在于信心,相信它真的能做成,愿意投入足够的资源和人手去做。信心从何而来?信心不是没有由来的一腔热情,而是有根据的猜测(Educated Guess)。现在粉 OpenAl 首席科学家 llya Sutskever 的人非常多,但在 GPT-39 这件事上,起到最大作用的人很可能不是他,而是Dario Amodei (OpenAl Scaling Law 那篇文章的尾作,现在跑路去 Anthropic 了)。回顾一下时间线,2020 年1月 OpenAl发表了语言模型的缩放定律,同年5月发表了 GPT-3,最近的GPT-4 Tech Report 同样在讲 Predictable Scaling(可预测的缩放)。大模型固然要靠大力出奇迹,但是资源总是相对匮乏的,到底往哪个方向大力,绝不是像无头苍蝇一样乱撞。
大模型9这场浪潮离终局还有很远,我想起一句话“此战胜负,皆系诸君”,与诸位共勉。
来自 金天大佬 的回答
金天 腾讯计算机系统有限公司 AI算法专家
个人主页:https://www.zhihu.com/people/berkeley-you-yang
链接:https://www.zhihu.com/question/498271491/answer/3378199868
来源:知乎
主要难在三点:
- 别人都说不难,这是一个巨大的误导,但其实你去尝试会发现全是坑,大概就是pr和现实,买家秀和卖家秀的差距
- 调试周期过长,这一点比较折磨人,举个例子,加载一次13b的权重,或者30b的权重,一天就没了
- 显存需求较大,没有几块A100或者4090很难快速迭代,什么?还在用100?恭喜你,你将踩训练lms所有可能遇到的坑
谨慎审视现在很多自媒体无脑铺天盖地宣传的各种所谓大模型,很多都是滥竽充数,即没有告诉你为什么有效,更没有告诉你为什么没有效,所有的坑都得你来踩。
致谢
- 为什么说大模型训练很难? https://www.zhihu.com/question/498271491