深度学习单机多卡/多机多卡训练

一、概念的区分

分布式:是指多台机器的多块GPU,也就是多机多卡。

并行:指的一台机器上的多个GPU。也就是单机多卡。

同步更新:是指所有的GPU都计算完梯度之后,累加到一起求均值进行参数更新,再进行下一轮。

rank表示全局进程序号,local_rank表示本机子的进程序号。world_size表示全局进程个数。

举个例子,三台机器,每台机器四张卡全部用上,那么有group=1,world size=12

机器一:node=0 rank=0,1,2,3 local_rank=0,1,2,3 这里的node=0,rank=0的就是master

机器二:node=1 rank=4,5,6,7 local_rank=0,1,2,3

机器三:node=2 rank=8,9,10,11 local_rank=0,1,2,3

二、DP和DDP(pytorch内的)

DP(DataParallel)模式主要支持单机多卡。其中有一个进程,多个线程(受全局解释器锁限制),local_rank0为master节点,相当于参数服务器,向其他GPU广播参数,在反向传播后,各卡将梯度集中到master节点,求平均更新参数,再将参数发送到其他卡上。训练时需要指定GPUS和master节点。

DDP(DistributedDataParallel)支持分布式多机多卡训练,也支持单机多卡训练。相对于DP其有多个进程进行并行训练,没有全局解释器锁的限制。同时模型广播只在初始化时广播一次,而不用像DP那样,每次前向传播前都要广播。因为DDP每个进程都有自己独立的优化器,执行自己的更新过程,而梯度通过通信传递到每个进程,所以执行的内容是相同的。

DDP与DP的另一个不同就是我们需要用DistributedSample来对我的dataset进行处理,这样每个进程都只会调用一部分的数据集。不同的进程间就不会发生数据的交互。不然如果使用默认的DP的数据分配方式,就会出现多机通信的一个问题,很耗时。DP是把batch_size个数据切分到不同的卡上。比如batch_size30,两个GPU,那么每个GPU实际的bs为15.而DDP的话,batch_size为30,表示的是每个卡都是30的batch_size.

三、SyncBN

标准的BN因为使用数据并行(DP),所以只对单卡上的样本进行归一化,这样batch_size就很小,影响模型收敛。而syncbn则是在前向传播时求全局数据的一个均值和方差(多机多卡,单机多卡),然后通过消息传给每个卡,进行归一化操作。这样就可以防止batch_size太小,导致BN失效的问题。这里提一嘴,一般GPU之间的通信,我们都默认采用的NCCL通信框架。

相关推荐
淬炼之火4 分钟前
基于pycharm和anaconda的yolo简单部署测试
python·深度学习·yolo·pycharm·ultralytics
搞科研的小刘选手1 小时前
【早稻田大学主办】2026年第三届人工智能与未来教育国际学术会议(AIFE 2026)
人工智能·机器学习·数据挖掘·机器人·未来教育·远程教育·移动学习
数据与人工智能律师1 小时前
解码Web3:DeFi、GameFi、SocialFi的法律风险警示与合规路径
大数据·网络·人工智能·云计算·区块链
Best_Me071 小时前
理解AUROC,AP,F1-scroe,PRO
人工智能·机器学习
IT_陈寒1 小时前
React 性能优化:5个实战技巧让首屏加载提升50%,开发者亲测有效!
前端·人工智能·后端
久未1 小时前
Pytorch autoload机制自动加载树外扩展(Autoload Device Extension)
人工智能·pytorch·python
Apifox.1 小时前
如何在 Apifox 中通过 AI 一键生成几十个测试用例?
人工智能·程序人生·ai·测试用例·ai编程
java1234_小锋1 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 使用Keras.Model来定义模型
python·深度学习·tensorflow·tensorflow2
Learn Beyond Limits2 小时前
TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
人工智能·python·深度学习·机器学习·ai·tensorflow·吴恩达
java1234_小锋2 小时前
TensorFlow2 Python深度学习 - 函数式API(Functional API)
python·深度学习·tensorflow·tensorflow2