Horovod安装

部署运行你感兴趣的模型镜像

Horovod需要mpi进行通信,NCLL和CUDA进行编译,所以安装Horovod前需要先安装相应的依赖。

环境说明

  • centos7 x64
  • openmpi 4.0.2
  • nccl nccl-repo-rhel7-2.6.4-ga-cuda10.0-1-1
  • cuda cuda_10.0.130_410.48_linux
  • cudnn 7.6.5
  • tensorflow-gpu 1.14.0
  • torch 1.1.0
  • Keras 2.2.4
  • horovod 0.19.1

open mpi安装

参考链接: How do I build Open MPI?
下载地址:download

1. 下载openmpi

可以前往下载地址下载对应的安装包后上传到服务器,也可以在服务器用wget进行下载,这里使用wget下载版本为4.0.2的openmpi

wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.2.tar.gz复制代码

2. 解压、编译、安装

tar -zxvf openmpi-4.0.2.tar.gz
cd openmpi-4.0.2
mkdir /usr/local/openmpi-4.0.2
./configure --prefix=/usr/local/openmpi-4.0.2
make all install复制代码

3. 配置环境变量

/etc/profile文件中添加以下内容:

# openmpi
export OPENMPI_HOME=/usr/local/openmpi-4.0.2
export PATH=$PATH:$OPENMPI_HOME/bin复制代码

然后source /etc/profile一下使其生效

4. 测试

进入openmpi安装包目录/examples(注意是安装包目录/opt/openmpi-4.0.2不是安装目录/usr/local/openmpi-4.0.2

make
./hello_c复制代码

如果出现以下内容表示ok:

Hello, world, I am 0 of 1, (Open MPI v4.0.2, package: Open MPI root@dp-master Distribution, ident: 4.0.2, repo rev: v4.0.2, Oct 07, 2019, 109)复制代码

NCCL安装

参考地址:nccl-install-guide
下载地址:NVIDIA Collective Communications Library (NCCL) Download Page

1. 安装NCLL

下载好对应版本的NCLL后将NCLL上传到服务器,不同的系统的安装文件和执行命令不一致需要注意(90和25x系统不一样):

centos:

sudo rpm -ivh nccl-repo-rhel7-2.6.4-ga-cuda10.0-1-1.x86_64.rpm --force --nodeps
sudo yum update
sudo yum install -y libnccl libnccl-devel libnccl-static复制代码

ubuntu:

sudo dpkg -i nccl-repo-ubuntu1804-2.6.4-ga-cuda10.0_1-1_amd64.deb
sudo apt update
sudo apt install libnccl2 libnccl-dev复制代码

CUDA安装

参考文档:

  1. Centos 7 安装Cuda10 过程记录
  2. 总结在CentOS7上搭建CUDA10+cudnn7的Tensorflow-gpu环境的经验

1. 检测显卡驱动

lspci  | grep -i vga

01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1080] (rev a1)复制代码

如果出现上述的结果表明已经有显卡驱动,如果没有的话,可参照centos 安装 nvidia的两种方式 进行安装

2. 禁用Nouveau驱动

centos默认是有Nouveau驱动的,以下命令有任何输出表示还没有禁用(否则跳过):

lsmod | grep nouveau复制代码

通过在/etc/modprobe.d/blacklist.conf添加以下内容后重启机器实现Nouveau的禁用:

blacklist nouveau
options nouveau modeset=0复制代码

reboot重启

3. cuda安装

前往CUDA Toolkit Archive寻找适合的版本下载安装包,这里使用的是10.0版本的(tensorflow1.14未对10.1进行测试):

wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda_10.0.130_410.48_linux复制代码

 

然后执行以下命令进行安装:

init 3
# 如果默认可以加上 --silent
sudo sh cuda_10.0.130_410.48_linux.run复制代码

在安装前需要执行init 3这个命令,不然会报以下错误:

The file '/tmp/.X0-lock' exists and appears to contain the process ID '3031' of a runnning X server.复制代码

解决参考文档为:How to install NVIDIA.run?

安装完成后在/etc/profile中添加以下配置:

export PATH=$PATH:/usr/local/cuda-10.0/bin 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64复制代码

执行source /etc/profile使其修改生效

执行nivdia-smi测试

cudnn安装

安装好显卡驱动和CUDA后还需要安装cudnn算法才能使用GPU,使用以下命令进行CUDA的安装:

conda install -y cudatoolkit=10.0
conda install -y cudnn复制代码

如果找不到版本可以指定库下载:

conda install -y cudatoolkit=10.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/复制代码

gcc、g++升级

安装编译horovod时需要gcc >= 4.8.5 g++ >= 4.9,centos中自带的版本是4.8.5的,需要升级为高版本的。参考文档:centos7使用yum升级gcc

sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
which gcc
gcc --version
g++ --version复制代码

horovod安装

参考地址1:Install
参考地址2:Horovod Installation Guide

1. 安装horovod

horovod编译的时候需要cpu版本和GPU版本的tensorflow,要确保环境中两者都安装了,不然会触发下载最新版本的tensorflow的操作(这个不确定什么原因,但是我自己安装的时候如果没有CPU版本就自动触发下载tensorflow-2.0版本,所以我都安装了再编译horovod,如果没有这种情况则直接编译即可)

horovod是通过pip安装的,服务器中的python是由conda管理,所以先进入conda对应的环境,然后执行安装命令:

conda activate ai
# 编译horovod需要CPU版本的不知道为什么,不存在就会去下载最新的tensorflow和pytorch
pip install tensorflow==1.14 tensorflow-gpu==1.14

# 编译
HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_GPU_BROADCAST=NCCL HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1 pip install --no-cache-dir horovod[tensorflow,keras,pytorch]

# 编译完要卸载所有tensorflow,然后重装tensorflow-gpu,不然只能用CPU很奇怪
pip uninstall -y tensorflow tensorflow-gpu tensorflow-estimator tensorboard
pip install tensorflow-gpu==1.14

# 测试horovod支持的框架是否包含tensorflow和pytorch
horovodrun -cb

# --测试GPU是否可用--
# 检测可用device
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

# 测试GPU是否可用
import tensorflow as tf
tf.test.is_gpu_available()复制代码

2. 测试

测试参考我的另一篇文章:horovod测试

3. 问题解决:

问题1:

Could not load dynamic library 'libnvinfer_plugin.so.6'; dlerror: libnvinfer_plugin.so.6: cannot open shared object file: No such file or directory

W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:30] Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.复制代码

解决方法

参考(需要注意里面关于显卡驱动安装的版本是否和系统一致):

  1. Could not load dynamic library 'libnvinfer_plugin.so.6' #35968

  2. Could not load dynamic library 'libnvinfer.so.6'

     # 确保/usr/local/cuda-10.1/lib64配置在系统变量LD_LIBRARY_PATH中了
     echo $LD_LIBRARY_PATH
    
     # 如果没有将一下内容补充到/etc/profile中
     export PATH=$PATH:/usr/local/cuda-10.1/bin 
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
    
     # source使其生效
     source /etc/profile复制代码

问题2:

Could not dlopen library 'libcusparse.so.10.0'; dlerror: libcusparse.so.10.0: cannot open shared object file: No such file or directory;复制代码

解决方案

参考:

  1. tensorflow查看使用的是cpu还是gpu

  2. 解决Could not load dynamic library 'libcudart.so.10.0'的问题

     # 这其实是由于tensorflow不支持cuda10.1导致的,卸载cuda10.1重新安装cuda10.0即可 
     cd /usr/local/cuda-10.1/bin/
     # 勾选所有卸载原有的cuda
     sudo ./cuda-uninstaller
     
     # 将下载好的cuda10.0上传到服务器后进入到对应目录
     sudo init 3
     # 别用--silent,重装的时候不用再安装显卡驱动了,不然又得重启
     sudo sh ./cuda_10.0.130_410.48_linux.run
     
     # 安装好后更新/etc/profiled的配置为一下内容
     export PATH=$PATH:/usr/local/cuda-10.0/bin 
     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.0/lib64
     # 使修改生效
     source /etc/profile
     # 重装cuda-toolkit
     conda uninstall -y cudatoolkit
     conda install -y cudatoolkit=10.0
     conda install -y cudnn
     #重装tensorflow  
     pip uninstall -y tensorflow tensorflow-gpu tensorflow-estimator tensorboard
     pip install tensorflow-gpu==1.14复制代码

    执行以下代码进行测试,不报错则完成:

     # 检测可用device
     from tensorflow.python.client import device_lib
     print(device_lib.list_local_devices())
     
     # 测试GPU是否可用
     import tensorflow as tf
     tf.test.is_gpu_available()复制代码

问题3:

horovod.run.common.util.network.NoValidAddressesFound: Unable to connect to the horovodrun task service #1 on any of the addresses复制代码

这个问题是在多机多卡训练的时候发生的,horovod的多节点分布式训练要求每个节点都有能连通的端口,可能会由不一样的情况导致。我这里主要是有个warning表示253期望用enp4s0网卡连接但是用了enp3s0(忘了没保留错误信息),这是因为一次系统异常后网卡驱动名称改了。参照CentOS7网络配置和修改网卡名称及常用服务管理命令将网卡名称改为enp4s0即可。

sudo nmtui
sudo reboot复制代码

问题4:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.复制代码

应该是显卡驱动出问题了,重装N卡驱动即可。

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值