最近需要 Horovod 相关的知识,在这里记录一下,进行备忘:

  • 分布式训练,分为数据并行和模型并行两种;
  • 模型并行:分布式系统中的不同GPU负责网络模型的不同部分。神经网络模型的不同网络层被分配到不同的GPU或者同一层内部的不同参数被分配到不同的GPU之上;
  • 数据并行:不同的GPU有同一个模型的多个副本,每个GPU分配到不同的数据,然后将所有的GPU的结果按照某种方式合并;
  • 不同的GPU,可以是同一台机器之上的多个GPU或者是不同机器上的GPU;

  • 在数据并行过程中,各个GPU之间需要同步模型参数,参数分为 同步更新和异步更新两种情况;
  • 图中的Machine可以认为是GPU或者是CPU;也有 数据并行和模型并行的混合模式;模型并行各个部分存在一定的依赖,规模伸缩性差;而数据并行中,各个部分独立,规模伸缩性好;实际训练过程中更多使用数据并行;
  • 数据并行会涉及到各个 GPU 之间同步模型参数,一般分为同步更新和异步更新。同步更新要等到所有 GPU 的梯度计算完成,再统一计算新权值,然后所有 GPU 同步新值后,才进行下一轮计算。异步更新,每个 GPU 梯度计算完后,无需等待其他 GPU 的梯度计算(有时可以设置需要等待的梯度个数),可立即更新整体权值,然后同步此权值,即可进行下一轮计算。同步更新有等待,异步更新基本没有等待,但异步更新涉及到梯度过时等更复杂问题;在实际应用中,单机多卡的同步式数据并行是最常用的,在论文中最常见的训练方式是单机八卡。数据再多时,一般就需要多机多卡;
  • 无论是单机多卡,还是多机多卡,都是分布式训练;

保持更新,更多内容请关注 cnblogs.com/xuyaowen;

Horovod 安装:

安装 cuda 9.0; https://www.cnblogs.com/xuyaowen/p/nvidia-driver-cuda-installation.html

编译安装nccl 根据cuda 9.0; https://www.cnblogs.com/xuyaowen/p/nccl-learning.html

安装 gcc 4.9: https://www.cnblogs.com/xuyaowen/p/gcc-49-install-on-ubuntu.html

python 版本 Python 3.6.9 (具体环境请自行适配)

安装 openmpi 4.0 : https://www.cnblogs.com/xuyaowen/p/openmpi-40-install.html

pip 安装 Horovod 框架:

HOROVOD_NCCL_HOME=nccl的home目录 HOROVOD_NCCL_LIB=nccl的lib目录 HOROVOD_NCCL_INCLUDE=nccl的include目录  HOROVOD_GPU_ALLREDUCE=NCCL  pip install --no-cache-dir horovod 

HOROVOD_NCCL_HOME=/home/name/nccl/build/ HOROVOD_NCCL_LIB=/home/name/nccl/build/lib/ HOROVOD_NCCL_INCLUDE=/home/name/nccl/build/include/  HOROVOD_GPU_ALLREDUCE=NCCL  pip install --no-cache-dir horovod

安装后,使用:python -c "import horovod.tensorflow as hvd;" 命令进行测试,如果无错误输出,则表示安装成功;之后可参考官方手册使用Horovod;

➜  openmpi python -c "import horovod.tensorflow as hvd;"
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
_np_qint8 = np.dtype([("qint8", np.int8, )])
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
_np_quint8 = np.dtype([("quint8", np.uint8, )])
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
_np_qint16 = np.dtype([("qint16", np.int16, )])
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
_np_quint16 = np.dtype([("quint16", np.uint16, )])
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
_np_qint32 = np.dtype([("qint32", np.int32, )])
/home/name/anaconda3/envs/gnnalgos/lib/python3./site-packages/tensorflow/python/framework/dtypes.py:: FutureWarning: Passing (type, ) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (,)) / '(1,)type'.
np_resource = np.dtype([("resource", np.ubyte, )])

安装测试结果

参考连接:

https://github.com/horovod/horovod (官方文档,可以参考安装和使用)

