单机多卡训练-DDP

DDP原理:

为什么快?

DDP通过Ring-Reduce(梯度合并)的数据交换方法提高了通讯效率,并通过启动多个进程的方式减轻Python GIL的限制,从而提高训练速度。

神经网络中的并行有以下三种形式:

  1. Data Parallelism
    1. 这是最常见的形式,通俗来讲,就是增大batch size提高并行度。
      1. 平时我们看到的多卡并行就属于这种。比如DP、DDP都是。这能让我们方便地利用多卡计算资源。
    2. 能加速。
  2. Model Parallelism
    1. 把模型放在不同GPU上,计算是并行的。
    2. 有可能是加速的,看通讯效率。
  3. Workload Partitioning
    1. 把模型放在不同GPU上,但计算是串行的。
    2. 不能加速。

参考:[原创][深度][PyTorch] DDP系列第一篇:入门教程 - 知乎 (zhihu.com)

[原创][深度][PyTorch] DDP系列第一篇:入门教程 - 知乎 (zhihu.com)

注意点:

  1. 保存模型:

考虑到以后可能需要单卡加载你多卡训练的模型 ,建议在保存模型时,去除模型参数字典里面的module,如何去除呢,使用model.module.state_dict()代替model.state_dict()

2. 每一个epoch里面真正的打乱数据

复制代码
for epoch in range(args.num_epochs):
    train_sampler.set_epoch(epoch)  # shuffle数据
相关推荐
西岭千秋雪_1 分钟前
Redis性能优化
数据库·redis·笔记·学习·缓存·性能优化
随便取个六字2 分钟前
GIT操作 学习
git·学习
chuanauc5 分钟前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉9 分钟前
docker学习二天之镜像操作与容器操作
学习·docker·容器
小张是铁粉34 分钟前
oracle的内存架构学习
数据库·学习·oracle·架构
HERR_QQ1 小时前
【unify】unify的微信小程序开发学习 (to be continued)
学习·微信小程序·小程序
码荼10 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud
武昌库里写JAVA11 小时前
Oracle如何使用序列 Oracle序列使用教程
java·开发语言·spring boot·学习·课程设计
祁思妙想12 小时前
八股学习(三)---MySQL
数据库·学习·mysql
amazinging12 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十一天
python·学习·appium