深度学习分布式训练实战(一)

本文探讨了深度学习的分布式训练,包括单机单卡、单机多卡和多机多卡训练方式,分析了为何使用分布式训练,以及Batch Size对训练的影响。介绍了数据并行、模型并行和混合并行的实现方式,并讨论了多GPU训练的参数更新策略,同步更新与异步更新的优缺点。
摘要由CSDN通过智能技术生成

本系列博客主要介绍使用Pytorch和TF进行分布式训练,本篇重点介绍相关理论,分析为什么要进行分布式训练。后续会从代码层面逐一介绍实际编程过程中如何实现分布式训练。


常见的训练方式

单机单卡(单GPU)

这种训练方式一般就是在自己笔记本上,穷学生专属。 : )
就是一台机器,上面一块GPU,最简单的训练方式。示例代码[2]:

#coding=utf-8
#单机单卡
#对于单机单卡,可以把参数和计算都定义再gpu上,不过如果参数模型比较大,显存不足等情况,就得放在cpu上
import  tensorflow as tf
 
with tf.device('/cpu:0'):#也可以放在gpu上
    w=tf.get_variable('w',(2,2),tf.float32,initializer=tf.constant_initializer(2))
    b=tf.get_variable('b',(2,2),tf.float32,initializer=tf.constant_initializer(5))
 
with tf.device('/gpu:0'):
    addwb=w+b
    mutwb=w*b
    
ini=tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(ini)
    np1,np2=sess.run([addwb,mutwb])
    print np1
    print np2 

单机多卡(多GPU并行)

一台机器上可以配置4块GPU或者更多,如果我们在8块GPU上都跑一次BP算法计算出梯度,把所有GPU上计算出道梯度进行平均,然后更新参数。这样的话,以前一次BP只能喂1个batch的数据,现在就是8个batch。理论上来说,速度提升了8倍(除去GPU通信的时间等等)。这也是分布式训练提升速度的基本原理。

以前不理解,为什么这样就会收敛快!这种做法,其实就是单位时间内让模型多“过一些”数据。原因是这样的,梯度下降过程中,每个batch的梯度经常是相反的,也就是前后两次的更新方向相互抵消,导致优化过程中不断震荡,如果我用多块GPU,那么每次不同GPU计算出来的梯度就会取平均互相抵消,避免了这种情况的出现。示意图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值