Horovod分布式搭建——UbuntuServer 22.04

Horovod安装文档

**说明:**centos7已停止维护,g++最新版本4.8.5,编译horovod会无法匹配tensorflow最新版本,故此使用Ubuntu Server镜像,centosstream9可直接yum安装g++,cmake,openmpi,会更快捷方便。centosstream9配置同centos,配置见spark集群搭建文档 PySpark开发——Spark分布式集群环境搭建(Linux)_蒲魔树的种子的博客-CSDN博客

一、配置单台Ubuntu服务器

  1. 安装源

    # 华为源
    http://repo.huaweicloud.com/ubuntu
    
  2. 国内源(选修)

    # 1. 清华源
    vim /etc/apt/sources.list
    
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
    deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
    
  3. 配置单台Ubuntu Server 22.04

    # 1. 登录
    user
    "password"
    
    # 2. 开机设置Root密码
    sudo passwd root
    su
    
    # 3. 安装net-tools(ifconfig)
    apt install net-tools
    
    # 4. 查看IP地址
    ifconfig
    
    # 5. SSH远程登录
    ssh user@192.168.172.136
    
    # 6. 设置允许Root用户SSH登录
    su
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    service ssh restart
    
    # 7. 快速ssh
    vim /etc/ssh/sshd_config
    GSSAPIAuthentication no
    UsePAM no
    UseDNS no
    sudo service ssh restart
    
    # 8. 修改host
    vim /etc/hosts
    192.168.172.131 node1
    192.168.172.132 node2
    192.168.172.133 node3
    
    # 9. 创建文件夹
    mkdir -p /export/software/
    mkdir -p /export/server/
    
    # 10. 时间同步
    apt install ntpdate
    timedatectl set-timezone Asia/Shanghai
    ntpdate ntp.ntsc.ac.cn
    
    # 11. 关机慢
    vim /etc/systemd/system.conf
    DefaultTimeoutStartSec=10s
    DefaultTimeoutStopSec=10s
    sudo systemctl daemon-reload
    
    # 12. 关闭防火墙,即SELinux (22.04默认全部关闭)
    ufw enable
    vim /etc/selinux/config
    SELINUX=disabled
    
  4. 修改静态IP

    ll /etc/netplan
    vim /etc/netplan/00-installer-config.yaml
    
    # This is the network config written by 'subiquity'
    network:
      ethernets:
        ens33:
          dhcp4: false
          dhcp6: false
          addresses:
          - 192.168.172.131/24
          routes:
          - to: default
            via: 192.168.172.2
          nameservers:
           addresses: [192.168.10.20,192.168.10.21]
      version: 2
    
    netplan apply
    
  5. 配置环境变量

    # 环境变量
    vim /etc/profile
    vim ~/.bashrc
    
    # Anaconda
    export ANACONDA_HOME=/export/server/anaconda3
    export PATH=$PATH:$ANACONDA_HOME/bin
    
    # Open MPI
    export OMPI_ALLOW_RUN_AS_ROOT=1
    export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
    
    # 中文显示
    export LC_ALL=zh_CN.UTF-8
    
    # 激活环境
    source /etc/profile
    source ~/.bashrc
    

二、安装g++

  1. Ubuntu指令

    # 1. 安装g++
    apt install gcc
    apt install g++
    

三、安装Cmake

  1. Ubuntu指令

    # 1. 安装cmake
    apt install cmake
    

四、安装Open MPI

  1. Ubuntu指令

    # 1. 下载openmpi-4.1.4
    cd /export/software/
    wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.4.tar.gz
    
    # 2. 解压openmpi-4.1.4
    tar -zxvf openmpi-4.1.4.tar.gz -C /export/server/
    
    # 3. 进入解压目录
    cd /export/server/openmpi-4.1.4
    
    # 4. 指定编译位置
    ./configure --enable-orterun-prefix-by-default
    
    # 5. 编译
    make -j $(nproc) all
    
    # 6. 安装
    make install
    
    # 7. 加载
    ldconfig
    
    # 8. 测试
    cd /export/server/openmpi-4.1.4/examples
    make
    ./hello_c
    

五、安装Anaconda3

  1. 下载Anaconda3

    cd /export/software/
    wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
    
  2. 安装Anaconda3

    # 1. 安装
    sh Anaconda3-2022.05-Linux-x86_64.sh
    
    # 2. 指定安装目录
    /export/server/anaconda3/
    
    # 3. 初始化init
    yes
    
  3. 配置清华源

    # 配置清华源
    vim ~/.condarc
    
    channels:
      - defaults
    show_channel_urls: true
    default_channels:
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
      - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
    custom_channels:
      conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
      simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    
    # 镜像源生效
    conda clean -i
    
    # 重新登录
    logout
    ssh root@node1
    
  4. 创建环境,激活

    # 创建horovod虚拟环境
    conda create -n horovod python=3.9 -y
    
    # 激活环境
    conda activate horovod
    
    # 配置pip源(二选一,华为更快,清华更新)
    pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    

六、安装horovod

  1. 安装tensorflow

    # 安装tensorflow
    pip install tensorflow
    
  2. 安装horovod

    # 安装horovod(初次安装)
    pip install horovod
    
    # 安装horovod(非初次安装,禁用缓存)
    pip install --no-cache-dir horovod
    
  3. 若有需要,可以提前安装一下docker

    curl -sSL https://get.daocloud.io/docker | sh
    

