当前位置:网站首页>Pytorch分布式训练/多卡训练DDP——模型初始化(torch.distribute 与 DDP的区别)
Pytorch分布式训练/多卡训练DDP——模型初始化(torch.distribute 与 DDP的区别)
2022-08-09 22:05:00 【hxxjxw】
最近看b站上霹雳吧啦Wz的多卡训练教程发现他有在模型初始化的时候,手动将主卡的模型初始化权重load到其他卡上。而之前在知乎或CSDN上看到的教程并没有这么做
所以这一步到底是不是应该的呢
根据 [原创][深度][PyTorch] DDP系列第二篇:实现原理与源代码解析 - 知乎 (zhihu.com)
model = DDP(model)
当执行了这一步之后,DDP做的事是
- 把parameter,buffer从master节点传到其他节点,使所有进程上的状态一致。
DDP通过这一步保证所有进程的初始状态一致。所以,请确保在这一步之后,你的代码不会再修改模型的任何东西了,包括添加、修改、删除parameter和buffer!
从本质上讲,当一个模型的网络结构被定义后,其状态就是由parameter和buffer的迭代组合表示的。当我们保存模型,调用
model.staic_dict()的时候,我们同时会得到模型的parameter和buffer;也就是说,在DDP中,如果我们要在不同进程中维持相同的状态,我们不光要传递parameter的梯度,也要传递buffer。事实上,DDP就是这么做的。当每次网络传播开始前,其都会把master节点上的buffer广播给其他节点,维持状态的统一。所以,在外套DDP之前,模型只是在主卡上有,此时模型初始化,再套DDP之后,模型和初始化的权值会传到其他节点,保持一致
所以,在模型初始化的时候,手动将主卡的模型初始化权重load到其他卡上是没必要的,除非是在外套DDP之后再初始化
torch.distributed 做的事只是多卡通讯
模型,梯度传递这些都是DDP做的
边栏推荐
猜你喜欢
随机推荐
In-depth analysis of Apache EventMesh cloud-native distributed event-driven architecture
Analyses the development status quo of stock trading
EasyExcel使用
&&、||、&、|
用PLSQL导出Oracle一个表
Five Star Holdings Wang Jianguo: Deepen the track with "plant spirit" and promote growth with "animal spirit"
第十七期八股文巴拉巴拉说(数据库篇)
Flask introductory learning tutorial
Chapter 15 HMM模型
Space not freed after TRUNCATE table
How do task flow executors work?
继承关系下构造方法的访问特点
C 在函数声明前加typedef
OSG笔记:使用setFontResolution设置字体分辨率
Bi Sheng Compiler Optimization: Lazy Code Motion
【技术分享】SLA(服务等级协议)原理与配置
【Leetcode】2104. Sum of Subarray Ranges
信息系统项目管理师---第十一章项目风险管理历年考题
小程序+自定义插件的关键性
Socket发送缓冲区接收缓冲区快问快答









