分布式训练框架Horovod使用

文章目录

  • 一、Horovod简介
  • 二、Horovod框架的安装 Install
    • 1、安装OpenMPI
    • 2、安装Horovod
  • 三、Horovod框架的使用
    • 1、在项目中使用Horovod框架
    • 2、Horovod使用样例

由于近期需要提高网络训练的速度,所以去找了一条捷径,想走快点,就找到了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)




♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

6_分布式训练框架Horovod使用(20190111)相关推荐

  1. [源码解析] 深度学习分布式训练框架 horovod (11) --- on spark --- GLOO 方案

    [源码解析] 深度学习分布式训练框架 horovod (11) - on spark - GLOO 方案 文章目录 [源码解析] 深度学习分布式训练框架 horovod (11) --- on spa ...

  2. [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark

    [源码解析] 深度学习分布式训练框架 horovod (10) - run on spark 文章目录 [源码解析] 深度学习分布式训练框架 horovod (10) --- run on spark ...

  3. 深度学习分布式训练框架 horovod (3)

    2.1 如何运行 官方给出的 Hovorod 运行范例之一如下: horovodrun -np 2 -H localhost:4 --gloo python /horovod/examples/ten ...

  4. 阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)

    简介:EPL背后的技术框架是如何设计的?开发者可以怎么使用EPL?EPL未来有哪些规划?今天一起来深入了解. 作者 | 王林.飒洋 来源 | 阿里技术公众号 一 导读 最近阿里云机器学习PAI平台和达 ...

  5. 阿里开源支持10万亿模型的自研分布式训练框架EPL

    一 导读 最近阿里云机器学习PAI平台和达摩院智能计算实验室一起发布"低碳版"巨模型M6-10T,模型参数已经从万亿跃迁到10万亿,规模远超业界此前发布的万亿级模型,成为当前全球最 ...

  6. 快手八卦!突破TensorFlow、PyTorch并行瓶颈的开源分布式训练框架来了!

    来源:AI前线本文约5200字,建议阅读8分钟 本文介绍了专门针对分布式场景设计了特定的优化算法同比,性能较同类提升60%. 近日,快手和苏黎世理工宣布开源分布式训练框架 Bagua(八卦),相比于 ...

  7. 字节跳动开源分布式训练框架BytePS,登上GitHub热榜

    问耕 发自 凹非寺 量子位 出品 | 公众号 QbitAI 字节跳动开源了通用分布式训练框架BytePS,这个框架支持TensorFlow.Keras.PyTorch.MXNet,可以运行在TCP或R ...

  8. 支持异构GPU集群的超大规模模型的高效的分布式训练框架Whale

    近日,阿里云机器学习PAI关于深度学习模型高效的分布式训练框架的论文< Whale: Efficient Giant Model Training over Heterogeneous GPUs ...

  9. 支持异构 GPU 集群的超大规模模型的高效的分布式训练框架 Whale

    近日,阿里云机器学习PAI关于深度学习模型高效的分布式训练框架的论文< Whale: Efficient Giant Model Training over Heterogeneous GPUs ...

最新文章

  1. 使用Dezender对zend加密后的php文件进行解密
  2. python特征选择工具_一个Python特征选择工具,助力实现高效机器学习
  3. 移动端开发 自适应rem js文件
  4. senchaTouch 给组件传参的两种方式
  5. arduino使用oled代码_如何做一个Arduino无线气象站
  6. http error 502.5
  7. 【100题】第十一题(二叉树中节点的最大距离)
  8. 神龙 X-Dragon,这技术“范儿”如何?| 问底中国 IT 技术演进
  9. 使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机
  10. imagej软件分析划痕实验(计算划痕面积及伤口愈合百分比)
  11. Android Studio下载Gradle一直失败,使用正确的下载地址
  12. Behavior Creator 行为树可视化编辑器
  13. Python去除文本所有标点符号
  14. YIT-CTF—社工类
  15. 计算机与资源管理器有何区别,在win7中双击打开计算机和右击打开资源管理器有什么区别...
  16. 北京奥林匹克公园三维场景网络发布应用
  17. python requests默认超时时间_requests获取响应时间和超时
  18. Oracle从入门到精通(笔记)
  19. 如何查询一个 app 的 Android 和 iOS 下载量?
  20. ipa文件反编译_iOS class-dump 反编译ipa包

热门文章

  1. c# 多态实现_虚方法
  2. 第三次冲刺阶段第五天
  3. scanf函数和printf函数
  4. TCP服务器:多进程
  5. 数据表列名与数据库关键字冲突,在Hibernate下的解决办法
  6. linux shell 脚本实现tcp/upd协议通讯(重定向应用)
  7. 可以获取python整数类型帮助的是什么-Python 的数值类型(整数、长整数、浮点数和复数)...
  8. python详细安装教程环境配置-python环境配置详细步骤
  9. 学python需要学数据库吗-学习Python爬虫前,你必须知道的一些工具!
  10. python个人项目-软工个人项目WC(Python实现)