6_分布式训练框架Horovod使用(20190111)

在这里插入图片描述


由于近期需要提高网络训练的速度,所以去找了一条捷径,想走快点,就找到了Horovod框架,对TensorFlow搭建的网络训练提速特别有效,好吧,让我们一起开启愉快的Horovod之旅吧. Oh, no 是痛苦的Horovod之旅吧 !!!


一、Horovod简介

  1. Horovod名字的来源

Horovod,它的名字来自于俄国传统民间舞蹈,舞者手牵手围成一个圈跳舞,与分布式 TensorFlow 流程使用 Horovod 互相通信的场景很像。

  1. Horovod发展史

Horovod是Uber(优步)开源的又一个深度学习工,Horovod在2017年10月,Uber以Apache 2.0授权许可开源发布。Horovod是优步跨多台机器的分布式训练框架,现已加入开源计划LF Deep Learning Foundation。
  Uber利用Horovod来支持自动驾驶汽车,欺诈检测和出行预测。该项目的贡献者包括亚马逊,IBM,英特尔和Nvidia。除了优步,阿里巴巴,亚马逊和Nvidia也在使用Horovod。Horovod项目可以与TensorFlow,Keras和PyTorch等流行框架一起使用。优步于上个月加入了Linux基金会,并加入了其他科技公司,如AT&T和诺基亚,他们出面支持LF Deep Learning Foundation开源项目。LF深度学习基金会成立于3月,旨在支持深度学习和机器学习的开源项目,并且是Linux基金会的一部分。在推出Acumos(用于训练和部署AI模型)和Acumos Marketplace(AI模型的开放式交易所)推出一个月后,Horovod正式推出。自该基金会启动以来,开展的其他项目包括机器学习平台Angel and Elastic Deep Learning,该项目旨在帮助云服务提供商利用TensorFlow等框架制作云集群服务。百度和腾讯分别于八月份加入这些项目,它们也是LF深度学习基金会的创始成员。

  1. Horovod优点

Horovod能让人工智能开发者轻松的使用TensorFlow、Keras和PyTorch机器学习框架,训练分布式深度学习模型。不少云计算服务都已经集成了Horovod,包括AWS深度学习服务AMI、Azure数据科学虚拟机、Databricks Runtime、GCP深度学习虚拟机、IBM FfDL、IBM Watson Studio和NVIDIA GPU Cloud等。

  1. 其他详细介绍:

请参考:
   这里
   还有这里

  1. Horovod开源项目的github地址

去你的吧 大哥,前面是一个链接,你要点它呀,好吧,我错啦 !

二、Horovod框架的安装 Install

Horovod的安装分成两个步骤:

  • 安装OpenMPI
  • 安装horovod

1、安装OpenMPI

详细参考这里: ——>去你的吧

  1. OpenMPI 1.0.0版本下载

下载地址:点我,我带你走!
下载好的压缩包: 在这里插入图片描述

  1. OpenMPI 安装步骤

1)解压并进行配置

tar -zxvf openmpi-1.8.4.tar.gz
cd openmpi-1.8.4
./configure --prefix="/usr/local/openmpi"

注意最后一行是将其安装到 /usr/local/openmpi目录下,可以指定为其他目录,如,用户目录下。

2)Build 并安装

make      # 编译时间需要耐心等待一会,最好是在后面加上 -j8 参数吧,会快一些,具体是几核,根据自己的PC选择
sudo make install

可以在make后加参数-j8, 表示用8核编译

3)添加环境变量

在.bashrc文件中添加下列几行

export PATH="$PATH:/usr/local/openmpi/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/openmpi/lib/"

保存后,执行

sudo ldconfig

打开新的终端,使环境变量生效。

注意:
可能你去添加环境变量的时候,发现上面的LD_LIBRARY_PATH、PATH 变量中已经有值了,此时只要加个冒号,再添加即可,类似windows添加变量用分号隔开一个道理。

eg: export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64:/usr/local/cuda/extras/CUPTI/lib64:/usr/local/openmpi/lib/"

4) 测试是否安装成功

mpirun   或 which mpirun

在测试样例中进行测试:

cd examples
make
mpirun -np 8 hello_c

结果如下
在这里插入图片描述

2、安装Horovod

这个安装比较简单,第二种是采用国内清华的镜像安装,速度那不是快一点,好吧,你开心就好!!!

pip install horovod
或
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple horovod

安装完毕,下面开始痛苦之旅吧

三、Horovod框架的使用

下面让我带你一起,来看看Horovod的用法吧

1、在项目中使用Horovod框架

Usage: github上给出这样使用


To use Horovod, make the following additions to your program:

  1. Run hvd.init().
  2. Pin a server GPU to be used by this process using config.gpu_options.visible_device_list. With the typical setup of one GPU per process, this can be set to local rank. In that case, the first process on the server will be allocated the first GPU, second process will be allocated the second GPU and so forth.
  3. Scale the learning rate by number of workers. Effective batch size in synchronous distributed training is scaled by the number of workers. An increase in learning rate compensates for the increased batch size.
  4. Wrap optimizer in hvd.DistributedOptimizer. The distributed optimizer delegates gradient computation to the original optimizer, averages gradients using allreduce or allgather, and then applies those averaged gradients.
  5. Add hvd.BroadcastGlobalVariablesHook(0) to broadcast initial variable states from rank 0 to all other processes. This is necessary to ensure consistent initialization of all workers when training is started with random weights or restored from a checkpoint. Alternatively, if you’re not using MonitoredTrainingSession, you can simply execute the hvd.broadcast_global_variables op after global variables have been initialized.
  6. Modify your code to save checkpoints only on worker 0 to prevent other workers from corrupting them. This can be accomplished by passing checkpoint_dir=None to tf.train.MonitoredTrainingSession if hvd.rank() != 0.

