参考0:https://blog.csdn.net/qq_35985044/article/details/108309781 (讲的最好)
https://blog.csdn.net/weixin_38278334/article/details/105605994
参考1:https://zhuanlan.zhihu.com/p/86441879 (特别详细)
参考2:https://blog.csdn.net/weixin_44019216/article/details/106171189 (特别详细)
参考3:https://blog.csdn.net/zwqjoy/article/details/89415933 (适合用于写代码参考,里面有Minist作为例子)
参考4:https://zhuanlan.zhihu.com/p/98535650 (特别详细)
参考5:https://zhuanlan.zhihu.com/p/76638962?utm_source=wechat_session
参考6:https://blog.csdn.net/baidu_19518247/article/details/89635181
参考7:https://blog.csdn.net/weixin_36670529/article/details/104018195
参数说明:
1. world_size:为分布式主机的个数。介绍都是说是进程, 实际就是机器的个数, 例如两台机器一起训练的话, world_size就设置为2
2. rank:为分布式主机的编号。该参数指定主机的优先级。rank=0 为 master 节点。
区分主节点和从节点的, 主节点为0, 剩余的为了1-(N-1), N为要使用的机器的数量, 也就是world_size
3. local_rank:进程内,GPU 编号。
rank是标识主机和从机的, world_size是标识使用几个主机。
init_method方法介绍
init_method(str,optional): 用来初始化包的URL, 我理解是一个用来做并发控制的共享方式
其中初始化方式有三种:
TCP initialization
tcp:// IP组播(要求所有进程都在同一个网络中)比较好理解, 以TCP协议的方式进行不同分布式进程之间的数据交流,需要设置一个端口,不同进程之间公用这一个端口,并且设置host的级别和host的数量。设计两个参数rank和world_size。其中rank为host的编号,默认0为主机,端口应该位于该主机上。world_size为分布式主机的个数。
具体的可以初始化为:tcp://127.0.0.1:12345。注意这个IP是127.0.0.1, 端口是12345。
注意:127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
不同进程内,均使用主进程的 ip 地址和 port,确保每个进程能够通过一个 master 进行协作。
Shared file-system initialization
file:// 共享文件系统(要求所有进程可以访问单个文件系统)有共享文件系统可以选择
提供的第二种方式是文件共享,机器有共享的文件系统,故可以采用这种方式,也避免了基于TCP的网络传输。这里使用方式是使用绝对路径在指定一个共享文件系统下不存在的文件。
具体的:file://PathToShareFile/MultiNode
Environment variable initialization
env:// 环境变量(需要您手动分配等级并知道所有进程可访问节点的地址)默认是这个
网友评论