“ 人工智能的核心是算力。”
01—需要多少预算?
最近在学习大模型ChatGPT、ChatGLM,研究结合企业的应用场景,解决一些业务难点、痛点,不免涉及本地化部署、微调、训练、知识库文档数据提取等等方面的问题。
同时还需要对硬件成本进行一个大致的估算:这个项目需要得用多少GPU?硬件采购的费用预算多少?
要对硬件资源成本进行估算,一方面决定于项目的技术方案:是否需要训练,还是只做微调训练,或者只做文档提取;一方面决定于硬件的选型:选哪家的GPU产品。
02—算力需求
算力需求主要分为两部分,包括训练算力和推理算力。
目前来说对训练算力需求非常高,ChatGPT的公开数据显示它的整个训练算力消耗非常大,达到了3640PF-days。
PF-days = 1 PetaFLOP/s 的效率运行一天。PetaFLOP,是衡量计算机性能的一个重要单位,1 PetaFLOP等于每秒钟进行1千万亿次的数学运算,这种速度大约是运算速度最快计算机的8倍。
换成比较好理解的说法,假如每秒计算一千万亿次,需要计算3640天。
换算成英伟达A100芯片,它单卡算力相当于0.6P的算力,理想情况下总共需要大概6000张,在考虑互联损失的情况下,需要一万张A100作为算力基础。
在A100芯片(一张A100官方售价是1万美元,而且对中国限售。英伟达销售到国内的是规避限售的相应型号减配版。)10万人民币/张的情况下,算力的硬件投资规模达到10亿人民币。
训练算力相关设备主要是英伟达的A100和H100,推理算力主要是英伟达T4卡。
有数据显示,ChatGPT在运营过程中也需要相当大的开销。
根据国盛证券报告,以ChatGPT在1月的独立访客平均数1300万计算,其对应芯片需求为3万多片A100 GPU,大概需要的算力成本为8亿美元,每天的电费成本在5万美元左右。
在实际生产场景中,芯片的运算速度也不等于先进的算力,芯片速度和算力之间还有一个软件层:“高性能GPU分布式训练框架“,
算力问题之所以成为制约人工智能的瓶颈,是因为当前大模型进入万亿参数时代,单体服务器算力有限,需要将大量服务器通过高性能网络相连,打造大规模算力集群。
高性能计算存在“木桶效应”,一旦计算、存储、网络任一环节出现瓶颈,就会导致运算速度严重下降。
以腾讯云原生来架构模型训练的结构如下(腾讯云星星海自研服务器,搭载英伟达最新代次H800 GPU,服务器之间采用3.2T超高互联带宽):
一共四层架构:最底层是算力硬件资源;上一层是高性能的计算集群,主要起到灵活调度和计算资源分配的作用;中间一层是深度学习加速,作用提升计算的利用率,最上面才是机器学习,模型服务。
之前提到的国产大模型 ChatGLM2-6B 初体验,是使用华为的AI框架昇思MindSpore训练的。据官方信息透露,最开始130B(1300亿参数)大小数据集的训练过程中,华为框架团队一同协同改进框架,一共用了三个月。
这也是为什么大模型迭代升级,一项重要的改进就是提升性能:性能提升571%,32K超长上下文,推理速度提升42%,允许商用,国产开源大模型推出了二代 ChatGLM2-6B,提升性能就是省钱。
03—有低成本的方案吗?
直接训练模型投入大,周期长,只有大厂玩家才能有实力介入。如果只是直接使用例如ChatGPT,ChatGLM这类预训练模型,进行微调,或者是知识库文档数据提取,只消耗推理算力,投入成本就要小很多。
参考海外最新研究《The Economics of Large Language Models》,可以有如下估计: 每个 token(1000 token 约等于 750 个单词)的训练成本通常约为 6N,而推理 成本约为 2N,其中 N 是 LLM (大语言模型)的参数数量。
也就是说推理成本大约相当于训练成本的三分之一。
官方资料显示,ChatGLM2-6B 模型能运行起来的最低硬件要求:建议英伟达Tesla 显卡系列,NVIDIA A100 GPU,15G显存, 一般的 3090 GPU也差不多了。单这仅仅是模型进行正常推理的算力最低要求,并没有考虑使用用户数量。
要计算一个用户向ChatGPT、ChatGLM 这类大模型提问并获得回复所需的算力,我们需要考虑以下因素:模型规模(参数数量)、输入文本长度(问题长度)、输出文本长度(回复长度)、模型的计算复杂性。
其他3个要素好理解,模型的计算复杂性是什么呢?模型计算复杂性指的是模型本身的复杂程度,它与模型维度(D)和模型层数(N)成正比。
一个问题需要消耗的算力,可以用以下公式进行粗略估算,FLOPs 浮点运算次数,用来衡量执行某个任务所需的计算量。
FLOPs ≈ L * D * N。
其中,L是用户问题的输入长度与模型回答的输出长度之和。
假设一个用户问ChatGPT一个50个字的问题,ChatGPT给出了1000字的回复。完成这样一次交互需要消耗的算力:
FLOPs ≈ L * D * N ≈ 1050 * 1280 * 96 ≈ 128,448,000
因此,当输入问题长度为50个词,输出回复长度为1000个词时,处理一个用户向ChatGPT提问并获得回复所需的算力约为128.45百万次浮点运算(FLOPs)。
还有一个细节问题:如果大模型回答不同类型的问题,只要问题长度和答案长度都一样,其消耗的算力都一样么?比如同样的问题和答案长度,写小说和做算术题这两类任务消耗的算力是否一样。
在理论上,只要输入问题长度和输出答案长度相同,处理不同类型问题所需的算力应该是相似的。
这是因为,无论问题类型如何,Transformer模型的计算复杂性主要取决于输入序列长度(L)、模型维度(D)和模型层数(N)。
不过,在实际应用中,根据问题的难度和特定上下文,某些任务可能需要更多的计算步骤来生成更准确的答案。
例如,在生成小说文本时,模型可能需要花费更多的计算资源来保持句子的连贯性、情感和文学风格。而在解决算术问题时,模型可能需要更多的计算资源来处理数学逻辑。
不过,从整体来看,两者之间的计算复杂性差异相对较小。
因此,在问题长度和答案长度相同的情况下,不同类型的任务(如写小说和解决算术问题)消耗的算力可能存在一定差异,但总体上应该相差不大。
解决了估算计算量的问题,我们来算算支持的硬件资源需要多少。
以英伟达A100 GPU 为例,每个GPU在 FP32 单精度效能(训练算力)具有19.5 TFLOPs,INT8 整数效能(推理算力)具有624TPS 的性能。假设需要在1秒内完成上面那个用户50字的问题请求(128.45 * 10^6FLOPs)。粗略估算所需的 GPU数量:
GPU = FLOPs / (624 * 10^12 FLOPs/s) ≈ 128.45 * 10^6 / (624 * 10^12)
≈ 2.058 * 10^-7
假设使用系统的用户数量为1000人,每个人的每个请求在3秒内完成,那么一小时内的请求总数量为(3600/3) * 1000 = 1.2 * 10^6 次。
理论上,这样的系统用户规模,请求频次,推理算力需要支持的 GPU 数量:
GPU ≈ 2.058 * 10^-7 * 1.2 * 10^6 = 0.25。
再考虑训练模型等中间层利用率,集群协调等算力上的消耗,假设这部分损耗20%算力,GPU 数量大约为0.387。
参考前面 A100的10万人民币的价格,大概是3.87万。
如果是国内项目落地,同时考虑 GPU 的硬件厂家的选型。目前市场上比较认可的是寒武纪,2021年发布的思元370,是训练和推理一体的产品,24TFLPOS(FP32)训练算力和256TOPS (INT8)推理算力
同时百度也在 2021 年发布昆仑芯二代产品,搭载GDDR6高性显存,支持256TOPS(INT8)算力,和V100性能差不多,可以做训练和推理。不过都在百度云服务器上部署,多用于自家产品。
同样上面的系统需求:1000用户,每个请求3秒内完成,使用寒武纪的思元370,需要的GPU数量:
GPU ≈ 0.387 * 624 / 256 ≈ 0.943 ,接近一块GPU的数量,大约三倍左右。思元370目前市场报价 1.46万。
不过实际应用中,影响算力的因素可以说复杂得多,以上分析只是建立了一个简单的计算模型。仅限于用于项目立项阶段的费用评估,可以适当增加一些中间层级的消耗权重,给方案预算留出余地。
参考资料:
https://xueqiu.com/2524803655/246572538
https://www.qbitai.com/2023/04/46615.html
https://www.stcn.com/article/detail/841412.html
https://baijiahao.baidu.com/s?id=1763233924302503556
http://www.01ur.com/?m=home&c=View&a=index&aid=581
http://kuanfans.com/product/djsb-copy/1184.html
https://sunyan.substack.com/p/the-economics-of-large-language-models