帮up宣传一下,优质up值得信赖!
B站UP:你可是处女座啊
文章目录
- 原理
- 一、 DDP
- 二、基本概念
- 三、分布式训练中的通信
- 实战
- 初始化进程组
- 当前 进程 到底使用哪些数据?
- 模型处理
- 启动
- 改造 loss 打印
- 改造准确率
- 改造数据划分
- 训练前数据打乱
- batch_size 是多少?
- Trainer
- DDP vs DP 效率对比
- 总结
- 简称 DDP
原理
一、 DDP
- 补充一下 DP 原理
二、基本概念
- 解释概念,Global 是全局信息,Local 是局部信息
三、分布式训练中的通信
- t 代表数据
- 注意,不局限于求和计算(可以其余计算,例如平均)
实战
初始化进程组
当前 进程 到底使用哪些数据?
Pytorch 自己实现了(借助采样器就可以实现不同的 GPU 选择不同数据)
模型处理
启动
torchrun --nproc_per_node=2 ddp.py
nproc_per_node 每个节点的进程数
改造 loss 打印
- 自己写通信
- loss 打印结果一致
继续优化:只在一个进程中打印,用 gloabl_rank 指定进程号
效果:只打印一次
改造准确率
- dist.all_reduce() 默认就是 sum
改造数据划分
- 每个进程都会进行一次随机数据划分,训练集和测试集必定存在重叠(需要保证划分一致)
- 看数据打印是否一致即可
训练前数据打乱
batch_size 是多少?
设置的 batch_size * 2
- 注意:如果验证集数量不够多个进程均分会导致准确率不准,accelerate 解决
Trainer
- 不需要任何修改就可以跑 DDP
- 准确率的坑:数据划分的随机性导致