Do you understand ?


好吧,我就知道你看不懂,还是我来吧


2、Horovod使用样例

import tensorflow as tf
import horovod.tensorflow as hvd

# 1、初始化 Horovod
hvd.init()

# 2、使用GPU来处理本地队列(向每个TensorFlow进分配一个进程)
config = tf.ConfigProto()
config.gpu_options.visible_device_list = str(hvd.local_rank())

# 3、建立模型
loss = ...
opt = tf.train.AdagradOptimizer(0.01 * hvd.size())

# 4、添加Horovod分布式优化器
opt = hvd.DistributedOptimizer(opt)

# 5、Add hook to broadcast variables from rank 0 to all other processes during
# initialization.
hooks = [hvd.BroadcastGlobalVariablesHook(0)]

# Make training operation
train_op = opt.minimize(loss)

# Save checkpoints only on worker 0 to prevent other workers from corrupting them.
checkpoint_dir = '/tmp/train_logs' if hvd.rank() == 0 else None

# The MonitoredTrainingSession takes care of session initialization,
# restoring from a checkpoint, saving to a checkpoint, and closing when done
# or an error occurs.
with tf.train.MonitoredTrainingSession(checkpoint_dir=checkpoint_dir,
                                       config=config,
                                       hooks=hooks) as mon_sess:
  while not mon_sess.should_stop():
    # Perform synchronous training.
    mon_sess.run(train_op)

https://zhuanlan.zhihu.com/p/43942234
https://zhuanlan.zhihu.com/p/40578792
https://docs.amazonaws.cn/dlami/latest/devguide/tutorial-horovod.html

图片如何居中

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190115104722273.png)

sfasf

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190115104926384.png)

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

<think>好的,用户想在CentOS上安装Horovod。首先,我需要回忆Horovod的安装步骤。记得Horovod依赖MPI和深度学习框架,比如TensorFlow或PyTorch。CentOS可能需要先安装一些基础开发工具,比如gcc、cmake。然后安装MPI,比如OpenMPI。接着是Python环境,可能用pip安装horovod,并且需要指定框架的支持,比如用HOROVOD_WITH_TENSORFLOW=1。 用户可能已经安装了某个深度学习框架,需要确认是否需要特定版本。安装命令可能像这样:HOROVOD_WITH_TENSORFLOW=1 pip install horovod。另外,用户可能需要安装CUDA和NCCL,如果使用GPU的话。要提醒用户检查CUDA版本是否兼容,以及是否需要更新驱动。 还要注意是否要源码编译,可能需要安装OpenMPI的开发包,比如openmpi-devel。然后运行horovodrun检查是否安装成功,比如用horovodrun --check-build。 可能的问题包括依赖项缺失,比如缺少OpenMPI或者CUDA环境变量没设置正确。用户可能遇到的错误需要提示如何解决,例如安装开发工具包,或者导出LD_LIBRARY_PATH。 还需要参考用户提供的引用,特别是引用[1]中的安装步骤和验证方法。确保引用中的命令正确无误,比如用python3 -c导入horovod来检查安装是否成功。同时,引用[2]提到Horovod分布式通信框架,可能需要用户安装支持多个后端,比如同时启用TensorFlow和PyTorch。 最后,生成相关问题,可能涉及安装后的验证、多GPU配置、常见错误处理,以及与其他框架的集成,如PyTorch。还要考虑用户可能对性能优化或云上扩展感兴趣,但根据引用[2],Horovod在云上的扩展性问题由Ali-Perseus解决,可能超出当前问题范围,但可以作为相关问题提到。</think>### 在 CentOS 系统安装 Horovod 的步骤 #### 1. 安装系统依赖 Horovod 依赖 MPI 和深度学习框架(如 TensorFlow/PyTorch)。首先安装基础工具和 MPI: ```bash sudo yum install -y epel-release sudo yum install -y gcc-c++ cmake make openssl-devel python3-devel openmpi-devel ``` #### 2. 配置 Python 虚拟环境(推荐) ```bash python3 -m venv horovod_env source horovod_env/bin/activate pip install --upgrade pip ``` #### 3. 安装深度学习框架 根据需求选择 TensorFlow 或 PyTorch: ```bash # TensorFlow pip install tensorflow # PyTorch(需指定 CUDA 版本,例如 CUDA 11.6) pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cu116 ``` #### 4. 安装 Horovod 通过 `pip` 安装并启用对应框架支持(如 GPU 需安装 CUDA Toolkit 和 NCCL): ```bash # 通用安装(CPU) HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 pip install horovod # GPU 版本(需提前安装 CUDA 和 NCCL) HOROVOD_GPU_OPERATIONS=NCCL HOROVOD_WITH_TENSORFLOW=1 pip install horovod ``` #### 5. 验证安装 ```bash # 检查 Horovod 是否可导入 python3 -c "import horovod as hvd; print(hvd.__version__)" # 检查 MPI 支持 horovodrun --check-build ``` 若输出包含 MPI 和框架(如 TensorFlow)的支持状态,则安装成功[^1]。 #### 6. 多节点测试(可选) 运行简单示例验证分布式训练: ```bash horovodrun -np 4 -H localhost:4 python train.py ``` --- ### 关键注意事项 1. **CUDA 版本匹配**:需确保 CUDA 版本与深度学习框架和 NCCL 兼容。 2. **OpenMPI 配置**:若使用多节点,需配置 SSH 免密登录和 MPI 主机文件。 3. **环境变量**:GPU 版本需设置 `LD_LIBRARY_PATH` 包含 CUDA 和 NCCL 库路径。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值