Horovod安装文档
**说明:**centos7已停止维护,g++最新版本4.8.5,编译horovod会无法匹配tensorflow最新版本,故此使用Ubuntu Server镜像,centosstream9可直接yum安装g++,cmake,openmpi,会更快捷方便。centosstream9配置同centos,配置见spark集群搭建文档 PySpark开发——Spark分布式集群环境搭建(Linux)_蒲魔树的种子的博客-优快云博客
一、配置单台Ubuntu服务器
-
安装源
# 华为源 http://repo.huaweicloud.com/ubuntu
-
国内源(选修)
# 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
-
配置单台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
-
修改静态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
-
配置环境变量
# 环境变量 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++
-
Ubuntu指令
# 1. 安装g++ apt install gcc apt install g++
三、安装Cmake
-
Ubuntu指令
# 1. 安装cmake apt install cmake
四、安装Open MPI
-
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
-
下载Anaconda3
cd /export/software/ wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
-
安装Anaconda3
# 1. 安装 sh Anaconda3-2022.05-Linux-x86_64.sh # 2. 指定安装目录 /export/server/anaconda3/ # 3. 初始化init yes
-
配置清华源
# 配置清华源 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
-
创建环境,激活
# 创建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
-
安装tensorflow
# 安装tensorflow pip install tensorflow
-
安装horovod
# 安装horovod(初次安装) pip install horovod # 安装horovod(非初次安装,禁用缓存) pip install --no-cache-dir horovod
-
若有需要,可以提前安装一下docker
curl -sSL https://get.daocloud.io/docker | sh
七、复制Linux,配置集群
-
同spark配置文档
# 1. 修改hostname vim /etc/hostname # 修改IP地址 ll /etc/netplan/ vim /etc/netplan/00-installer-config.yaml netplan apply
-
免密登录
# 三台虚拟机相互登录 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执行)
-
NFS服务器设置
# 见Horovod-docker相关章节
Horovod-docker安装文档
一、同一(Horovod安装文档,不用配置环境变量)
二、安装Horovod-docker
-
安装docker
curl -sSL https://get.daocloud.io/docker | sh
-
拉取horovod镜像
docker pull horovod/horovod-cpu
三、复制Linux集群
-
修改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
-
免密登录
# 三台虚拟机相互登录 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)
-
配置主机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
-
配置附属机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
-
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
-
容器内ssh免密登录(二选一)
- 全部免密
# 三台虚拟机相互登录 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执行)
- 有端口的局部免密
- 配置负节点 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