七、复制Linux,配置集群

  1. 同spark配置文档

    # 1. 修改hostname
    vim /etc/hostname
    
    # 修改IP地址
    ll /etc/netplan/
    vim /etc/netplan/00-installer-config.yaml
    netplan apply
    
  2. 免密登录

    # 三台虚拟机相互登录
    ssh-keygen -t rsa (node1、node2、node3)
    ssh-copy-id node1 (node1、node2、node3)
    
    scp /root/.ssh/authorized_keys node2:/root/.ssh  (分发:仅在node1执行)
    scp /root/.ssh/authorized_keys node3:/root/.ssh  (分发:仅在node1执行)
    scp /root/.ssh/authorized_keys node4:/root/.ssh  (分发:仅在node1执行)
    
  3. NFS服务器设置

    # 见Horovod-docker相关章节
    

Horovod-docker安装文档

一、同一(Horovod安装文档,不用配置环境变量)

二、安装Horovod-docker

  1. 安装docker

    curl -sSL https://get.daocloud.io/docker | sh
    
  2. 拉取horovod镜像

    docker pull horovod/horovod-cpu
    

三、复制Linux集群

  1. 修改IP与hostname

    # 1. 修改hostname
    vim /etc/hostname
    node2/node3
    
    # 2. 修改静态IP
    ll /etc/netplan
    vim /etc/netplan/00-installer-config.yaml
    
    # 静态IP设置
    network:
      ethernets:
        ens33:
          dhcp4: false
          dhcp6: false
          addresses:
          - 192.168.172.131/24
          routes:
          - to: default
            via: 192.168.172.2
          nameservers:
           addresses: [192.168.10.20,192.168.10.21]
      version: 2
    
    # 应用静态IP
    netplan apply
    
  2. 免密登录

    # 三台虚拟机相互登录
    ssh-keygen -t rsa (node1、node2、node3)
    ssh-copy-id node1 (node1、node2、node3)
    
    scp /root/.ssh/authorized_keys node2:/root/.ssh  (分发:仅在node1执行)
    scp /root/.ssh/authorized_keys node3:/root/.ssh  (分发:仅在node1执行)
    

四、配置nfs文件共享服务器

说明:转自horovod多机多卡启动指南 | 技术自留地 (chaopeng.name)

  1. 配置主机NFS服务:node1

    # ==========================================node1=========================================== #
    #1. 安装nfs服务器
    sudo apt install nfs-kernel-server
    
    #2. 编写配置文件
    sudo vim /etc/exports
    ## 末尾追加
    /export/data/share *(rw,sync,no_subtree_check,no_root_squash)
    
    #3. 创建共享目录
    sudo mkdir -p /export/data/share
    
    #4. 重启nfs服务
    sudo service nfs-kernel-server restart
    
    #5. 常用命令工具:
    ## 显示已经mount到本机nfs目录的客户端机器。
    sudo showmount -e localhost
    
    ## 将配置文件中的目录全部重新export一次!无需重启服务。
    sudo exportfs -rv
    
    ## 查看NFS的运行状态
    sudo nfsstat
    
    ## 查看rpc执行信息,可以用于检测rpc运行情况
    sudo rpcinfo
    
    ## 查看网络端口,NFS默认是使用111端口。
    sudo netstat -tu -4
    
  2. 配置附属机NFS服务:node2、node3、…、node n

    # ===================================node2、node3..======================================== #
    #1. 安装nfs客户端
    sudo apt install nfs-common
    
    #2. 查看NFS服务器上的共享目录
    sudo showmount -e node1
    
    #3. 创建本地挂载目录
    sudo mkdir -p /export/data/share
    
    #4. 挂载共享目录(node1不生效就直接写IP地址)
    sudo mount -t nfs node1:/export/data/share /export/data/share
    
    #5. 挂载Windows共享网盘命令(针对windows共享)
    mount -t cifs -o username=1945,password=.... //192.168.248.1/data/share /export/data/share
    

五、配置horovod-docker

  1. horovod-docker配置

    # 1. 建立容器
    docker run -itd --net=host -v /export/data1:/export/data1 --name horovod --shm-size=126g horovod/horovod-cpu bash
    
    # 2. 运行容器
    ## 首次运行(安装时)
    docker exec -it horovod bash
    
    ## 使用运行(非安装)
    docker ps -a (获取容器your_id)
    docker start your_id
    docker exec -it horovod bash
    
  2. 容器内ssh免密登录(二选一)

    1. 全部免密
    # 三台虚拟机相互登录
    ssh-keygen -t rsa (node1、node2、node3)
    ssh-copy-id node1 (node1、node2、node3)
    
    scp /root/.ssh/authorized_keys node2:/root/.ssh  (分发:仅在node1执行)
    scp /root/.ssh/authorized_keys node3:/root/.ssh  (分发:仅在node1执行)
    
    1. 有端口的局部免密
      1. 配置负节点 node2 、node3 …
    #1. 修改sshd配置
    vim /etc/ssh/sshd_config
    #2. 改动如下
    Port 10086
    PermitRootLogin yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
    #3. 保存配置,启动sshd
    /usr/sbin/sshd
    #4. 查看ssh是否启动
    ps -ef | grep ssh
    

    ​ 2. 配置 node1 到 node2 / node3 节点的免密登录

    #1. 生成秘钥
    ssh-keygen -t rsa
    #2. 在node2上创建.ssh文件夹
    ssh -p 10086 node2 mkdir -p .ssh
    #3. 将公钥添加到B的authorized_keys里
    cat /root/.ssh/id_rsa.pub | ssh -p 10086 node2 'cat >> .ssh/authorized_keys'
    #测试是否可以免密登录
    ssh -p 10086 node2
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值