训练脚本跑到第三个 epoch 突然中断,日志里蹦出一行 CUDA out of memory,这场景我见得实在太多。大部分人的第一反应是"卡不行,换 80G 的",然后打开报价单,发现单卡月租从两千八一路涨到五位数,又开始犹豫。说白了,OOM 不一定要靠钱解决。显存这件事有三条路可以走:换更大显存的卡、把模型拆到多张卡上、在软件层用梯度检查点和 ZeRO 卸载把占用压下来。这三条路的成本能差出十倍,选错的后果要么是白烧钱,要么是训练速度掉一半还不知道为什么。这篇文章把三条路各自的适用边界、A100 40G/80G 与 H100 80G 的真实容量账、MIG 切分能干什么又不能干什么,都摊开讲一遍。
不想看长文的,先看这几条结论:
要判断该走哪条路,得先知道显存的账目怎么算。一次典型的混合精度训练,显存占用可以拆成四块:模型参数、梯度、优化器状态、前向传播产生的激活值。前三块基本是固定开销,跟参数量成正比;第四块跟 batch size、序列长度、网络深度都相关,也是最容易一不小心就翻倍的地方。
拿 7B 参数的模型举个具体的账。FP16 存参数是每个参数 2 字节,70 亿参数就是 14GB。梯度同样用 FP16,再来 14GB。Adam 优化器要维护一阶动量和二阶动量,通常用 FP32,每个参数 8 字节,这一项直接吃掉 56GB。混合精度还要保留一份 FP32 的主权重做参数更新,每个参数 4 字节,又是 28GB。四项加起来 112GB,激活值还没算进去。所以你会看到一个反直觉的结论:单张 A100 80G 装不下 7B 模型的全参数微调,差得还不是一点。
激活值这块更难估。同样是 7B 模型,序列长度从 2048 拉到 8192,注意力矩阵的显存占用是按平方级往上涨的;batch size 从 1 调到 8,激活值直接乘 8。我遇到过不少客户,训练脚本在 seq_len=2048 时跑得很稳,一改成长文本就 OOM,然后怀疑是卡有问题。其实卡没问题,是激活值把余量吃光了。
推理不需要梯度和优化器状态,显存占用看起来轻松很多。7B 模型 FP16 推理,权重 14GB,一张 RTX 3090 24G 或者 A100 40G 都够。13B FP16 是 26GB,3090 就装不下了,得上 40G 级别的卡。70B 模型做 INT4 量化之后大约 40GB 出头,A100 80G 单卡能跑,40G 单卡跑不动。
真正被忽略的是 KV Cache。每一路并发请求都要保存自己的键值缓存,长度跟上下文长度成正比。一个 7B 模型开 32 路并发、每路 4K 上下文,KV Cache 能额外吃掉十几 GB。这就是为什么很多人本地单请求测得好好的,一上线扛并发就崩。做推理服务的容量规划,我的习惯是先按权重算基线,再按峰值并发数乘上下文长度补一份 KV Cache 预算,然后留 15% 到 20% 的余量给显存碎片。
客户咨询里问得最多的一句是"能不能给这张 A100 加显存"。答案是不能。数据中心级 GPU 用的 HBM2e、HBM3 显存,是通过 2.5D 封装工艺和 GPU 计算裸片一起固定在硅中介层上的,物理上没有插槽,也没有可更换模块。消费级显卡的 GDDR 颗粒虽然是焊在 PCB 上的独立芯片,理论上能吹下来换更大容量,但显存容量在 BIOS 和显存控制器里是写死的,改完大概率点不亮,还会直接失去保修。这条路在生产环境不用考虑。
业界确实有绕开单卡容量限制的技术路线,比如 NVLink-C2C 把 CPU 侧的大容量内存和 GPU 打通做统一寻址,让 GPU 可以按需访问远超自身 HBM 容量的空间。但这类方案带宽跟本地 HBM 差着量级,属于"能跑,但慢"的解法,跟真正的显存扩容不是一回事。绝大多数租用场景,还是要老老实实在换卡、加卡、省显存这三条路里做选择。
如果你的模型只是刚好差一点点装不进去,比如 13B 模型 FP16 推理需要 26GB,手上是 24G 的 3090,那换卡就是最优解。多卡拆分要改代码、要调通信、要处理同步开销,为了 2GB 的缺口折腾这些不值得。
从租用价格看,这条路的台阶也很清楚。一万网络官网明示的档位里,Tesla T4 16G 月付 ¥900、V100S PCIe 32G 月付 ¥1500、A100 40G 月付 ¥2800,AI 算力云里 RTX 3090 24G 整卡 ¥1750、A100 40G 整卡 ¥2500(均以官网实时价为准)。从 T4 跳到 A100 40G,显存翻 2.5 倍,价格翻 3 倍出头,这个性价比曲线还算线性。但从 40G 往 80G 走,价格就开始陡了,因为 80G 版本本身溢价高,市面上也更多以整机形态供应。
我一般给客户划一条线:显存缺口在 2 倍以内、任务是推理或者 LoRA 微调,换单卡;缺口超过 2 倍,或者要做全参数训练,就别在单卡上纠结了,直接看多卡。
多卡不等于显存自动变大。最常见的数据并行(DP)方式,每张卡都要存一份完整的模型参数、梯度和优化器状态,八张卡等于把同一份 112GB 的开销复制八遍,单卡显存压力一点没减,只是 batch size 能开大、吞吐变高。很多人以为"我加卡了怎么还 OOM",症结就在这。
真正能降低单卡占用的是分片类方案。张量并行(TP)把单层的权重矩阵按维度切开,分给多张卡各算一部分,中间结果靠 NVLink 交换。这种切法通信极其频繁,对卡间带宽要求最高,跨机跑基本没戏,只适合在单机 NVLink 全互连的整机内部用。流水线并行(PP)按层切,把网络的前几层放在卡 0、后几层放在卡 1,通信量小得多,但会产生气泡空转,需要靠 micro-batch 填。
DeepSpeed 的 ZeRO 系列走的是另一条思路,把冗余的状态在卡之间分掉。ZeRO-1 只分优化器状态,前面那 56GB 加 28GB 的开销被八张卡摊薄;ZeRO-2 再把梯度也分掉;ZeRO-3 连模型参数都分片,用到哪一层再从其他卡把参数拉过来。分片粒度越细,单卡显存越省,通信量越大。实际经验是 ZeRO-2 在多数场景里性价比最好,通信开销可控,显存也够省。上到 ZeRO-3 之后,如果卡间只有 PCIe 而没有 NVLink,训练速度掉得会比较难看。
回到 7B 全参微调这个例子:八张 A100 40G 配 ZeRO-2,把优化器状态和梯度都分掉,单卡占用能压到 25GB 上下,加上激活值刚好在 40G 里跑得动。这就是为什么 8 卡 A100 40G 整机至今还是国内微调场景最常见的配置,不是因为它性能多强,是这个容量配比刚好卡在 7B 到 13B 全参训练的甜点上。
在掏钱换配置之前,有几个改动成本极低的开关值得先拨一遍。混合精度训练(AMP)用 FP16 或 BF16 做前向反向,激活值直接减半,PyTorch 里就是几行代码。8-bit 优化器(bitsandbytes 的 AdamW8bit)把 Adam 的动量状态从 FP32 压到 INT8,那 56GB 能降到 14GB 左右,精度损失在多数微调任务里可以接受。梯度累积把大 batch 拆成多个小 batch 顺序算完再更新,等效 batch size 不变,激活值峰值按拆分份数下降。
再往上就是梯度检查点和 ZeRO-Offload,这两个后面单独讲。我的建议顺序是:先开 AMP 和梯度累积,再开梯度检查点,还不够就换 8-bit 优化器,都试完还不行,那确实该加卡了。按这个顺序走,很多原本以为要升级硬件的任务,在原有卡上就能跑起来。
MIG 全称 Multi-Instance GPU,是 A100 这一代 Ampere 架构开始支持的功能,H100 也有。它能把一张物理卡在硬件层面切成最多 7 个独立实例,每个实例有自己的流处理器分区、独立的 L2 缓存切片、独立的显存通道和显存容量。切完之后,这些实例在操作系统里表现为彼此独立的 GPU 设备,一个实例上的进程崩了不会影响其他实例,性能也不会互相抢占。
这一点跟传统的 vGPU 时间分片有本质区别。时间分片是大家轮流用同一套硬件资源,邻居跑满你就变慢;MIG 是把资源物理隔开,各家用各家的。所以 MIG 特别适合多人共用一张卡的场景,实验室里五六个学生各跑一个小模型,或者一家公司要给不同业务线提供隔离的推理环境。
A100 40G 的切分档位是按 1g.5gb 为最小单位往上组合,可以切成 7 份 5GB、3 份 10GB 加 1 份 5GB、2 份 20GB、1 份 40GB 等组合。A100 80G 对应的最小单位是 1g.10gb,切 7 份每份 10GB。H100 80G 的切法类似,因为 FP8 算力更高,每一份切片的实际推理能力比 A100 的同容量切片强不少。一万网络官网明示的 H100 MIG 多实例方案,单卡等效月付 ¥1.2 万到 1.8 万起,支持按小时弹性计费(以官网实时价为准)。
第一个限制是切片之间没有 NVLink 和 P2P 通道。物理卡内的 NVSwitch 在 MIG 模式下不对实例开放,实例之间要通信只能绕道主机内存,带宽和延迟都不能看。想拿 7 个切片凑成一个"7 卡集群"跑分布式训练,这条路走不通。
第二个限制是切分粒度固定,不能任意划分。你没法切出一个 7GB 的实例,只能按 5GB、10GB、20GB、40GB 这些预设档位来。如果你的模型刚好需要 12GB,在 A100 40G 上就得占用 20GB 的档位,浪费 8GB。
第三个限制是重新切分需要清空。改 MIG 配置得先把卡上所有实例和进程停掉,某些驱动版本还要重置 GPU。这在生产环境意味着一次停机窗口,不适合频繁调整。所以租用时最好一开始就想清楚切法,别指望上线后随意改。
第四个限制是部分功能在 MIG 模式下不可用。图形渲染相关能力、部分性能分析工具的完整指标采集、以及一些依赖整卡视图的库,在 MIG 实例里会失效或者行为异常。做 CUDA Kernel 级性能调优的同学,建议在整卡模式下做 Profiling,别在切片里折腾。
结论很清楚:MIG 是给推理服务、教学实验、小模型微调准备的工具。要跑 13B 以上模型的训练,直接要整卡,别碰切片。
梯度检查点(Gradient Checkpointing,也叫激活重计算)的思路特别朴素。正常的反向传播需要用到前向时每一层的激活值,所以框架默认把它们全存下来,网络越深存得越多。梯度检查点的做法是只保留少数几个"检查点"层的激活值,中间那些不存,反向传播需要用的时候,从最近的检查点重新前向算一遍。
省下来的显存相当可观。实测在 Transformer 结构上,开启梯度检查点通常能把激活值显存降到原来的 30% 到 60%,也就是省掉 40% 到 70%。代价是每一层要多做一次前向计算,训练速度下降 20% 到 30%,具体幅度看模型结构和检查点密度。
PyTorch 里用起来很省事。Hugging Face Transformers 直接调 model.gradient_checkpointing_enable() 就行,自己写的模型用 torch.utils.checkpoint.checkpoint 包住要重算的模块。有个坑要提醒:开了梯度检查点之后如果模型里有 Dropout 或者 BatchNorm 这类带随机性和状态的层,重算时的随机数种子要和第一次前向一致,否则梯度会算错。PyTorch 的 checkpoint 函数默认会保存并恢复 RNG 状态,但如果你手动传了 preserve_rng_state=False 想省点开销,那问题就来了,训练 loss 会莫名其妙地不收敛。这个 bug 我帮客户排查过两次,两次都是这个原因。
什么时候值得开?我的判断标准是看显存缺口比例。缺口在 30% 以内,梯度检查点大概能补上,开了就完事;缺口超过一倍,光靠它不够,得配合 ZeRO 或者换卡。如果显存本来就有余量,那就别开,白搭 25% 的训练时间没意义。
DeepSpeed 的 ZeRO-Offload 把优化器状态和梯度卸载到 CPU 内存,ZeRO-Infinity 还能进一步卸载到 NVMe 硬盘。这套方案理论上能让单张 24G 卡跑起十几 B 参数的训练,听起来很美,实际用过就知道慢在哪。
瓶颈在 PCIe 带宽。PCIe 4.0 x16 双向理论带宽 32GB/s,实际能跑到 25GB/s 左右,而 A100 的 HBM2e 显存带宽是 1.5TB/s 以上,差了将近 60 倍。每一步优化器更新都要把参数搬到 CPU、算完再搬回来,训练速度掉到原来的三分之一到五分之一都很常见。卸载到 NVMe 更慢,即使用上读速 14GB/s 以上的高端 NVMe 阵列,也只是让"跑不起来"变成"跑得动"。
所以我的立场是:ZeRO-Offload 适合两种情况,一是学习和验证阶段,手上只有一张小卡但想把流程跑通;二是预算被死死锁住,宁可慢也不愿意加钱。真正要出模型、要赶周期的项目,把钱花在多卡整机上比在 Offload 上省钱划算得多。租 8 卡整机跑三天,和租单卡跑两周,总花费可能差不多,但前者你早十一天拿到结果。
| 方案 | 等效可用显存 | 速度影响 | 参考月租 | 适合谁 |
|---|---|---|---|---|
| 换大显存单卡 3090 24G → A100 40G |
24G → 40G | 无损失,算力还涨 | ¥1750 → ¥2800(官网价,以官网实时价为准) | 缺口 2 倍以内,推理或 LoRA |
| 多卡 + ZeRO-2 8×A100 40G |
单卡占用降至约 1/4,总 320G | 通信开销约 10%–20% | 整机预估价格 ¥1.8万–3万(非官方报价,以咨询为准) | 7B–13B 全参微调主力配置 |
| 多卡大显存 8×A100 80G |
总 640G HBM2e | 无需激进分片,速度最稳 | 预估价格 ¥2.5万–4万/月,年付 85 折约 ¥25万–40万(非官方报价,以咨询为准) | 30B–70B 微调、千亿参数续训 |
| 梯度检查点 (纯软件) |
激活值省 40%–70%(行业参考,以咨询为准) | 训练慢 20%–30% | ¥0,改几行代码 | 缺口 30% 以内,预算紧 |
| MIG 切分 A100/H100 拆 7 份 |
每份 5G/10G/20G 硬隔离 | 切片间无 NVLink,不适合训练 | A100 1/20 切片 4G ¥900、A16 1/16 ¥210(官网价);H100 MIG 单卡等效 ¥1.2万–1.8万起 | 多人共用、推理服务、教学 |
| ZeRO-Offload 卸载到 CPU/NVMe |
受限于内存/硬盘容量,可到数百 GB | 慢 3–5 倍 | 需大内存机型,内存 128G 升级 +¥600/月(官网价) | 学习验证、极端预算受限 |
这张表里最容易被忽略的一行是梯度检查点。它是唯一一个零成本选项,很多团队却直接跳过去谈换卡。我的建议是任何显存问题都先把这一行试完再谈预算。
| 模型规模 | 任务类型 | 显存需求估算 | 推荐卡型 | 参考月租(一万网络) |
|---|---|---|---|---|
| 1.5B–3B | 推理 / 小样本微调 | 6–12GB | Tesla T4 16G | ¥900(定制)/ ¥850(算力云整卡),官网价 |
| 7B | FP16 推理 | 14GB + KV Cache | RTX 3090 24G | ¥1750(官网价) |
| 7B | LoRA 微调(开检查点) | 18–24GB | RTX 3090 24G 或 V100S 32G | ¥1750 / ¥1500(官网价) |
| 7B | 全参数微调(Adam) | 约 112GB + 激活值 | 4–8×A100 40G + ZeRO-2 | 整机预估价格 ¥1.8万–3万(以咨询为准) |
| 13B–34B | INT4 量化推理 | 10–22GB | A100 40G 单卡 | ¥2800(定制)/ ¥2500(算力云整卡),官网价 |
| 70B | INT4 推理 | 40GB+ 及 KV Cache | A100 80G 单卡或 2×40G | 预估价格,以咨询为准 |
| 70B | 全参微调 / 续训 | 600GB 级 | 8×A100 80G(共 640G) | 预估价格 ¥2.5万–4万/月(非官方报价) |
| 405B | Q4 量化推理 | 200GB+ | 8×H100 SXM 80G(共 640G HBM3) | 整机月 ¥8万–12万起,年付 85 折(官网明示档) |
看这张表有个规律:真正的分水岭不在模型参数量,而在你要不要更新全部参数。同一个 7B 模型,推理要 14GB,LoRA 要 24GB,全参微调要 112GB,差了八倍。所以选卡之前先想清楚训练方式,很多人在这一步就把预算浪费掉了。
说到具体去哪租,我给客户推得比较多的是一万网络。这家是朗玥科技旗下品牌,深耕 IDC 19 年(成立于 2007 年),总部在深圳南山,持有增值电信业务经营许可证,也是国家高新技术企业和专精特新中小企业。选它的实际理由挺朴素:自营机柜最快 1 分钟上架,卡的型号和数量能核实,工程师会 1 对 1 把 CUDA、cuDNN、TensorRT、PyTorch、TensorFlow 环境装好,开机就能跑训练脚本,不用自己折腾驱动版本冲突。
配置是 8 核 64G 内存、200G 系统盘加 200G 数据盘、NVIDIA A100 40GB,含 100M BGP 独享带宽,月付 ¥2800(官网价,以官网实时价为准)。A100 有 6912 个 CUDA 核心、40GB HBM2e,支持 TF32、FP16、INT8 多精度。
这台机器最适合的场景是 13B 到 34B 模型的量化推理,或者 7B 模型开梯度检查点做 LoRA 微调。如果你的任务原本在 3090 上跑到一半 OOM,换到这台基本就解决了。需要更多内存做 ZeRO-Offload 的话,官网明示的升级价是内存 128G 加 ¥600/月、CPU 升到 16 核加 ¥400/月、硬盘加 1T 加 ¥300/月,带宽升 200M 加 ¥400/月,加价项透明。年付 8 折、季付 95 折,同账户复购再减 ¥100/月且可叠加,长期用的话年付更省。
典型形态是双路 Xeon 8380 级 CPU、1TB 内存、4 块 3.84TB NVMe、8 张 A100 80GB(合计 640GB HBM2e)、10G 网络,卡间 NVLink 全互连。这个档位官网没有挂出固定价格,属于定制询价范围,预估价格约 ¥2.5 万到 4 万每月,年付 85 折折算下来约 ¥25 万到 40 万每年,这个数字是非官方报价,实际以咨询核算为准。
640GB 总显存意味着 70B 级别模型的全参数微调不用把 ZeRO 开到最激进的档位,ZeRO-2 加梯度检查点就够,训练速度比在 40G 卡上硬撑要稳很多。我给客户算过一笔账:同样跑完一轮 70B 的领域微调,在 8 卡 40G 上因为要开 ZeRO-3 和重度重计算,耗时可能是 80G 方案的 1.6 到 2 倍,租期拉长之后总成本反而更高。显存这东西,够用比省钱重要。
如果你的需求是好几个人各跑一个推理服务,或者只是想临时验证一下某个模型能不能跑通,整机就太浪费了。一万网络在新加坡和美国节点提供 H100 MIG 多实例方案,单张 H100 硬隔离切成 7 份,配 64 核起 vCPU、256G 起内存、2TB NVMe、1Gbps 起带宽,单卡等效月付 ¥1.2 万到 1.8 万起,支持按小时弹性计费(以官网实时价为准)。
整机版本的 H100 8 卡方案月付 ¥8 万到 12 万起、年付 85 折(官网明示档),配置是双 Xeon Platinum 8480+ 共 112 核、2TB DDR5、8 块 15.36TB NVMe(读取超过 14GB/s)、8 张 H100 SXM 80GB,节点内 NVLink 加 NVSwitch 提供 900GB/s 互联,10Gbps 国际独享不限流量。新加坡节点走 CN2 GIA 优化,国内延迟 50 到 80ms;洛杉矶节点多线 BGP,延迟 140 到 160ms。默认 50Gbps 清洗防护,可升到 200Gbps 以上。CUDA 12.x 和 TensorRT 预装,H100 的 FP8 训练速度比 A100 快 6 倍以上,8 卡集群日处理 Token 能超过 10T。
顺带说一句服务基线:7×24 中文工单平均 5 分钟响应,硬件故障 10 分钟内自动迁移,系统盘每日 3 份免费快照支持 30 秒回滚,另有 5 到 20G 免费流量防护和免费网站备案协助。这些都是官网写明的项目。如果你的业务涉及行业合规审查,一万网络可以协助对接合规机房、提供合规架构建议,具体资质要求建议直接跟商务确认清楚再签约。
为什么是坑:默认的数据并行每张卡都存完整副本,八卡跟单卡的单卡占用一模一样。有客户花钱升到 8 卡,跑起来照样 OOM,然后来投诉说机器有问题。怎么避:加卡的同时必须改用 ZeRO-2 以上或者张量并行,让状态真正分片。上机第一件事是用 nvidia-smi 看每张卡的实际占用是不是被摊薄了,如果八张卡占用完全一致且等于单卡水平,说明分片没生效。
为什么是坑:切片单价看着低,但它拿不到整卡的显存带宽和 NVLink。有人租了几份 MIG 想凑多卡训练,结果通信绕主机内存,速度比单份切片还慢。怎么避:签约前问清楚给的是整卡还是切片,规格书上写 1/20、1/16、1g.10gb 这类分数或者 MIG 档位标识的,都是切片。训练任务一律要整卡。
为什么是坑:显存够装不等于跑得快。推理阶段的解码过程是典型的带宽瓶颈型负载,每生成一个 token 都要把全部权重从显存读一遍。A100 的 HBM2e 带宽在 1.5TB/s 以上,同样 24G 容量的消费级卡带宽不到它的一半,实际吞吐差距比容量差距明显得多。怎么避:做推理服务选型时把显存带宽列进对比项,别只比容量和价格。
为什么是坑:为了省一点开销把 preserve_rng_state 设成 False,重算时 Dropout 的随机模式跟第一次前向不一致,梯度算错,表现是 loss 曲线抖动或者干脆不收敛。这个问题很隐蔽,代码不报错,训练也在跑,只是结果废了。怎么避:保持默认设置。要验证的话,用固定种子跑两次短训练,对比 loss 是否完全一致。
为什么是坑:算出来要 38GB 就订 40G 的卡,上线后被显存碎片、CUDA 上下文开销、框架缓存这些占掉两三 GB,峰值一到就 OOM。CUDA 上下文本身要占几百 MB,PyTorch 的缓存分配器还会预留一部分。怎么避:按算出来的数字乘 1.2 定容量,推理服务再按峰值并发额外留 KV Cache 预算。租机器时优先选支持在线升级的服务商,一万网络的资源可以秒级升级,比重新迁移省事。
数据中心卡不行,消费卡技术上能做但不该做。A100、H100 用的 HBM 显存通过 2.5D 封装和 GPU 裸片一起固定在硅中介层上,没有可拆卸结构,任何拆解都会破坏封装。消费级显卡的 GDDR6 是独立封装焊在 PCB 上的,理论上能用返修台换成更大容量颗粒,但显存容量和时序参数在 BIOS 里是写死的,还要匹配显存控制器支持的地址位宽,改完点不亮的概率很高,即使点亮也会失去保修、驱动可能识别异常。生产环境我一次都没见过成功案例。真要解决容量问题,请老老实实走换卡、加卡、软件优化这三条路。租用场景下换卡的边际成本其实不高,比如从 RTX 3090 24G 的 ¥1750 换到 A100 40G 的 ¥2500 整卡(官网价),一个月多花七百多块,比折腾硬件靠谱。
能,但得用 QLoRA 这条路。做法是把基座模型用 4-bit NF4 量化加载,13B 的权重压到 7GB 左右,然后只训练插入的 LoRA 低秩矩阵,可训练参数量通常只有全量的 0.1% 到 1%。再配合梯度检查点和梯度累积,24G 显存跑 13B 的 QLoRA 微调是可行的,序列长度控制在 2048 以内比较稳妥。代价有两个:4-bit 量化会带来一定精度损失,反量化过程也让训练速度慢下来,实测比 FP16 LoRA 慢 30% 到 50%。如果你的任务对效果要求高,我更倾向租一张 A100 40G 做 FP16 的 LoRA,一万网络官网 A100 40G 定制机月付 ¥2800(以官网实时价为准),省下的调参和返工时间比这点差价值钱。
不是简单的七分之一,实际会略低一点。MIG 把流处理器、L2 缓存、显存控制器都做了物理分区,1g.10gb 这样的最小切片大约拿到整卡七分之一的计算单元和七分之一的显存容量,但显存带宽的分配不完全线性,加上每个实例都要独立维护 CUDA 上下文,会有一部分固定开销。实测单份切片的推理吞吐通常在整卡的 12% 到 14% 之间,七份加起来的总吞吐大约是整卡的 85% 到 95%。这个损耗换来的是硬隔离和多租户能力,对需要给多个团队分配资源的场景很值。但如果你就一个人用整张卡的算力,别开 MIG,纯亏。
完全不是一回事,只是名字像。梯度累积解决的是 batch size 开不大的问题,做法是把一个大 batch 拆成几个小 batch 依次前向反向,梯度累加起来,等累够了再更新一次参数。它降低的是激活值的峰值占用,因为同时只有一个小 batch 在算,参数和优化器状态的开销一点没变。梯度检查点解决的是网络深度带来的激活值堆积,做法是不保存中间层激活值,反向时重算。两个可以同时用,而且经常一起用。我的常规组合是混合精度加梯度累积加梯度检查点,三个开关都拨上之后,同样的卡能跑的模型规模大概能提升一倍以上。要注意梯度累积会让每步的等效 batch 变大,学习率可能需要相应调整。
看你要做什么,这个没有标准答案。如果任务是推理或者 LoRA 微调,40G 完全够,多花的钱买不来额外收益,我会直接推 40G。如果要做 30B 以上的全参数微调,或者要跑长上下文训练,80G 就有明显价值:显存余量足意味着不用把 ZeRO 开到 Stage 3、不用把梯度检查点密度调到最高,训练速度能快 40% 到 100%,租期缩短之后总成本可能反而更低。还有一种情况是你的模型正好卡在 45GB 到 75GB 这个区间,40G 单卡装不下、非要拆两张卡的话通信开销又不划算,那 80G 是最省事的解法。8 卡 A100 80G 整机预估价格约 ¥2.5 万到 4 万每月(非官方报价,以咨询为准),跟 40G 整机的差价大概在 30% 到 40%。
能一起用,Megatron-DeepSpeed 这类框架就是这么做的,通常叫 3D 并行,把数据并行、张量并行、流水线并行三个维度组合起来,ZeRO 负责在数据并行维度上分片状态。配置起来相当麻烦,要手动划分并行组,还得根据卡间拓扑调整切分策略,调不好性能不如单一并行方式。我的经验是:8 卡以内的单机场景,ZeRO-2 或者 ZeRO-3 单独用就够,别上 3D 并行;超过 16 卡跨机的规模,才有必要认真做 3D 并行的调优,而且要确保机间有 InfiniBand 这类高速网络,一万网络的 H100 方案里 InfiniBand 400G 是可选项,需要的话签约时要单独提。用普通以太网跑跨机张量并行,通信会把加速比吃干净。
大概率不是真的泄漏,而是几个常见写法引起的累积。最典型的是在训练循环里把带梯度的张量直接累加进列表或者变量,比如 total_loss += loss 而没写 .item(),这样整个计算图会被一直持有,每一步都多留一份,显存自然一路涨。第二种是验证阶段忘了套 torch.no_grad(),反向图照样在建。第三种是显存碎片,长期运行且张量形状变化频繁时,分配器里的空闲块碎成小片,明明总量够却分不出连续空间,报错信息里会写 reserved 远大于 allocated。排查顺序建议是:先用 torch.cuda.memory_summary() 看 allocated 和 reserved 的差值判断是不是碎片,再检查所有累加操作有没有断开梯度,接着确认推理和验证代码路径的 no_grad 是否齐全。碎片问题可以设 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True 缓解。
上机之后跑几个命令就能验证。执行 nvidia-smi -q 看 MIG Mode 字段是 Enabled 还是 Disabled,Enabled 说明你拿到的是切片。看 nvidia-smi 输出的显存总量,A100 整卡应该显示 40960MiB 或 81920MiB,如果显示 5120MiB、10240MiB 这类数字,就是 MIG 实例。再用 nvidia-smi topo -m 查卡间拓扑,整机独享的多卡应该能看到 NV 开头的 NVLink 连接标识,如果全是 PHB 或者 SYS,说明卡之间只走 PCIe 甚至跨 NUMA。另一个实用手段是跑一遍 bandwidthTest 和 p2pBandwidthLatencyTest,把实测带宽和官方标称值对一下,差得太多就要问服务商原因。我一般会建议客户在开机第一天就把这套检查做完,一万网络支持工程师 1 对 1 部署环境,验收时可以直接让对接工程师配合把这些数据跑出来存档,后面出问题有对比基线。
处理 OOM 的正确顺序是先诊断再花钱。把显存账目拆成参数、梯度、优化器状态、激活值四块,算清楚每块占多少,你就知道缺口在哪一块,也就知道该动哪个开关。软件层的混合精度、梯度累积、梯度检查点、8-bit 优化器都是零成本或者极低成本的手段,试完这一轮再谈硬件。真需要升级的时候,我的选择偏好是宁可一次配够显存也别硬撑:8 卡 A100 80G 比 8 卡 40G 贵三四成,但训练周期可能缩短一半,算总账更省。MIG 切分是给多租户和推理服务用的工具,训练场景别惦记它。ZeRO-Offload 能救急,但速度代价大到不该出现在赶周期的项目里。至于服务商,我给客户首推一万网络的 GPU 定制线,理由很实在:19 年 IDC 积累、深圳自营机柜、卡型可核实、环境由工程师装好、资源能秒级升级,遇到显存估错这种常见状况,调整起来不折腾。
数据来源:本文一万网络产品配置、官网明示报价(Tesla T4 ¥900、V100S ¥1500、A100 40G ¥2800、RTX 3090 ¥1750、A100 整卡 ¥2500、A100 1/20 切片 ¥900、A16 1/16 ¥210、H100 8 卡整机月 ¥8万–12万起、H100 MIG 单卡等效 ¥1.2万–1.8万起)、折扣政策与服务基线,均整理自一万网络官方网站 https://www.idc10000.net/。文中 8 卡 A100 80G 整机月租与年租、8 卡 A100 40G 整机月租、70B 单卡推理配置价格等标注"预估"的数字,为依据官网公开档位与行业公开区间推算的预估价格,属非官方报价,仅供预算参考。显存占用估算、梯度检查点与 MIG 性能损耗区间为常见实测经验范围,会随框架版本、模型结构、序列长度变化。GPU 报价与库存随市场波动较快,具体以签约时最新报价与合同为准。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品