深度学习训练从设备到调参一文速通:GPU、CPU、显存、batchsize、占有率
面向想真正搞懂「为什么训练有快有慢」的读者。尽量用人话讲清楚;专业名词第一次出现都会附上一句解释。
@
一、开篇:为什么同一段代码,速度能差几十倍?
你可能遇到过这种事:
- 同一份 PyTorch / TensorFlow 训练脚本
- 换一台机器,一个 epoch(把训练集完整过一遍)从 40 分钟变成 3 分钟
- 或者:显卡看着「很忙」,但训练就是不快;曲线抖来抖去,也不知道算不算正常
这篇文章会按这个顺序讲清楚:
- CPU 和 GPU 本质差在哪
- 常见硬件大概处在什么「档位」,适合干什么
batch size、学习率、num_workers、显存等,和「每个 epoch 要多久」到底什么关系- 真实训练里怎么调:例如「显存没满但 GPU 满了」还有没有必要继续拧
- 为什么有的任务 GPU 利用率钉在 100%,有的却在 80%~100% 之间横跳——即便超参已经调到极限
先记住一句总原则:
训练速度是系统工程,不是单看显卡型号。
GPU 负责「算」,CPU、磁盘、数据管道、多卡通信、日志频率都会抢时间。
二、CPU 和 GPU 到底差在哪?(通俗版)
2.1 一个比喻
把深度学习训练想成「流水线做题」:
| 角色 | 像什么 | 擅长什么 |
|---|---|---|
| CPU(中央处理器) | 少数很强的全能员工 | 复杂判断、分支逻辑、调度、读文件、解码图片 |
| GPU(图形处理器,深度学习里主要当并行计算器) | 很多专做同一件事的工人 | 同时做大量相似计算:矩阵乘法、卷积、注意力 |
深度学习训练里,最吃时间的通常是「海量重复的数值计算」。这类活 GPU 往往远快于 CPU。
但若后勤跟不上(数据读得慢、预处理太重),GPU 再强也会 空等。
2.2 关键差异对照
| 维度 | CPU | GPU |
|---|---|---|
| 核心数量 | 少(通常几核到几十核),单核很强 | 多(成千上万个轻量核心) |
| 工作方式 | 擅长串行、复杂控制流 | 擅长大规模并行、规则计算 |
| 内存 | 系统内存(容量大,带宽相对低) | 显存 / VRAM(显卡自带的高速内存;容量通常更小,但读写更快) |
| 在训练中的角色 | 数据准备、调度、部分无法并行的活 | 前向、反向、大部分张量运算 |
显存(VRAM):可以理解为「GPU 桌上的工作台」。模型参数、中间结果、梯度等大多要放在这张桌上。桌子不够大,就放不下更大的 batch,甚至直接报 OOM(Out Of Memory,显存不足)。
2.3 三个常见误区
-
「有 GPU 就一定比 CPU 快」
模型很小、batch 很小,或数据加载极慢时,GPU 优势会被拖没,有时差距很小。 -
「显存大 = 算力强」
显存决定「能塞多大」,算力决定「算得多快」。两者相关,但不是一回事。 -
「核心数量多就一定快」
还要看显存带宽、是否支持高效精度(如 Tensor Core)、框架和驱动是否用得上。
三、算力怎么理解:别只看宣传数字
3.1 纸面算力 vs 真实训练速度
FLOPS(Floating Point Operations Per Second):每秒能做多少次浮点运算。厂商常写 TFLOPS(每秒万亿次)。
宣传页上的峰值 TFLOPS,像「百米冲刺理论成绩」;真实训练更像「全马拉松配速」,会受这些因素影响:
- 用的数值精度(算得精细还是粗糙一点)
- 算子是否高效、有没有融合
- 数据能不能及时喂上
- 多卡时通信是否拖后腿
所以:不要只拿峰值算力横向比「谁训练一定更快」。
3.2 精度:为什么 FP16 / BF16 常更快
常见精度(简化理解):
| 名称 | 一句话理解 | 对训练的常见影响 |
|---|---|---|
| FP32 | 单精度,更「精细」 | 稳,但更慢、更吃显存 |
| FP16 | 半精度,更「省」 | 通常更快、更省显存;少数情况数值不稳 |
| BF16 | 另一种半精度风格,动态范围更友好 | 很多大模型训练更爱用,速度也常不错 |
| TF32 | 部分 NVIDIA 架构上的折中格式 | 接近 FP32 体验,吞吐更高(视硬件而定) |
混合精度训练(AMP):关键计算用更快的低精度,关键累加/敏感部分保留更高精度。常见效果是:更快、更省显存,多数任务可用。
四、常见 CPU / GPU 型号与应用场景
4.1 CPU:训练里真正管什么?
在深度学习训练中,CPU 很少是「主计算器」,更像 后勤司令:
- 从磁盘读数据
- 解码图片 / 音频
- 做数据增强(随机裁剪、颜色抖动等)
- 多进程把 batch 准备好,送给 GPU
因此:
- CPU 太弱、核太少、磁盘太慢 → GPU 利用率容易上不去
num_workers(数据加载进程数)能开多少,也受 CPU 与内存制约
桌面 / 工作站常见 CPU(举例)
| 定位 | 常见系列 | 训练时你更该关心什么 |
|---|---|---|
| 个人学习机 | Intel Core i5/i7/i9、AMD Ryzen 5/7/9 | 核数够不够喂 DataLoader;内存建议 32GB 起,更舒服是 64GB |
| 创作/小工作室主机 | 更高端的 Core / Ryzen,或 Threadripper | 多核 + 多通道内存,适合多卡机器当「宿主」 |
| 云服务器 / 训练节点 | Intel Xeon、AMD EPYC | 大内存(128GB~1TB+)、长时间稳定、PCIe 通道够给多张 GPU |
人话版选型:
GPU 决定「算得快不快、模型塞不塞得下」;CPU 决定「数据能不能及时端上桌」。做 CV、重增强、视频时,CPU/磁盘差会非常明显。
4.2 先看懂型号怎么读:例如「4060-12GB」是什么意思?
云平台、机房报价、同学口中的配置,经常写成这种短标签:
RTX 4060-12GB、4090-24G、A100-80GB、H100-80GB
可以拆成两段理解:
| 片段 | 含义 | 例子 |
|---|---|---|
| 前面的型号名 | 哪一代、哪一档显卡 | 4060 ≈ GeForce RTX 4060;4090 ≈ RTX 4090;A100/H100 是数据中心卡 |
| 后面的容量 | 显存(VRAM)多大 | 12GB / 24GB / 80GB = 这张卡自己的高速内存有多大 |
所以:
-
4060-12GB ≈「RTX 4060 这一档,并且显存是 12GB」
-
4090-24GB ≈ 消费级旗舰档,24GB 显存,单卡训练很常见的「顶配桌面卡」
-
A100-80GB ≈ 数据中心 A100,80GB 显存,适合更大模型 / 更大 batch / 多卡训练
再补三个容易混的点:
- 型号世代 ≠ 显存
新一代不一定显存更大;同一代里也常有「同名不同显存」。 - 带 Ti / SUPER 通常比不带的更强一档
如 4060 Ti 通常强于 4060;但最终仍要看显存和你的模型是否 OOM。 - 消费级 vs 数据中心
- 消费级(GeForce RTX 40/50 系):买得到、性价比高,单机常用
- 数据中心(A100/H100/H200、L40S 等):更贵、更稳、更好多卡扩展,云上常见
4.3 GPU:按定位看具体型号(2024~2026 常见口径)
下面用「代表型号」帮助建立坐标。具体哪张卡还能买到、云上叫什么实例名,以你当时平台为准;选型逻辑不变:先看显存够不够,再看算力与预算。
A. 学习 / 入门(先求跑通)
| 常见写法 | 大概定位 | 更适合 | 不太适合 |
|---|---|---|---|
| RTX 4050 / 4060(常见 8GB) | 入门消费级 | 小 CNN、课程作业、很轻的微调 | 稍大的 LLM 全量微调 |
| RTX 4060 Ti(常见 8GB / 16GB) | 入门偏主流 | 16GB 版做小模型/部分 LoRA 更从容 | 显存仍可能卡住 7B 以上「舒服训练」 |
| 云上 T4-16GB、L4-24GB | 入门云卡 | 练手、小任务、推理试验 | 追求极致训练吞吐 |
B. 主流单卡训练(性价比甜蜜区)
| 常见写法 | 显存直觉 | 更适合 |
|---|---|---|
| RTX 4070 / 4070 SUPER(常 12GB) | 中等 | 中等 CV、中小 NLP |
| RTX 4070 Ti / Ti SUPER(常见 16GB) | 更舒服 | CV + 一部分 7B 级 LoRA |
| RTX 4080 / 4080 SUPER(常见 16GB) | 主流偏强 | 更大 batch、更顺的单卡训练 |
| RTX 5070 / 5070 Ti 等同级新卡 | 看具体 GB | 同理:先确认显存,再比世代 |
C. 高端单卡(大显存 + 高带宽)
| 常见写法 | 显存直觉 | 更适合 |
|---|---|---|
| RTX 4090-24GB | 消费级旗舰常见顶配 | 较大模型微调、更长序列、更大 batch |
| RTX 5090(若平台提供,注意其标称显存) | 新一代旗舰 | 同定位,通常更强;仍以显存与框架支持为准 |
| RTX 6000 Ada / 专业视觉卡(常见 48GB 档) | 专业卡大显存 | 单卡塞更大模型,工作站常见 |
D. 数据中心 / 云上训练卡
| 常见写法 | 显存直觉 | 更适合 |
|---|---|---|
| A100-40GB / A100-80GB | 大 | 大模型训练/微调、多卡起步款常客 |
| H100-80GB | 更大算力 | 大模型训练主流之一 |
| H200(更高显存带宽/容量规格,视平台) | 更大更猛 | 更大模型、更长上下文 |
| L40S-48GB | 偏推理也能训 | 一部分训练 + 推理混合负载 |
| AMD MI300X 等 | 需确认 ROCm/框架 | 生态匹配时可用,兼容性要先验证 |
E. 生态差异(知道即可)
- NVIDIA + CUDA:深度学习工具链最成熟,坑最少
- AMD + ROCm:在进步,但框架版本与算子支持要自己核实
- Apple Silicon(M 系列):本机开发友好;大规模训练生态与 CUDA 仍不同
4.4 服务器上常见「搭配」长什么样?怎么选?
真实机房/云实例,很少只写一张 GPU,而常是一整套:
CPU × N 核 + 内存 XXX GB + GPU 型号-显存 × 卡数 + 系统盘/数据盘
常见搭配示例(帮助建立直觉)
| 场景 | 常见搭配直觉 | 为什么这样搭 |
|---|---|---|
| 个人学习 / 小实验 | 6~12 核 CPU + 32~64GB 内存 + 1× RTX 4060/4070(8~16GB) | CPU 够喂数据即可;显存优先别太寒酸 |
| 单卡认真训 CV / 中等模型 | 12~24 核 + 64~128GB + 1× 4090-24GB 或 1× 4080-16GB | 24GB 少很多 OOM;内存给 DataLoader 和缓存留余量 |
| 单机多卡微调 | 较高核数 CPU + 256GB 内存 + 2/4× 4090-24GB 或 2/4/8× A100/H100 | CPU/内存要随卡数涨,否则多卡也会「喂不饱」 |
| 大模型多卡训练 | Xeon/EPYC + 512GB~1TB+ + 8× A100-80GB / H100-80GB(或同级) | 显存池与互联更关键;消费级多卡集群通常不是最优解 |
| 偏推理服务 | 可选用 L4/L40S/H100 等 + 足够 CPU 做请求调度 | 目标变成立延迟/吞吐/成本,不一定死磕训练卡 |
选配时按这个顺序想(实用)
- 先定模型与精度:显存够不够?
- 8GB:小模型、练手
- 12~16GB:中等训练更常见的「能干活」区间
- 24GB:很多单卡认真训练的舒适区
- 40/80GB:大模型与更大 batch / 更长上下文
- 再看是 1 卡还是多卡
- 单卡跑得下,就先单卡(简单)
- 单卡死活 OOM,再考虑更大显存卡或多卡并行
- 然后配 CPU 与内存
- 经验直觉:GPU 越多、数据增强越重,越要更多 CPU 核与内存
- 内存过小会出现:workers 开不高、系统开始换页(变极慢)
- 最后看磁盘
- 训练集很大时,慢盘会让 GPU 利用率上不去
- 「GPU 很贵但盘很烂」是常见亏法
五、一个 epoch 要多久?先把账算清楚
5.1 把时间拆开(流水线视角)
一个 epoch 的时间,大致可以想成:
一个 epoch 的时间 ≈ 步数 ×(准备数据时间 + GPU 计算时间 + 同步/通信时间 + 杂项时间)
其中:
- 步数 ≈ 样本总数 ÷ batch size(每步喂给模型多少条样本)
若用了 梯度累积(gradient accumulation:多小步攒成一次真正更新),逻辑 batch 和物理 batch 还要分开看。 - 准备数据:CPU 读盘、解码、增强、组 batch
- GPU 计算:前向 + 反向 + 优化器更新
- 同步/通信:多卡时要把梯度对齐,会等人
- 杂项:打印日志、验证集评估、存 checkpoint、往监控平台传数据
所以:
- batch 变大 → 每步通常更慢一点,但步数变少;GPU 往往更「吃得饱」
- 数据太慢 → 步数怎么减都救不了,GPU 会空等
5.2 该看哪些速度指标?
| 指标 | 含义 | 什么时候有用 |
|---|---|---|
| steps/s | 每秒多少训练步 | 看 step 是否变快 |
| samples/s 或 images/s | 每秒处理多少样本 | 跨不同 batch 比吞吐更公平 |
| tokens/s | 每秒处理多少 token(文本常用) | 语言模型训练/微调 |
| 每个 epoch 分钟数 | 墙钟时间 | 最终体感;但改 batch 后要结合吞吐一起看 |
只盯 epoch 时间容易误判:batch 从 8 改到 32,epoch 变快了,不等于「同样更新质量下更高效」,还要看收敛是否变了。
六、关键旋钮和训练速度的关系
下面每个旋钮都按同一结构讲:是什么 → 怎么影响速度 → 调大/调小会怎样 → 副作用。
6.1 Batch Size(批大小)
是什么:每一步拿多少样本一起算。
对速度:
- 太小:GPU 吃不饱,利用率低,samples/s 差
- 合适:通常更能打满 GPU,整体吞吐上升
- 太大:显存不够(OOM),或收益递减(已经算力打满后再加大,加速有限)
对效果:
- 影响梯度噪声和泛化,不是「只改速度」的纯工程旋钮
- 常需配合学习率调整
直觉:batch 是「每次炒多少菜」。锅(GPU)太大、菜太少,火候浪费;一次太多,灶台(显存)放不下。
6.2 Learning Rate(学习率)
是什么:每步参数更新的步长。
对速度(墙钟):
- 几乎不直接决定 GPU 算得快不快
- 但决定「同样时间内 loss 有没有降下去」——这是 有效训练效率
常见关系:
- batch 显著变大后,原学习率可能偏小/偏大,需要重新找
- warmup(先用较小学习率热身再升上去):减少前期不稳定
一句话:学习率管的是「走得稳不稳、路对不对」,不是「引擎转速表」。
6.3 num_workers / max workers(数据加载进程数)
是什么:多少个后台进程帮你准备 batch(PyTorch DataLoader 里常见)。
对速度:
- 太少:GPU 经常等数据,利用率低或锯齿明显
- 合适:数据预取跟上计算
- 太多:进程争抢 CPU/内存,反而变慢,甚至把机器拖死
相关开关(知道即可):
pin_memory:让主机到显卡的拷贝更顺一些(常见可开)persistent_workers:减少每个 epoch 反复创建进程的开销
6.4 显存(VRAM)
显存主要花在:
| 占用项 | 一句话 |
|---|---|
| 参数 | 模型本身的权重 |
| 激活 | 前向中间结果(反向时常还要用) |
| 梯度 | 反向传播算出来的「怎么改参数」 |
| 优化器状态 | 如 Adam 会额外存一些动量统计,往往很吃显存 |
| 临时缓冲 | 框架和工作区零碎开销 |
显存决定你能不能开更大的 batch、更长的序列、更大的模型。
省显存的常用手段(对速度的影响可正可负):
- 混合精度:常又省又快
- 梯度检查点(gradient checkpointing):省激活显存,但通常更慢(用时间换空间)
- 梯度累积:用多次小 batch 模拟大 batch,墙钟通常更慢或差不多,但能「逻辑上更大」
- 离载 / ZeRO 等:多卡或 CPU 卸载,复杂,可能换来可运行性,吞吐不一定升
6.5 其它同样重要的旋钮
| 旋钮 | 对速度的典型影响 |
|---|---|
| 序列长度 / 图像分辨率 | 往往比「多几层」更伤时间;注意力类还可能随长度明显变慢 |
| 模型宽度/深度 | 更大通常更慢、更吃显存 |
| 优化器 | AdamW 等比简单 SGD 更吃显存和计算 |
| 多卡 DDP/FSDP | 算力叠加,但有通信成本;卡越多越不等于线性加速 |
| 验证与日志频率 | 过于频繁会显著拉长「看起来一个 epoch」的时间 |
| 磁盘与数据格式 | 网络盘、小文件海、实时重解码,都可能让 GPU 饿死 |
编译优化(如 torch.compile) |
有时明显加速,有时收益有限或编译期很痛 |
6.6 一张总表:旋钮主要影响什么
| 旋钮 | 主要影响速度? | 主要影响显存? | 主要影响收敛? |
|---|---|---|---|
| batch size | 强 | 强 | 中~强 |
| learning rate | 弱(墙钟) | 几乎无 | 强 |
| num_workers | 强(数据瓶颈时) | 间接(主机内存) | 基本无 |
| 混合精度 | 强 | 强 | 通常小,偶尔不稳 |
| 梯度累积 | 中(常变慢或持平) | 可降低峰值 | 影响逻辑 batch |
| 序列长度/分辨率 | 强 | 强 | 看任务 |
| 验证/日志频率 | 中~强 | 弱 | 无(但影响你看到的曲线) |
| 多卡通信 | 强(扩展效率) | 视策略 | 间接 |
七、实战调参:训练时最常见的几种情况
7.1 显存没跑满,但 GPU 利用率已经接近 100%
现象
nvidia-smi 里显存还空着一块,但 GPU-Util 长期很高(例如 95%~100%)。

