Deep Learning分布式训练2.2---Horovod in Docker

上一篇记录了单机多卡训练,就是在一台机器上使用多张卡训练模型(我的老板说这不算是分布式🤫)

下面通过创建两个容器,模拟分布式训练,

设计难点:

(1)容器之间免密连接,就这个 了!!!!

下面是实现步骤了:

前提

有docker、nvidia-docker、horovod

创建image,实现容器间免密登录

(我这里直接使用DockerHub提供的horovod镜像作为基础镜像,在此基础上进行修改的,大家也可以使用源代码提供的Dockerfile,进行更改)

下面是我运行的dockerfile脚本

# basic image from DockerHub
FROM horovod/horovod
# 若大家的机器可以随意访问外网,这里的export以及最下面的三句export可以不写
RUN export http_proxy= 对应的代理地址 && \ 
    export https_proxy= 对应的代理地址 && \
    export no_proxy= 对应的代理地址 && \
    # install openssh-server
    apt-get update && apt-get install -y openssh-server && \ 
    # passwordless 
    ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' && cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && \
    chmod 600 /root/.ssh/authorized_keys && \
    # ssh_config is for client,sshd_config is for server
    # the following two sentences: sshd服务的那边的配置,一个是允许空密码,一个是允许root密码登录。 
    sed -i 's/PermitEmptyPasswords yes/PermitEmptyPasswords no /' /etc/ssh/sshd_config && \
    sed -i 's/PermitRootLogin without-password/PermitRootLogin yes /' /etc/ssh/sshd_config && \
    # the following two sentences: ssh_config的配置是描述 ssh客户端发起请求的时候不再提示需要检查对方是不是在knowhosts列表中.后面这个不配置的话,会跳出一个交互性的会话框,要输入yes
    echo " StrictHostKeyChecking no" >> /etc/ssh/ssh_config && \
    echo " UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config && \
    # cancel proxy 镜像构建完后取消代理,不然生成的镜像之后不好使用
    export HTTP_PROXY="" && \
    export HTTPS_PROXY="" && \
    export NO_PROXY=""

构建镜像

docker build -t horovod:test1 .
# 这里的horovod:test1表示你创建的镜像的标签,后面的.表示运行当前目录下的dockerfile,还有多种构建镜像方式,可google

出现类似这样结果就表示创建镜像成功:

进入容器

nvidia-docker run -it horovod:test1 bash
# 同样的,如果有访问外网的限制,上述命令中可写为
# nvidia-docker run -it -e http_proxy="xxx" -e https_proxy="xxx" -e no_proxy="xxx" horovod:test1 bash  这里面的xxx是你的服务器的IP地址和端口

进入容器后,启动sshd服务

(每个容器进入后都要启动sshd服务才可以哟)

/sbin/sshd命令

此时,

ssh root@容器IP

便可以访问其他容器了,

exit

可退出其他容器,回到上一级容器内

注:如何查看容器IP,在进入容器之前,输入命令:

docker inspect 容器id
# 容器id可通过docker ps查看,或者你在进入容器后root@xxxxx中的xxxx就是id,取前四位就可以了

 开始训练

在其中一个容器内,输入

horovodrun -np 4 -H 172.17.0.3:2,172.17.0.4:2 python pytorch/pytorch_mnist.py
# 这里的172.17.0.3和172.17.0.4分别是两个容器的IP地址

其中,

当使用-H指定多个主机时,这里的-np就是所有主机上可用的和。

用卡情况:

暂时完结啦!!!!

后面有机会再更新关于在pod中做容器实现分布式训练。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值