大模型训练太难了!
进NLP群—>加入大模型与NLP交流群
这里大模型训练特指基座大模型的从0开始训练,不包括在2000条数据上SFT这样的小任务。
有人说大模型嘛,简单,给我卡就行,等到老板真给你买来了1000张卡你就知道有多难了,老板说,小王,卡买来了,三个月给我搞出来。
然后你发现,就算有人把正确的代码,数据,参数全告诉你,你也就够完整跑一次把它训练出来,万一中间服务器停电一次,完蛋交不了活儿了。
更别提你要自己写模型代码,调试,想办法评估模型,根据结果反馈调整实验方向,时间和资源完全不够!
大模型的训练有三大难点,1.消耗计算资源巨大。2.对数据的数量和数据的质量要求极高。3.很难用技术指标进行评估他的好坏。
大家在传统的DL时代热衷于对网络架构进行屎上雕花,喜欢排列组合和魔改,手动去做一些NAS(automl)的事情,然后到了大模型时代发现这个路子玩不转了。
以前一个实验,单卡V100上,顶多半天跑完。炼丹工程师在8个V100上同时试8个配方,然后炼制好丹咂摸咂摸味道,尝尝淡了还是咸了,再决定下一步配方调整的方向。
到了大模型时代,发现这个“直觉-魔改-实验-不work-改work”的路子根本行不通。
首先,做实验需要几百个A100 80GB,然后需要准备10TB数据,还得是好好清洗得到干净数据集的情况下,这亮点决定了做实验很慢,
另外,很关键的是,你很难想出一个metric去评价他的好坏!这就像捂着鼻子眼睛火柴炒菜,做成啥样不知道,两眼一黑。
以上三大难点,这决定了你的实验做的又慢又不靠谱,又费劲又不确定。
并且当一个事情的复杂度变高,试错成本变得奇高的时候,就脱离了手动炼丹可以掌控的程度了,进一步向大规模工业化炼丹发展。
我们看看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(检查点存储问题、损失函数问题等)、训练不稳定问题再次发生。所以,即使是有丰富经验、充足的数据集和庞大硬件资源,训练大模型依然是困难重重的。
就算是openAI在训练gpt4的时候也被极其困扰,他们用了一些meta learning的方式,用一些小模型的表现来预测更大的规模的表现,
虽然挺直观的,但这确实是没办法的办法。
为什么openAI在gpt一条路上走到黑,厚积薄发两年才给大家启了智,那都是实验喂出来的。
另外,在数据方面,中文有特有的难题,由于中文互联网众所周知的原因,导致中文优秀语料极其稀少,也有说这也是一种甩锅的说法,真相可能是技术差一点,openAI用公开爬去的中文数据也能搞好。
现状就算是国内厂商找数据上买了很多公开渠道难以爬取的数据,也远远被openAI甩开了一个身位。
大模型时代最宝贵的算法人才,就是这些拿钱和时间砸出来的实践经验,能总结一套训练方法论的人才,有实际经验跑过几百个实验的老师傅,普通人完全没条件没资源。相比设备钱,时间钱,人才的成本反而可以忽略不计了。
进NLP群—>加入NLP交流群
微信扫码关注该文公众号作者