原因(人话)
计算侧已经比较满了。瓶颈更可能是「算力/内核效率」,而不是「还能再塞更多样本进显存」。
怎么调
| 动作 | 预期 |
|---|---|
| 继续猛加 batch | 常常 收益有限;可能轻微提升吞吐,也可能几乎不变,还更靠近 OOM |
| 开混合精度 | 往往 有用:同样时间内算得更多,有时显存占用结构也变化 |
检查是否有多余同步(频繁 .item()、过多打印) |
有时有用 |
| 换更高效实现 / 编译 | 任务相关,可能有用 |
| 只为了「显存占用好看」去加 batch | 通常没用,甚至有副作用 |
结论
不一定能继续提高效率。 显存空 ≠ 你必须把它填满。先看 samples/s 有没有随 batch 上升;若几乎不动,就别为填显存而填。
7.2 显存爆了(OOM),GPU 利用率并不高
现象
一开训或一加大配置就 OOM;偶尔能跑时,GPU-Util 也不高。
原因
桌子(显存)先满了,还没轮到「算力被打满」。常见:batch 过大、序列过长、激活太大、优化器状态太肥。
怎么调(常见优先级)
- 降 batch size
- 用梯度累积维持逻辑 batch
- 开混合精度
- 开 gradient checkpointing(更慢但更省)
- 缩短序列 / 降低分辨率
- 换更省显存的微调方式(如 LoRA)或并行策略
结论
这类调参 非常有用:先让任务稳定跑起来,再谈加速。很多时候「能用更大有效 batch 稳定训练」后,利用率反而升上去。
7.3 GPU 利用率长期只有 20%~50%
现象
GPU 像在摸鱼;CPU 可能很忙,或磁盘灯狂闪。
原因
多半是 数据喂不上,或模型/batch 太小吃不饱 GPU。
怎么调
| 排查 | 动作 |
|---|---|
| 数据管道 | 适当增大 num_workers,打开 prefetch / persistent_workers |
| 增强太重 | 减轻 CPU 端 augmentation,或缓存处理后的数据 |
| 存储慢 | 换本地高速盘、减少海量小文件随机读 |
| 模型太小 | 增大 batch,让 GPU 有足够计算量 |
结论
若确认是数据瓶颈,调 workers/存储/预处理 通常很有用;若已经是小模型小任务,利用率低可能「正常」,硬追 100% 意义不大。
7.4 显存和 GPU「看起来都挺满」,epoch 还是慢
现象
监控数字都好看,但一个 epoch 耗时离谱。
可能原因
- 验证太勤、checkpoint 太勤
- 日志/可视化同步太重
- 多卡在等通信
- 代码里有隐藏的 CPU↔GPU 来回拷贝
怎么调
先临时关掉或大幅降低验证与日志频率,看 epoch 时间是否立刻下降——这是最快的对照实验。
结论
可能有用。 很多「训练慢」其实是「训练以外的事太多」。
7.5 速度还行,但 loss 不降 / 一训练就散
现象
吞吐不错,模型学不会或 NaN。
原因
这是 有效训练 出问题,不是算力没打满。常见:学习率过大/过小、batch 大改后 LR 没跟上、混合精度不稳定、数据有问题。
怎么调
回退到更稳的 LR、加 warmup、先关 AMP 对照、检查标签与预处理。
结论
只优化 GPU 利用率 没用;这时应优先修收敛。
八、情况解惑:GPU 利用率为什么有时稳、有时横跳?
这是很多人调到「极限」后仍然困惑的点:
- 任务甲:GPU 曲线几乎一直贴在 100%
- 任务乙:同样把 batch、workers 等拧到极限,却在 82% → 100% → 91% → 100% 之间横跳
先说结论:
两种都可能完全正常。
GPU-Util 不是「成绩单满分才算调好」,它是采样出来的忙碌比例;不同任务的「一步」结构不同,曲线形态本就可以不同。
8.1 你在看的 GPU-Util 到底是什么?
以 nvidia-smi 为例,GPU-Util 大致表示:在采样窗口里,GPU 有多少比例的时间被认为在忙。
它 不是:
- 「Tensor Core 用到了百分之几」的精确度量
- 「已经达到理论算力上限」的证明
所以:
- Util 100%:很忙,但不等于无法再优化吞吐
- Util 在 80%~100% 抖:可能只是「忙一阵、空一瞬」的交替被采样放大了
更可靠的搭档指标是:samples/s 或 tokens/s 是否稳定。
8.2 情况 A:长时间几乎钉死在 ~100%
常见含义
计算阶段持续很满,数据准备和杂项占比相对小。
常见任务特征
- 计算很重:大矩阵、较长序列的 Transformer 主体计算
- batch / 序列足够大
- 预处理相对轻
- 单卡或通信开销可控
注意
即便钉在 100%,混合精度、更好的内核、减少额外同步,仍可能提升 tokens/s;只是 Util 数字未必再往上「涨」,因为它已经顶格了。
8.3 情况 B:在 80%~100% 之间横跳
核心解释(人话)
训练的一步很少是「纯计算永不间断」,更像:
算一阵 → 等数据 / 做同步 / 写日志 / 换kernel → 再算一阵
监控工具按时间抽样,就会看到这种锯齿。
常见触发因素(不必同时存在)
| 因素 | 为什么会让曲线抖 |
|---|---|
| 数据管道间歇性跟不上 | 偶发读盘慢、解码慢、增强忽然变重 |
| 变长序列 / 动态 shape | 有的 step 很重,有的 step 较轻 |
| 重数据增强 | CPU 端耗时波动大 |
| 周期性验证、保存、日志 | 规律性「掉一截」或抖动 |
| 多卡集合通信 | 在等最慢的那张卡 |
| 很多短 kernel 切换 | 采样分辨率下更容易看起来乱跳 |
| 功耗/温度导致频率波动 | Util 仍高,但实际吞吐在变(曲线与速度都可能不稳) |
重要提醒
把超参调到极限后仍然横跳,非常常见,尤其在 CV 重增强、视频、复杂 CPU 管道、多卡任务里。
这不等于你没调好。
8.4 横跳时还要不要继续调?
用这个口诀:
曲线丑但吞吐稳 → 多半没事;曲线抖且速度也抖 → 再查瓶颈。
| 观察 | 建议 |
|---|---|
在 80%~100% 轻抖,samples/s 很稳 |
可接受,别为了曲线好看过度调参 |
| 经常掉到很低(如突然 10%~30%),吞吐大起大落 | 按第七章查数据、日志、验证、通信 |
| 想确认是不是数据导致 | 临时用缓存数据 / 关掉重增强,看抖动是否明显收敛 |
| 想确认是不是日志/验证 | 大幅降低频率做对照 |
8.6 两个小实验(建立直觉)
- 同一模型,关掉重增强,改用预缓存
- 若横跳明显变顺:说明之前主要是数据管道波动
- 对比「很大计算量的 step」vs「很小模型 + 很小 batch」
- 后者即使 workers 拉满,也更容易抖,因为一步太短、空隙占比更高
九、多卡训练:是什么、什么时候用、怎么用、有没有必要
前面大多默认「一张 GPU」。实际工作里你很快会听到:多卡、DDP、八卡机器、模型并行。
9.1 多卡是什么?
多卡:一台机器(或多台机器)上同时用 两张及以上 GPU 一起完成同一次训练。
可以把它想成:
- 单卡:一个厨师做完整桌菜
- 多卡:几个厨师分工,争取更快上菜
但多卡不是「卡数 × 速度」这么简单,因为还要:
- 分工:每张卡各自算一部分
- 对齐:大家算完的结果要汇总、同步,不然模型会各学各的
- 等待:最慢的那张卡会拖慢整组(木桶短板)
所以多卡的本质是:
用更多算力/显存换墙钟时间,同时付出通信、工程复杂度和调度成本。
9.2 多卡常见两种「分工方式」
(1)数据并行(最常见,优先理解)
数据并行(Data Parallel):每张卡都有一份(或逻辑上等价的)模型副本,但吃的数据不同。
- 卡 0 吃 batch 的一部分
- 卡 1 吃另一部分
- 各自算梯度后,再 同步/平均,一起更新
PyTorch 里现在最常用的落地方式是 DDP(Distributed Data Parallel,分布式数据并行):比老式的 DataParallel 更高效、更标准。
(2)模型并行 / 显存并行(模型单卡塞不下时)
当模型大到 一张卡的显存都放不下,就不能只靠「多卡各吃一点数据」,而要把模型本身拆开:
| 名称 | 一句话 | 什么时候会听到 |
|---|---|---|
| 张量并行(Tensor Parallel) | 同一层计算拆到多卡 | 超大 Transformer |
| 流水线并行(Pipeline Parallel) | 不同层放不同卡,像流水线 | 很深很大的模型 |
| FSDP / ZeRO 等 | 参数、梯度、优化器状态分片存,省显存 | 大模型微调/训练常见 |
对大多数 CV、中小 NLP、LoRA 微调:精通 数据并行(DDP) 就够用。
只有单卡怎么挤都 OOM,才认真上模型并行/FSDP 这类方案。
9.3 什么时候会用到多卡?
按优先级想,通常是这些信号:
情况 A:单卡太慢,要缩短墙钟时间
情况 B:单卡显存不够(OOM)
情况 C:任务天然需要更大全局 batch 或更大吞吐
十、实战:选择服务器

