跳至正文

AI训练为什么要用那么多显卡

我最近刷到一个帖子,有人问:“为什么训练一个AI模型要烧掉几千张显卡?就不能用CPU慢慢算吗?又不是打游戏。” 这个问题问得特别好,因为我一开始也这么想。直到我自己试着跑了一个小模型,差点把电脑干废。

事情是这样的。去年我手痒,想试试训练一个简单的图像识别模型,就是那种能区分猫和狗的。我寻思,我电脑配置也不算差,i7处理器,32G内存,还有一张1660的显卡,应该够了吧?结果我打开训练脚本,刚点下运行,风扇直接起飞,那声音像直升机要起飞似的。我赶紧看一眼任务管理器,CPU占用率才20%,但显卡直接飙到100%,温度冲上85度。更离谱的是,我设定了训练100个周期,结果跑了整整一个下午,才跑了20个周期,而且模型准确率卡在50%不动了——跟瞎猜一样。

后来我查了查资料,才明白为什么AI训练非得用显卡,而且越多越好。

打个比方,你让一个小孩学习认猫。你要给他看一万张猫的照片,同时告诉他“这是猫”。CPU干活的方式,就像这个小孩一张一张翻相册,翻完一张,记住一张,再翻下一张。这当然能学会,但效率极低。而显卡(GPU)的方式,是把这个小孩变成一万个小孩,每个小孩同时看一张照片,看完之后大家把自己学到的东西汇总起来。一瞬间,一万张照片就看完了。

这就是并行计算。CPU就像个大学教授,什么都能干,但一次只能干一件事。GPU就像一万个小学生,每个人只会简单的加减法,但一万个人一起算,速度碾压大学教授。AI训练的核心操作是什么?是矩阵乘法。说白了就是一堆数字排成方阵,然后做乘法和加法。这种计算模式,天生就是给显卡设计的。显卡里面动辄几千个核心,每个核心都在干同一件简单的事——算数。CPU只有几个核心,每个核心都很聪明,但面对几百万个数字同时要算乘法的时候,CPU就懵了。

所以,训练AI本质上就是让计算机做海量、重复、简单、互不依赖的数学题。显卡就是专门干这个的。

那为什么一张不够,要几百上千张呢?因为现在的AI模型,大到离谱。就拿GPT这种大语言模型来说,参数数量上千亿。一个参数就是一个数字,存储这个数字需要4个字节(32位浮点数)。你算一下,1000亿参数,光是把参数加载到内存里,就需要400GB的空间。你电脑才32G内存,连模型都塞不下,更别提训练了。而且训练过程中,你还需要存中间的计算结果、梯度、优化器状态,这些加起来轻松翻倍。所以必须把模型拆开,分到很多张显卡上,每张显卡只负责模型的一部分,大家一边算一边互相传数据。

这就好比你不是一个人在盖一栋摩天大楼,而是一万个建筑工人同时施工,每人负责一个楼层,但楼层之间要通水管、电线,大家得互相配合。显卡之间就是通过NVLink、InfiniBand这种高速通道互相传数据的,速度比你家宽带快几百倍。如果通信慢了,显卡就得闲着等数据,那就白瞎了。

还有一个更坑的问题:显存。你训练模型的时候,不仅模型本身要占显存,训练数据也要占。比如你想让模型看一张1024×1024的高清图片,这张图片本身占不了多少,但模型要把它处理成各种特征图,这些中间结果会疯狂膨胀。一张图片跑一次前向传播,可能就吃掉几个G的显存。如果你一次只喂一张图片,那训练速度慢到你想哭。所以通常是一次喂好几十张、好几百张图片,这叫batch size。但batch size一大,显存就不够用了。这时候唯一的办法就是加显卡——每张显卡分担一部分图片,并行计算。

我后来学乖了,用了一个叫Hugging Face的平台,他们提供免费的云端GPU,但只有16G显存。我试着微调一个BERT模型(3.4亿参数),结果还没跑完一个epoch,直接报错:CUDA out of memory。那个错误提示我永生难忘——“RuntimeError: CUDA out of memory. Tried to allocate 2.00 GiB”。显存就16G,你让我分配2G都分不出来?后来才知道,模型本身占5G,优化器状态占5G,中间激活值占了8G,早就爆了。

所以那些动辄训练几百亿参数模型的公司,像OpenAI、Google、Meta,他们用的显卡集群都是几千张甚至几万张。比如Meta训练Llama 3,用了2.4万张H100显卡,每张显卡售价3万美金,光显卡成本就7亿美金。电费更不用说,一张H100功耗700瓦,2.4万张同时跑,功率相当于一个中型发电站。训练一次,电费几百万美元。这还只是训练,跑起来之后推理也要显卡。

最后说一个反直觉的事情:显卡在训练AI的时候,实际上大部分时间都在做同一件事——算矩阵乘法,而且算得特别慢。你可能会觉得,显卡跑游戏那么流畅,怎么算个数学题就慢了呢?因为游戏渲染也是并行计算,但游戏里的计算精度要求不高,用16位浮点数就够了。而AI训练通常需要32位甚至64位浮点数,精度要求高,计算速度就慢。所以显卡厂商专门给AI设计了张量核心,可以快速算低精度的矩阵乘法。比如Nvidia的H100显卡,有132个张量核心,专门用来加速AI训练,跑游戏反而一般。

所以总结一下,为什么AI训练要那么多显卡?因为模型大到一张显卡装不下,训练数据多到一张显卡算不完,计算精度高到一张显卡跑不动。就像你要搬一座山,一个人肯定不行,得叫一万人,每人一个铲子,还得配好对讲机确保大家动作一致。显卡就是那把铲子,越多越好,但前提是你得有钱买铲子,还得付电费。

现在我的电脑还在墙角吃灰,我已经放弃自己训练模型了。老老实实用别人训练好的模型,省心省力。大不了每个月花20美元买ChatGPT Plus,比买显卡划算多了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注