作者丨杨军@知乎
来源丨https://zhuanlan.zhihu.com/p/607680446
ChatGPT的火热带起了一股对LLM的讨论,也有很多国内的大厂在努力希望能追上这一股技术的潮流,而一个LLM模型的需要多少资源条件,我们与美的差距在哪,需要先对现实条件进行认知,但是相信我们已经在路上。最近关于大模型(这里主要指LLM,即Large Language Model)的讨论足够多了,不再对背景进行赘述,可以直接参考这里(https://www.nvidia.com/en-us/deep-learning-ai/solutions/large-language-models/),还有这里(https://en.wikipedia.org/wiki/Wikipedia:Large_language_models)的一些背景介绍。很长一段时间,我对于大模型带来的业务价值持有一种"信念上的认同,现实上的怀疑"的态度(其实我所知道的国内不少大厂里技术团队资源分配的决策者对于大模型也持有类似的态度,所以在看不到明显短期收益的情况下也显著影响到了对这个方向的投入的强度)。信念上的认同是因为我确实一直认可通过超级算力以及大规模数据的统计拟合,能够对现实世界进行更准确的刻划,进而让AI具备越来越强大的能力。现实上的怀疑是因为在自己有限的从业经历里,或直接经历或间接听到看到的,有太多用大模型来做宣传,但没有真正诉诸落地的case,再加上自己的背景还是更偏系统多一些,对于没有看到充分证真的事物,还是会多了一些怀疑。所以自己一直在关注,从事相关的工作,但很大程度上,说这是一种技术信念驱动的,并不知道何时会开花结果的心理感受也不为过。毕竟自己没有处在最刀尖峰口要为大模型建模效果负责的位置,无论模型大小,都需要相当一部分相通的AI系统底层的支持,所以也能做的比较踏实和兴奋。去年出现的ChatGPT,确实更新了自己的认识。外行看热闹,内行看门道。虽然不是纯建模出身,但是对于评估一个AI模型能力的尺度还是会有一些自己的准则。逻辑链的把握,对长程上下文的捕捉和适应,以及生成语句的通顺度,这几点在自己试验过的大量的case里都得到了验证,于是自己对于大模型这个技术方向"现实上的怀疑"也开始被打消了。我曾经对ChatGPT这类技术(技术演进其实是有草蛇飞线,而不是断裂式的,ChatGPT背后的支撑技术,其实在两三年前都已经有了端倪,从最早的word2vec甚至更早的NNLM,再到近一些的InstructionGPT,甚至RETRO,都从不同角度为这一技术族的演进提供了基础材料,所以能够越过一个高光现象背后,去探究背后技术原理的演进,对于实际行业可能会有更大的帮助,避免高估,也避免低估)实际线上serving的计算成本做过一个大略的推算,以GPT3-175B模型为例,一台DGX A100 8卡服务器可以完成serving,所以用NV开源的FasterTransformer的推理性能作为参考,以Azure的8卡A100的服务器三年包年价格为基准(预付费更划算) ,参考这个链接(https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/)里头的NDm A100 v4 series),选取batch size为128, 输入文本长度=200, 输出文本长度=200的性能数字,最终计算下来生成1000个tokent的成本是大约是0.3美分( 10000月租 / 30天 / 24小时 / 3600秒 * 20秒推理延时 / (128 batch size* 200输出文本长度) * 1000 tokens) 的样子。这个估算会有上下浮动的偏差,比如1 平均输入(200)输出(200)文本长度的分布和真实情况未必相符。2 这里选取的batch size 128实际上是对成本更有利的一种配置,因为更有利于把GPU打满,而实时互动场景往往batch size为1,对应的serving成本会更高。3 OpenAI或微软内部的推理服务的大概率不是直接基于FT来完成的,所以这里的延时更多是一个近似参考,而非真实的业务延时数字。4 真实业务场景里可能在GPT3-175B模型之外,还可能引入了一些上下游的系统模块来保证推理效果(比如干预模块)以及减少推理成本(比如cache)。但这个成本大体和之前OpenAI提供的公开数字是相近的。所以,不考虑业务型态的演化,这3美分规模的成本,如果能够被其业务上带来的收益吸纳掉,就可以将这类技术不断进行扩展,对各行各业进行改造。这算是判断大模型技术应用于真实业务里可能带来的业务收益的一个成本底线思维。如果再来看一下大模型的训练成本,通常训练LLM,一个直观的计算尺度是以达到模型预期效果所需消耗的训练token数量为计算总任务需求,结合GPU上训练过程中的token吞吐能力,来计算在限定时间内完成一个满足要求的训练过程,需要多少块GPU,进而推算出需要多少成本。为了达到满意的模型效果所需的训练token数是一个建模问题,需要交给AI模型的专家来给出合适的答案。一个比较简便的参考是以公开资料为基础,比如NVIDIA Megatron-LM团队在2021年发表的这篇文章(https://arxiv.org/pdf/2104.04473.pdf)里针对包含175B参数的GPT-3模型,在包含300 Billion tokens的训练语料上只过一个epoch的E2E的训练时间大体上可以化简为6TP/nX(实际训练语料的epoch数量是一个有些tricky的混合体,部分语料会过多个epochs,部分语料不会过完整的epoch,不过从计算吞吐的角度,并不影响这里的推导,所以不再展开,感兴趣的同学可以自行检索GPT-3的原始论文,其中T是Token数(300B),P是参数数量(175B), n是GPU数量(这里设的是使用1024张80GB显存且支持NVLink互联的A100),X是GPU在训练过程中能达到的有效计算吞吐(以这篇论文的A100所能提供的有效计算吞吐为参考,是140TFlops,严格来说,这个数字不已经不再是这个方向的SOTA,但考虑到真实大模型训练过程中,模型结构的微调变化,训练过程的调整,都可能导致硬件计算效率打折扣,所以以这个2021年的SOTA数字为参考还算合理),注意这里我给的公式里的分母是6TP,而不是文章里的8TP,是因为文章里包含了为了优化显存的full recomputation的开销,这两年行业的技术进展,对于显存优化有过一些新的工作,所以我把这部分计算开销给去除掉了。按照这个计算公式,175B的GPT模型,在300B token的训练语料上完成一个epoch的训练需要26天的时间,这不包含任何长时间训练过程中出错的调试重启开销。我们再以上面Azure售卖链接中8卡A100服务器的租赁成本为基础,一台8卡A100的月租金在比较理想(比如三年包年)的情况下,租金是1W美金,为了能够在一个月完成一次完整模型的训练,所需要消耗的成本 > 128万美元/月。如果考虑到未必能拿到理想的三年包年的租赁价(因为一次性投入过高),改为一年一租,成本会上升到 > 256万美元/月。模型训练的过程,出现意外情况总是难免的,调模型结构,尝试不同的训练策略,以及数据集的变更,再加上大规模训练过程中不可避免的硬件故障,所以不考虑研发投入,在上述计算的硬件投入的基础成本上再乘以10% 的一个额外开销不算是非常过分的数字。再考虑到为了支撑这种规模的模型训练,还需要有一支比较精干的AI系统工程团队来完成分布式训练调优,系统容错处理、算子计算调优,并且要配合模型团队随着模型结构和训练策略的变化,对训练系统实现进行必要的调整,不妨按照一年一千万的人力成本投入来核算。这样算下来,保证一年能够充分进行模型训练迭代所需要的总成本大约是扫描二维码添加小助手微信
请备注:姓名-学校/公司-研究方向(如:小张-哈工大-对话系统)即可申请加入自然语言处理/Pytorch等技术交流群