大模型训练加速(基于minimind)

训练代码中使用的加速技术如下:

已使用的加速技术

1. Flash Attention(已讨论)

  • 位置:--attn_impl flash_attn(默认)
  • 效果:约 2–4 倍加速,显存节省约 50%

2. 混合精度训练(Mixed Precision)

# 第124行:默认使用 bfloat16
dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16
autocast_ctx = torch.cuda.amp.autocast(dtype=dtype)  # 第124行

# 第139行:GradScaler(仅float16需要)
scaler = torch.cuda.amp.GradScaler(enabled=(args.dtype == 'float16'))

# 第34-45行:在autocast上下文内计算,scaler缩放梯度
with autocast_ctx:
    res = model(X)
    loss = ...
scaler.scale(loss).backward()
  • 效果:约 1.5–2 倍加速,显存节省约 50%

3. 分布式训练(DDP)

# 第152-154行:多卡训练
if dist.is_initialized():
    model._ddp_params_and_buffers_to_ignore = {"freqs_cos", "freqs_sin"}
    model = DistributedDataParallel(model, device_ids=[local_rank])
  • 效果:N 卡理论加速约 N 倍(实际受通信开销影响)

4. 梯度累积(Gradient Accumulation)

# 第90行:默认 accumulation_steps=8
# 第43行:loss /= accumulation_steps
# 第47行:每accumulation_steps步更新一次
if (step + 1) % args.accumulation_steps == 0:
    scaler.step(optimizer)
  • 效果:等价于增大 batch size,在显存受限时可提升吞吐

5. Pin Memory(数据加载加速)

# 第165行:pin_memory=True
loader = DataLoader(..., pin_memory=True)
  • 效果:CPU→GPU 数据传输加速约 10–20%

6. 优化器内存优化

# 第54行:set_to_none=True 避免零填充操作
optimizer.zero_grad(set_to_none=True)
  • 效果:轻微加速,降低内存使用

7. 半精度模型保存

# 第74行:保存时转为半精度
state_dict = {k: v.half() for k, v in state_dict.items()}
  • 效果:节省存储空间(约 50%),不直接加速训练

加速效果总结

技术加速倍数显存节省说明
Flash Attention2-4x~50%注意力计算优化
混合精度 (bfloat16)1.5-2x~50%训练精度优化
DDP (N卡)~N倍-多卡并行
梯度累积等效增大batch减少峰值显存显存受限时有效
Pin Memory1.1-1.2x-数据加载优化
zero_grad优化轻微轻微内存优化

综合效果

  • 单卡:Flash Attention + 混合精度 ≈ 3–8 倍加速,显存节省约 75%
  • 多卡:在上述基础上再乘以卡数

进一步优化建议

如需更快,可考虑:

  1. DeepSpeed ZeRO(代码中未集成,需额外配置)
  2. 编译优化:torch.compile(model)(PyTorch 2.0+)
  3. 调整 num_workers:增加 DataLoader 工作线程数
  4. 使用更高效的优化器:AdamW 已较优,也可尝试 LION 等

代码已使用了常用的训练加速技术。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值