最近需要 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. 未来已来:云原生 Cloud Native

    作者:天知,原文链接 前言 自 2013 年容器(虚拟)技术(Docker)成熟后,后端的架构方式进入快速迭代的阶段,出现了很多新兴概念: 微服务 k8s Serverless IaaS:基础设施服务 ...

  2. SpringCloud路由网关Zuul

    一.什么是网关 Zuul的主要功能是路由转发和过滤器.路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务.zuul默认和Ribbon结合实现了 ...

  3. Python类中的self的作用

    Python编写类的时候,每个函数第一个参数都是self.后来对Python越来越熟悉,再回头看self的概念,慢慢就明白了. 谷歌上有一段解释很到位,贴出来给大家: self represents ...

  4. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU启动那些事(1)- Boot简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的BootROM功能简介. 截止目前为止i.MX RTyyyy系列已公布的芯片有三款i.MXRT ...

  5. C# copy source directory files with original folder to the destination path

    private static void PathCopyFilesWithOriginalFolder() { ; try { string sourceDir = @"E:\Source& ...

  6. 使用 mitmdump 进行 selenium webDriver绕过网站反爬服务的方法 pdd某宝 可用

    安装:  pip install  mitmproxy 新建一个脚本 脚本代码: from mitmproxy import ctx injected_javascript = ''' // over ...

  7. MySQL 重置Mysql root用户账号密码

    重置Mysql root用户账号密码 By:授客 QQ:1033553122   问题描述: 使用mysqladmin.exe执行命令时出现以下错误提示: mysqladmin: connect to ...

  8. Android Studio 使用Memory Monitor进行内存泄露分析

    在使用Android Studio进行内存泄露分析之前,我们先回顾一下Java相关的内存管理机制,然后再讲述一下内存分析工具如何使用. 一.Java内存管理机制 1. Java内存分配策略 Java ...

  9. Django信号机制相关解释与示例

    Django 信号# django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发 ...

  10. java8-新的日期API

    背景 java的日期和时间API设计不理想,java8引入新的时间和日期API就是为了解决这个问题. 老的日期API的核心类 缺点 Date 月从0开始,年最小从1900年开始,没有时区的概念 Cal ...