6.1.4.3. 多机使用说明

6.1.4.3.1. 1. 环境准备

准备两台开发机,确保两者直接可以免密登录。

保证两台开发机上一会儿需要运行的代码的的文件目录和内容是一样的。

6.1.4.3.2. 2. 启动docker

在第一台机器上启动docker。

nvidia-docker run -d -p 10022:22 -it --shm-size="15g" -v ~/.ssh:/root/.ssh ${DOCKER_PATH} /bin/bash

docker exec -it 096e26686644 bash

其中096e26686644是第一步启动容器的镜像名字,可以使用docker ps查看。

在第二台机器上启动docker。

nvidia-docker run -d -p 10023:22 -it --shm-size="15g" -v ~/.ssh:/root/.ssh ${DOCKER_PATH} /bin/bash

docker exec -it f0f456bd2824 bash

这里注意映射ssh的端口号变了,第一台机器是10022,第二台机器是10023,保证两者不一样即可。

为了保证两台开发机docker内部的开发目录是一样的,可以使用-v挂载相同的开发目录即可。

另外可以测试两个docker容器之间是否可以免密登录:使用ifconfig命令查看第二台机器上的容器的ip地址,例如是:172.17.0.12,回到第一台机器上的容器,使用ssh -p 22 172.17.0.12,观察两台机器是否可以免密登录。如果可以了就可以进行下一步了。

6.1.4.3.3. 3. 使用mpirun启动多机多卡训练脚本

mpirun -n 8 -ppn 4 --hostfile mpi_hosts python3 tools/train.py --step float --config configs/classification/mobilenetv1.py --dist-url tcp://172.17.0.9:8000 --launcher mpi

172.17.0.9表示第一台机器上的容器的ip地址,使用ifconfig即可查看;

-n 8: 8表示总的进程数,它的值等于机器数量*每个机器上gpu的数量;

-ppn 4: 4表示每个机器上gpu的数量;(你可能需要手动把configs/classification/mobilenetv1.py文件中的gpu数量改为4个)

mpi_hosts: 当前目录下的一个文件,存放的是两台机器上的容器的ip地址,在这里就是:

172.17.0.9
172.17.0.12

运行该命令就可以看到多机多卡的事例正确运行了。