Horovod 分布式深度学习框架相关
最近需要 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 分布式深度学习框架相关的更多相关文章
- 使用horovod构建分布式深度学习框架
最近两周一直在尝试着分布式深度学习的架构,主要的原因一方面是几台机子全是1060卡,利用深度网络在较大数据样本上训练的效率极其低下,所以尝试着将几台机子做成分布式,看看能否提高训练效率:第二方面是有人 ...
- TensorFlow与主流深度学习框架对比
引言:AlphaGo在2017年年初化身Master,在弈城和野狐等平台上横扫中日韩围棋高手,取得60连胜,未尝败绩.AlphaGo背后神秘的推动力就是TensorFlow--Google于2015年 ...
- 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...
- 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比
http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...
- 分布式深度学习DDL解析
分布式深度学习DDL解析 一.概述 给一个庞大的GPU集群,在实际的应用中,现有的大数据调度器会导致长队列延迟和低的性能,该文章提出了Tiresias,即一个GPU集群的调度器,专门适应分布式深度学习 ...
- 贾扬清分享_深度学习框架caffe
Caffe是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 贾扬清,目前在Google工作.本文是根据机器学习研究会组织的online分享的交流内容,简单的整理了一下. 目录 ...
- Nebula Graph 技术总监陈恒:图数据库怎么和深度学习框架进行结合?
引子 Nebula Graph 的技术总监在 09.24 - 09.30 期间同开源中国·高手问答的小伙伴们以「图数据库的设计和实践」为切入点展开讨论,包括:「图数据库的存储设计」.「图数据库的计算设 ...
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...
- 深度学习与CV教程(8) | 常见深度学习框架介绍
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- Cross-Site Scripting:Persistent 跨站点脚本:持久性
- mysql-两种方式安装
一.数据库版本 MySQL 常见版本 MySQL Community Server 社区版本,开源免费,但不提供官方技术支持. MySQL Enterprise Edition 企业版本,需付费,可以 ...
- 怎么将DWG转PDF?分享一个在线转换方法
了解CAD的朋友们都知道,在使用CAD制图软件绘制图纸的时候,默认的CAD图纸保存格式就是为DWG格式.但是DWG格式的文件不能够直接进行打开查看,就需要将DWG转PDF格式.那具体要怎么来进行操作呢 ...
- Andriod安卓下开发UHF读写器
随着在Andriod设备上使用UHF读写器变得越来越广泛,友我科技独立研发了UHF读写器的android开发包,使用此开发包,工程师只需在工程中导入jar包,使用java语言就可以轻松的开发出Andr ...
- 如何使用 CODING 实践 DevOps 全流程
你好,欢迎使用 CODING!这份最佳实践将帮助你通过 CODING 研发管理系统来更好地实践 DevOps 流程. DevOps 的本质是打破各个部门之间的隔阂,打通企业的前中后台,推进跨部门协作. ...
- oracle截取时间的年/月/日/时/分/秒
修改日期格式为年月日时分秒: alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';select to_char(sysdate,'yyy ...
- MATLAB实例:绘制条形图
MATLAB实例:绘制条形图 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用MATLAB绘制条形图,自定义条形图的颜色.图例位置.横坐标名称.显示条 ...
- 计算机网络知识之TCP/IP协议簇
OSI参考模型 OSI的来源 OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网 ...
- Object-defineProperty ES5
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...
- 最强Linux shell工具Oh My Zsh 指南
引言 笔者已经使用zsh一年多了,发现这个东东的功能太强大了.接下来,给大家推荐一下. 以下是oh-my-zsh部分功能 命令验证 在所有正在运行的shell中共享命令历史记录 拼写纠正 主题提示(A ...