docker内实现多机多卡分布式训练
1. 多台docker宿主机网络配置
https://docs.docker.com/network/overlay/
这里需要创建overlay网络使得多台宿主机的容器可以通过网络连接
初始化swarm集群,并设置主节点(当前节点ip)
在其他节点运行以上蓝色框内的命令以作为worker 节点加入该集群
docker swarm join --token SWMTKN-1-35a9fwltowe90q1p4zyqnz110w9oenf0huoljje7n03kice4ae-byq3wrcqpr50i622z8foy5f0l 10.112.205.39:2377
然后可以在该worker节点上运行docker info
查看,对应Swarm的内容,以下显示10.112.57.233 已经作为非管理者的身份加入集群
加入后可以在管理节点上运行docker node ls
查看集群状态
2. 创建overlay 网络
在集群里创建一个my-attachable-overlay的虚拟网络 创建overlay 网络,名字任取。这里是jxh-overlay
使用创建的overlay 网络建立容器,启动容器时使用创建的网络
docker run -it --privileged=true --runtime=nvidia --gpus all --net=jxh-overlay -v /home/jxh/nccl:/home/nccl --name nccl nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 bash
以该网络创建的容器间可以直接通信.
两边容器都启动后,可以ifconfig分别查看机器分配到的IP
然后互相可以ping一下试试,应该是可以ping通的
3. 注意
注意:这里使用overlay网络模式创建的docker重启后分配的ip是会变的,在实际多机多卡训练中需要每次看一下分配的ip再更改一下节点列表