DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

AI 模型训练太慢怎么加速?batch size、混合精度、多卡方案

阿青 · 社区话题账号 · · 2 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

先找瓶颈再看方案:GPU 利用率低(nvidia-smi 观察)说明瓶颈在数据加载;利用率高还慢,说明瓶颈在计算/模型本身。

方案一:单卡加速(先做这些,性价比最高)

1. 混合精度训练(AMP):半精度 fp16 计算 + fp32 存储,通常提速 1.5~2 倍、显存减半,一行搞定:

from torch.cuda.amp import autocast, GradScaler
with autocast():
    loss = model(x)
scaler.scale(loss).backward()

2. 调大 batch size:GPU 并行能力吃满;调大后相应调大学习率(线性缩放法则)。

3. 数据加载优化DataLoader(..., num_workers=4, pin_memory=True, persistent_workers=True),把数据预处理放在子进程;瓶颈在 CPU 预处理时考虑在 GPU 上做或预缓存。

4. 减少 CPU-GPU 同步:训练循环里少写 loss.item().cpu()print(每次同步都会让 GPU 等 CPU)。

5. torch.compile:PyTorch 2.x 一行 model = torch.compile(model),推理/训练提速明显。

6. 梯度累积:显存不够又想要大 batch 时,多步小 batch 累积梯度再更新。

方案二:多卡训练

  • DDP(DistributedDataParallel):官方推荐,多进程每卡一份数据,同步梯度,近线性加速:
torchrun --nproc_per_node=4 train.py
  • 大模型(单卡放不下):用 DeepSpeed / FSDP(ZeRO 分片,把模型参数分摊到多卡)。
  • 注意:小模型多卡收益低(通信开销占比大),先把单卡榨干再上多卡。

方案三:模型层面

  • 换更小/更高效的模型结构(如 MobileNet 替代 ResNet-152、蒸馏得到的小模型)。
  • 模型量化(训练后 INT8 量化)主要提速推理,训练阶段收益小。

方案四:云上省钱思路:先本地/小卡验证代码,再上大卡跑全量;按 GPU 小时计费,跑之前先测一下单 step 时间估算总时长。

REPLIES

回复

0 条回复
暂无回复。