https://www.infoq.cn/article/J4ry_9bsfbcNkv6dfuqC

http://fyubang.com/2019/07/08/distributed-training/ (讲解了分布式多卡训练相关的基础知识)

分布式多卡-pytorch,tensorflow 系列教程 (较为详细的教程,讲解了现有较为优秀的框架的特点和使用方式)

https://zhuanlan.zhihu.com/p/78303865 (安装使用参考,本文中的安装步骤参考此教程)

Horovod 分布式深度学习框架相关的更多相关文章

  1. 使用horovod构建分布式深度学习框架

    最近两周一直在尝试着分布式深度学习的架构,主要的原因一方面是几台机子全是1060卡,利用深度网络在较大数据样本上训练的效率极其低下,所以尝试着将几台机子做成分布式,看看能否提高训练效率:第二方面是有人 ...

  2. TensorFlow与主流深度学习框架对比

    引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年 ...

  3. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  4. 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比

    http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...

  5. 分布式深度学习DDL解析

    分布式深度学习DDL解析 一.概述 给一个庞大的GPU集群,在实际的应用中,现有的大数据调度器会导致长队列延迟和低的性能,该文章提出了Tiresias,即一个GPU集群的调度器,专门适应分布式深度学习 ...

  6. 贾扬清分享_深度学习框架caffe

    Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 贾扬清,目前在Google工作.本文是根据机器学习研究会组织的online分享的交流内容,简单的整理了一下. 目录 ...

  7. Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?

    引子 Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」.「图数据库的计算设 ...

  8. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  9. 深度学习与CV教程(8) | 常见深度学习框架介绍

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. SoapUI 之 webService 接口测试 [5]

    一.webservice接口实例说明 学习的话,大家可以自行到网上找 一些免费的webservice接口来练手.本文中选择实例为:中国电视节目预告(电视节目表) WEB 服务. Endpoint : ...

  2. C#中类的实例化过程

    创建某个类型的第一个实例时,所进行的操作顺序为:1.静态变量设置为02.执行静态变量初始化器3.执行基类的静态构造函数4.执行静态构造函数5.实例变量设置为06.执行衯变量初始化器7.执行基类中合适的 ...

  3. CSRF漏洞原理浅谈

    CSRF漏洞原理浅谈 By : Mirror王宇阳 E-mail : mirrorwangyuyang@gmail.com 笔者并未深挖过CSRF,内容居多是参考<Web安全深度剖析>.& ...

  4. 44-创建 Machine

    对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机.“创建 Machine” 指的就是在 host 上安装和部署 docker.先执行 doc ...

  5. java编译报错: 找不到或无法加载主类 Demo.class 的解决方法

    原因:java 命令后面的文件不能有后缀名. 解决方法:运行java时候,后面的文件去掉后缀名.

  6. python 导入同级目录文件时报错

    当你import的时候,python解释器只会在sys.path这个变量(一个list,你可以print出来看)里面的路径中找可能匹配的package或module. 而一个package跟一个普通文 ...

  7. 学习java需要英语很好吗?

    学习java需要英语很好吗? 编程语言起源于美国,是由英文构成的,其中包括几十个英文的关键字以及几百个英文的函数,除非需要对文本进行处理,否则一般不会出现中文.但是,它们都是孤立的单词,不构成任何语句 ...

  8. 2019年跨越速递Java工程师笔试题

    1.下面哪个选项可以用于JSP页面之间传递对象(A C) A application B page C session D error  E response 评语:这道题考察的是对JSP内置对象的了 ...

  9. Linux查看CPU和内存情况

    本文简单介绍在Linux上查看CPU和内存情况和一款系统资源查看工具htop. 查看CPU情况 以下是个人工作会经常使用到的服务器的信息. 查看所有CPU信息 可以通过如下命令查看所有CPU信息: # ...

  10. Windows10安装ubuntu16.04双系统教程

    写在前面:本教程为windows10安装ubuntu16.04(64位)双系统教程,是我多次安装双系统的经验总结,安装方法同样适用于ubuntu18.04(64位).为了直观和易于理解,我会尽量图文并 ...