为什么说大模型训练很难?

  • Post author:
  • Post category:其他


链接:https://www.zhihu.com/question/498271491

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

自从Bert网络模型产数量超过3亿规模,当时候只是觉得性能好,没想到GPT系列出来后,GPT-3直接用170B规模的参数量模型精度碾压竞品。

接着就是新一轮的竞争了,后面的事情就有点可怕了,Google推出万亿稀疏switch transformer,huawei推出2000亿稠密鹏程盘古大模型,微软推出Turing-NLG有1000亿参数,英伟达推出MegatronLM系列。

大家都说大模型难,大模型训练除了集群调度麻烦,还难在哪里吗?


作者:金瀛若愚

https://www.zhihu.com/question/498271491/answer/3051092055

主要难点是出了问题时(一定会出问题)怎么找到问题在哪。举一些实操会遇到的例子:

几千块上万块GPU一起训练,单笔训练成本千万元起,你有100个实验都想试试,怎么判断哪些最有可能成功?

哪些数据是值得去train的,哪些不重要可以扔了,哪些数据加进去反而效果变差。

只有英文数据,没有中文数据怎么办。

那么巨大的数据存在哪里、怎么存取能保证不把机器塞满且能快速调取。

程序随机发生crash,怎么debug?是数据问题,还是硬件问题,还是代码问题。

如果是硬件问题,几千块GPU有一个会随机产生奇怪的报错,怎么在不花几千万重跑一次的情况下找出是哪一块?

模型训练一个月才知道结果好坏,知道时候几千万已经花了。怎么能早点知道大致的结果来停掉没前途的实验?

用户说模型会胡说八道,你不修好这个问题你的模型就会被下架,怎么修?调参?改训练数据?改模型结构?

总之,挑战太多了。总结一句就是大模型训练是在巨大的解空间中搜索,每次出手都有巨大时间和经济成本,如何在最小成本下找到最优解。


作者:包包大人

https://www.zhihu.com/question/498271491/answer/3055245869

因为大模型的训练有三大难点,1.消耗计算资源巨大。2.对数据的数量和数据的质量要求极高。3.很难用技术指标进行评估他的好坏。

这三点决定了你的实验做的又慢又不靠谱,又费劲又不确定。

这对人总结经验,调整实验方向造成了巨大的挑战。

有人说大模型嘛,简单,给我卡就行,等到老板真给你买来了1000张卡你就知道有多难了,老板说,小王,卡买来了,三个月给我搞出来。

然后你发现,就算有人把正确的代码,数据,参数全告诉你,你也就够完整跑一次把它训练出来,万一中间服务器停电一次,完蛋交不了活儿了。

更别提你要自己写模型代码,调试,想办法评估模型,根据结果反馈调整实验方向,时间和资源完全不够!

大模型时代最宝贵的算法人才,就是这些拿钱和时间砸出来的实践经验,能总结一套训练方法论的人才,有实际经验跑过几百个实验的老师傅,普通人完全没条件没资源。相比设备钱,时间钱,给这些人开三百万年薪都实在是太少了。

大部分人还是纸上谈兵,听风是雨罢了。

这不是普通玩家能参与的游戏。


作者:知乎用户

https://www.zhihu.com/question/498271491/answer/2961844274

首先,这是来自META AI的Susan Zhang分享他们训练OPT-175B,也就是对应GPT-3的实现模型的经验教训。

5名工程师组成的小组训练了175B参数的LLM,使用了1024张A100(80G显存),总耗时大约三个月。

按照训练效率预估,在不发生错误和重启的情况下,在300B token数据集上训练需要花费33天。

第一轮:初步训练三次(这里的训练一次未必是跑完所有数据,只是启动和停止训练过程),先按照经验假定模型和训练超参数,并根据实际情况简单调整。如增加weight decay从0.01到0.1、设置全局梯度norm clipping为1.0、调整Adam的参数等。这些调整都是基于对训练时每个batch的loss结果的观察做出的。但是其实都没什么意义,因为他们发现是自己的代码有bug(惨,前三次白跑),所以应该在小规模数据和模型参数上测试代码。

第二轮:超参数调整,根据观察反复确认哪些参数更有效果(最考验观察能力和经验)。

第三轮:确定了最终的超参数(实际上很多参数仍然是估计的),开始正式训练(已经过去了一个月)。训练过程中依然在观察loss曲线(有不少尖峰),并不断调整参数。尤其是Run11.6开始不断反复重新计算同一段batches,观察超参数不同对结果的影响。在Run11.10还换了激活函数Gelu->ReLU。

第四轮(“最后”一轮):33天,175B参数,300B tokens,992张80G显存的A100卡。遇到了包括但不限于:GPU掉线等硬件问题、CUDA错误、任务挂起、NCCL错误、代码bug(检查点存储问题、损失函数问题等)、训练不稳定问题再次发生。

所以,即使是有丰富经验、充足的数据集和庞大硬件资源,训练大模型依然是困难重重的。


作者:生栋

https://www.zhihu.com/question/498271491/answer/2232480465

因为这个领域最近几年才开始热门,而之前的框架pytorch、tensorflow等是早就出现的,当时并没有针对大模型的分布式训练的需求场景做深入的抽象设计和优化。所以这个领域亟需当年 MapReduce(解决搜索引擎上建立倒排索引),Stream computing (电商/社交领域引入实时更新)这样的一套编程范式和对应的计算框架来解决掉@西门宇少@ZOMI酱提到的问题。

我半年前从云平台换到 SysML 方向,就是因为喜欢这个领域:涉及的东西很多,而且足够难,能够让我的技术水平再提高一波。

我专门搞了一个github repo : Hack SysML 来记录自己在这个领域里的学习笔记。做这个领域的开发,既要懂系统,还要懂算法。而实践起来需要熟悉 Pytorch、C++、CUDA,懂体系结构,计算机网络,还得通过构造精巧的数据集来验证精度符合要求,真的好难。

不说了,我要去学习浮点数相关的知识了,这周被相关的一个bug坑了三天  ‍


☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。





扫描二维码添加小编↓

117adeec48549cc7e3f13ad7b846c6b1.jpeg