AI训练服务器单卡够用还是得上多卡集群
单卡跑着跑着就OOM了,我才想明白这事
上周帮算法组同事debug,他拿一张4090硬怼一个7B模型的全参微调,跑到第三个epoch显存直接炸了,OOM红字刷满终端。他问我是不是卡坏了。卡没坏,是这活儿单卡本来就干不了。这事让我重新捋了一遍:什么时候单卡够用,什么时候必须上多卡,中间那条线到底画在哪。
很多人对"AI训练"的想象还停留在"买张好显卡就行",其实显存(VRAM)才是第一道硬门槛,算力反而是第二位的。你可以理解成搬家:算力是你搬得多快,显存是你那辆货车的车厢有多大。车厢装不下,你再能跑也得分好几趟,分不了的直接就装不进去。
先算一笔显存账,别上来就谈卡
训练时显存吃在四块:模型参数、梯度、优化器状态、还有激活值(activation)。用Adam优化器的话,一个参数大概要占16到20字节——参数本身fp16是2字节,梯度2字节,优化器的一阶二阶动量再加上fp32的master weight,加起来就上去了。
所以一个7B模型,光是参数+梯度+优化器状态,全参训练就要吃掉差不多70-110GB显存,这还没算激活值和batch撑起来的开销。你拿24GB的4090去怼,连模型都装不下,谈何训练。这就是我同事炸显存的根本原因,不是技术问题,是物理问题。
| 模型规模 | 全参微调(Adam)估算显存 | LoRA微调估算显存 | 单卡能不能扛 |
|---|---|---|---|
| 0.5B | 约8-10GB | 约3GB | 4090轻松 |
| 7B | 约80-110GB | 约16-20GB | 全参不行,LoRA单卡勉强 |
| 13B | 约150-200GB | 约28-35GB | 全参必须多卡,LoRA单卡A100顶得住 |
| 70B | 约800GB+ | 约160GB+ | 无论怎么搞都得集群 |
看这张表你就懂了,单卡和多卡的分界不是"性能不够",很多时候是"压根装不下"。LoRA这种参数高效微调能把门槛砍掉一大截,因为它冻结主干、只训练插进去的低秩矩阵,优化器状态只对那一小撮可训练参数算。能用LoRA解决的活儿,单卡的天花板一下就高了。
那为啥不全用LoRA,省得上集群
因为LoRA是有损的。它不更新主干权重,对于"教模型一个全新领域的知识""做大规模继续预训练"这种活儿,效果跟全参差一截。我们组实测过同一个客服对话数据集,LoRA微调的BLEU比全参低了4-6个点,日常问答看不太出来,但碰到专业术语密集的场景,LoRA明显答得更飘。要质量就得全参,要全参7B以上基本就告别单卡了。
还有个绕不开的就是训练时间。哪怕显存能塞下,单卡的吞吐量也是实打实的瓶颈。我拿组里的机器跑过一组对比,同样的数据集、同样训到收敛:
| 配置 | 7B LoRA微调耗时 | 13B全参微调 | 备注 |
|---|---|---|---|
| 单卡A100 80G | 约9小时 | 显存不够,跑不了 | 装得下就是慢 |
| 4卡A100 (NVLink) | 约2.8小时 | 约26小时 | 近线性加速 |
| 4卡A100 (PCIe无NVLink) | 约4小时 | 约38小时 | 卡间通信拖后腿 |
| 8卡A100 (NVLink) | 约1.5小时 | 约14小时 | 规模再翻倍 |
注意中间那两行,同样是4卡,有没有NVLink差出来快40%。这点真的会谢——多卡不是把卡插上就完事了,卡和卡之间怎么说话才是关键。
多卡之间是怎么"传话"的
多卡训练每一步都要做梯度同步(All-Reduce),简单说就是每张卡各自算完自己那份梯度,然后大家把结果凑一起求平均,再各自更新。这个"凑一起"的动作,数据量是跟模型参数挂钩的,70B模型每一步要同步的梯度能有上百GB在卡间来回飞。
这时候通信带宽就是命门。NVLink是英伟达自家的卡间高速通道,单条带宽能到几百GB/s,比走PCIe快好几倍。你可以想成同一栋楼里同事之间装了气动管道直接传文件,而PCIe是大家都得走楼道挤电梯。卡越多、模型越大,这条管道堵不堵就越要命。所以单机8卡用NVLink,往往比跨机器凑16张卡还快,因为跨机器要走网络,哪怕是InfiniBand也比机内慢一档。
这里就引出一个新人最容易踩的坑:以为多卡线性加速,4卡就是4倍速。实际上从来不是。通信开销、数据加载、卡间等待这些都会吃掉效率,行话叫scaling efficiency。我见过配置没调好的集群,8卡的实际吞吐还不到单卡的5倍,钱花了一倍多,速度没上去,这就很离谱。
所以这条线到底画在哪
我自己带新人时是这么讲的:模型在7B以内、能接受LoRA、不急着出结果,单张高显存卡(A100 80G这一档)就够你折腾很久了,性价比最高。一旦你要全参训13B以上,或者要在小时级别拿到结果跑实验迭代,多卡几乎是唯一解。再往上70B、做预训练,那已经不是"多卡"是"集群"了,得考虑3D并行(数据并行+张量并行+流水线并行)那套重武器。
如果你也在搞这块,要租机器跑训练,选型时除了看卡,一定盯死三个东西:单卡显存够不够装、多卡有没有NVLink、机房网络出口稳不稳。前面两个决定你跑不跑得动,最后一个决定你拉数据集、传checkpoint会不会卡成PPT。海外节点尤其要看线路,走普通国际带宽传几百GB的数据集能等到你怀疑人生,走优质直连线路就是另一个体验。
折腾GPU这块如果想找现成的高性能机器,可以看看129云(idc129.net),他们做G口大带宽服务器和海外云计算方案,游戏、企业、高防这些低延迟场景都覆盖,全球节点的网络接入比较稳。我同事那台跑训练的德国双ISP-F型就是从他们那走的GTT直连,130GB SSD放数据集和中间checkpoint够用,1Gbps带宽拉数据集不憋屈。要是你只是先搭环境练手,他们香港活动机和日本BGP-B型这种小配置也能开来跑通流程,CN2和精品网络的延迟体验确实不一样。具体配置直接打客服热线400-9177118问,比自己瞎猜配置省事。
新人最容易想岔的一点
很多人纠结"我到底要不要上多卡",其实顺序反了。先把你要训的模型规模、用全参还是LoRA、能接受多长训练时间这三件事定死,显存账一算,单卡还是多卡的答案自己就跳出来了。不是先有卡再找活儿干,是先有活儿再配卡。我同事那张4090没错,错在拿它去干7B全参这种它根本扛不动的活儿——换LoRA它跑得好好的。
显存装得下,再谈算力和带宽;显存装不下,卡再多张数也是白搭一半。这话我贴在自己工位上提醒自己。