租 GPU 云主机时,页面上密密麻麻的「A100-80GB」「3090-24G」「NVLink」「CUDA 13.0」,第一次很容易懵。
这一节用一张典型的 按量付费选机页面(类似 AutoDL 这类平台)做实战拆解:先讲界面术语,再按型号介绍怎么选。
10.1 这页在让你选什么?
云平台把一台「能训练的机器」拆成几件事:
- 怎么付钱(按量 / 包日周月)
- 机器在哪(地区)
- 要什么特性(大显存、多卡、SSD……)
- 哪张显卡、几张卡
- 这台实例具体配了多少 CPU / 内存 / 磁盘
- 系统里预装什么环境(镜像:PyTorch、CUDA、Python 版本等)
你最终买到的不是「一张显卡」,而是一整台 实例(Instance):GPU + CPU + 内存 + 磁盘 + 网络 + 软件环境。
10.2 界面术语对照(从上到下)
(1)计费模式
| 选项 | 意思 | 适合谁 |
|---|---|---|
| 按量付费 | 用多少小时付多少钱,可随时释放 | 短期实验、课程作业、调参试错(截图所选) |
| 按日/周/月/年 | 包时段,通常有折扣 | 明确要连续跑很久、机器不太换 |
(2)系统
截图里是 Linux。深度学习训练服务器几乎都用 Linux(驱动、CUDA、容器生态最成熟)。
(3)地区
- 一般选 有货、便宜、延迟可接受 的即可
- 若你要从本地频繁传大数据集,可优先离你更近、上行带宽更好的地区
- 「有库存」往往比「名义上最近」更重要
(4)活动标签
限时特价、活动价格、优惠券、夜间特惠等,属于价格过滤,不影响性能本身。
(5)机器特性(很实用的筛选器)
| 标签 | 一句话解释 | 什么时候勾 |
|---|---|---|
| 高可用率 | 机器更不容易抢不到/更稳一些(平台定义) | 长时间任务 |
| 大硬盘 / 大数据盘 | 数据盘更大 | 数据集很大 |
| 大内存 | 主机内存(RAM)更大 | num_workers 高、缓存数据、多卡 |
| 多核 | CPU 核数更多 | 重数据增强、解码压力大 |
| 1 卡 GPU | 只要单卡 | 入门、调试 |
| 大显存 | 过滤显存更大的卡 | LLM、高分辨率、易 OOM |
| NVLink | GPU 之间的高速互联(比普通 PCIe 更快) | 多卡大模型,通信敏感时 |
| 2 卡 / 8 卡 / 10 卡 GPU | 直接筛多卡机器 | 明确要做多卡训练 |
| NVMe / SSD | 更快的磁盘 | 大数据集、随机读小文件 |
| CUDA10 | 偏老环境兼容 | 老项目锁死旧 CUDA 时才需要 |
| 高速公网 / 独立带宽 / 静态IP 等 | 网络相关 | 要对外服务、稳定远程访问时 |
注意:勾选越多,可选机器越少。先按「显卡型号 + 卡数」定位,再按需加「大显存 / SSD / 多核」。
(6)显卡类型:型号-显存 怎么读?
例如:
- 3090-24G = GeForce RTX 3090,显存 24GB
- A100-80GB = 数据中心卡 A100,显存 80GB
- 4090D-24G = RTX 4090 的特定版本(常见于国内市场供应规格),显存仍是 24GB
后缀 GB/G 才是显存容量;前面是卡的档位与代数。同名前缀也可能有不同显存版,以下缀为准。
(7)GPU 数量
截图可选 1~24 张。
当前选的是 1:单卡实例,最适合先跑通、先调参。
卡数变多 ≠ 线性变快。详见前文「多卡」一节。
10.3 读懂「已选中的那一行规格」(以 3090-24G 为例)
截图下方这张表,是你真正下单前最该看的东西:
| 字段 | 截图中的值 | 什么意思 |
|---|---|---|
| GPU 类型 | 3090-24G | 用的哪张卡 |
| 地区 | 华北 | 机房位置 |
| 数量 | 1 | 几张 GPU |
| 显存 | 24 GB | GPU 自己的内存(不是主机内存) |
| 驱动版本 | 580.173.02 | NVIDIA 驱动版本 |
| 最大 CUDA 版本 | 13.0 | 这台机器驱动支持到的 CUDA 上限 |
| CPU | Xeon E5-2699 v4 | 服务器 CPU 型号 |
| CPU 配置 | 11 核 | 分给你的 CPU 核数(后勤能力) |
| 内存 | 31.5 GB | 主机内存 RAM(给系统、DataLoader、缓存用) |
| 实例硬盘 | 系统盘 20GB + 数据盘 50GB(可扩) | 系统与数据分开;数据集请放数据盘 |
| 网络带宽 | 上传 400Mbps / 下载 800Mbps | 传数据集、拉镜像时会用到 |
| 价格 | ¥0.75 / 小时 | 按量单价 |
三个最容易混的「内存」
- 显存 24GB:模型、激活、梯度主要住这里,OOM 通常指它不够
- 内存 31.5GB:CPU 侧用,workers 太多、数据缓存太大时先爆它
- 硬盘 50GB 数据盘:只是存放空间;不快的话,GPU 会饿死
关于驱动和 CUDA
- 驱动:操作系统里的 NVIDIA 驱动
- CUDA:GPU 通用计算工具链;深度学习框架(PyTorch 等)要与之匹配
- 「最大 CUDA 13.0」意思是:驱动够新,能支持较高 CUDA;你实际用哪一版,还看 镜像里装的 PyTorch/CUDA 组合
10.4 实例镜像是什么?为什么也很重要
页面底部的 实例镜像,决定开机后环境长什么样:
| 类型 | 作用 |
|---|---|
| 官方镜像 | 平台预装好的 PyTorch / TensorFlow / CUDA / Python 组合,开箱最快 |
| 备份镜像 | 你以前保存过的环境,适合复现实验 |
| 镜像市场 | 社区/第三方做好的环境 |
选镜像时重点看三件事是否匹配你的代码:
- 框架版本(如 PyTorch 2.x)
- CUDA 版本
- Python 版本
机器再好,镜像选错(CUDA 与框架不匹配),也会装到崩溃。
10.5 显卡型号地图:截图里这些卡各自干什么?
下面按截图中的类型分组介绍。价格会变,这里讲 定位与适用场景。
A. 数据中心大显存卡(大模型、多卡、长时间任务)
| 型号(页面写法) | 一句话定位 | 更适合 | 不太适合 |
|---|---|---|---|
| A100-80GB / A100-40GB | 经典大模型训练卡,生态成熟 | 大模型训练/微调、多卡 | 小作业(性能浪费、更贵) |
| A800-80GB | 面向特定市场供应的 A100 同系规格 | 与 A100 类似的大模型场景 | 同上 |
| L40S-48GB | 偏新的数据中心卡,训练/推理都能做 | 中大型模型、推理+训练混合 | 只想最低价练手 |
| V100-32G / V100-16G | 上一代数据中心卡 | 老项目复现、预算受限的中等训练 | 追新架构峰值性能 |
| P40-24G / T4-16G / P4-8G | 更老或偏推理/入门数据中心卡 | 轻量任务、推理试验、兼容老环境 | 现代大模型训练主力 |
B. 专业高显存卡(单卡硬塞大模型时很香)
| 型号 | 一句话定位 | 更适合 |
|---|---|---|
| PRO 6000-96G | 超大显存专业卡 | 极大显存需求、单卡塞大模型 |
| 6000D-84G | 大显存专业卡规格之一 | 同上,看平台供应与价格 |
| 5880Ada-48G | Ada 架构专业卡 | 大显存工作站向负载 |
| A6000-48GB / A6000-24G | 专业绘图像卡,显存大 | 单卡大显存训练、可视化相关负载 |
C. 消费级旗舰 / 主流训练卡(个人与小团队最常见)
| 型号 | 显存 | 一句话定位 | 怎么选 |
|---|---|---|---|
| 5090-32G | 32G | 新一代消费级旗舰(更高算力/更大显存) | 预算够、要强单卡性能 |
| 5080-16G | 16G | 新一代高端 | 要新架构,但显存不是最大 |
| 5070-12G | 12G | 新一代中上 | 中等模型;LLM 容易偏紧 |
| 5060 Ti-16G | 16G | 新一代中端大显存版 | 性价比练手/中等训练 |
| 4090-24G | 24G | 上一代消费级王者,训练非常常见 | 单卡认真训练的首选之一 |
| 4090D-24G | 24G | 4090 的国内常见供应版本 | 与 4090 同定位,看价格库存 |
| 4080-16G | 16G | 高端但显存少于 4090 | CV/中等 NLP 很好;大模型更易撞墙 |
| 4070 Ti-16G | 16G | 主流偏强 | 性价比单卡训练 |
| 4070-12G | 12G | 主流 | 中小模型;大显存需求不够从容 |
| 4060 Ti-16G | 16G | 中端里显存很能打 | 预算有限又想少 OOM,很常见 |
| 3090 Ti-24G / 3090-24G | 24G | 老旗舰,显存仍香,单价常更友好 | 截图所选;很多研究生的甜品坑 |
| 3080-20G / 3080 Ti-12G / 3080-10G | 10~20G | 上一代高端 | 能跑很多 CV;大模型看显存版本 |
| 3070-8G / 3060 Ti-8G | 8G | 入门偏上 | 学习小模型;大 batch 易 OOM |
| 3060-12G | 12G | 老中端,12G 仍能救急 | 入门训练、轻量微调 |
D. 更老的消费级(能跑,但优先当备用)
| 型号 | 说明 |
|---|---|
| 2080 Ti-22G / 2080 Ti-11G | 较老架构;22G 多为特殊改版/特定供应,先确认框架与驱动支持 |
| 1080 Ti / TITAN X-12G | 很老,仅适合极轻任务或怀旧复现,不建议作为现代训练主力 |
十一、附录:名词小词典与速查表
11.1 名词小词典
| 名词 | 一句话解释 |
|---|---|
| CPU | 中央处理器,擅长通用与复杂控制 |
| GPU | 图形/并行处理器,擅长大规模相似计算 |
| VRAM / 显存 | GPU 自带的高速内存 |
| FLOPS / TFLOPS | 每秒浮点运算次数(理论算力常用单位) |
| Batch size | 每步训练使用的样本数 |
| Epoch | 完整遍历一遍训练集 |
| Learning rate | 参数更新步长 |
| num_workers | 数据加载的并行进程数 |
| AMP / 混合精度 | 用更低精度加速并省显存的训练方式 |
| Gradient accumulation | 多步小 batch 累积后再更新,模拟更大 batch |
| Gradient checkpointing | 省激活显存、通常换更慢计算的技术 |
| OOM | 显存不足导致的报错 |
| DDP | 常见的多卡数据并行训练方式 |
| samples/s、tokens/s | 训练吞吐指标 |
| GPU-Util | 采样得到的 GPU 忙碌比例,不是精确算力利用率成绩单 |
10.2 现象速查表
| 现象 | 优先怀疑 | 优先动作 | 通常有没有用 |
|---|---|---|---|
| Util 低,CPU/磁盘忙 | 数据瓶颈 | 调 workers、减增强、换快存储 | 常有用 |
| Util 高,显存仍空 | 算力已较满 | 别盲目加 batch;试 AMP/实现优化 | 加 batch 常有限 |
| OOM,Util 不高 | 显存墙 | 降 batch、AMP、checkpoint、减序列 | 很有用 |
| Util 80~100 横跳,吞吐稳 | 任务结构使然 | 可观察,不必过度调 | 硬追 100% 常没用 |
| Util 与吞吐一起大抖 | 真瓶颈/周期性杂项 | 查数据抖动、验证、通信、温度墙 | 有用 |
| 很快但不收敛 | 优化/数据问题 | 调 LR、warmup、查数据与精度稳定性 | 只压硬件没用 |
全文完。若你后续想把某一章扩成「带具体命令与监控截图说明」的实操手册,可以指定章节继续写。

浙公网安备 33010602011771号