登录后再学习,可使用学习中心、个人中心等更完善的课程服务。立即登录>
关闭

英特尔分布式 AI 计算概览

  • 4 课时
  • 384 学过
  • 8 分
分布式GPU 云服务器AI 人工智能

课程概述

本教程介绍了在AI领域进行分布式AI计算的通用技术,各个主流的进行分布式AI计算的工具,了解英特尔MLSL和Horovod的功能和使用方法,了解如何在英特尔CPU上使用这些工具进行分布式AI计算。

【课程大纲】

介绍Intel Optimized AI Frameworks的分布式计算的原理,包括:

1. 分布式AI计算总览

2. Intel MLSL简介

3. Uber Horovod简介

4. 其他分布式AI计算工具

机构简介

英特尔(Intel Corporation)

英特尔是半导体行业和计算创新领域的全球领先厂商,以智能互联技术奠定全球创新基石。英特尔创始于1968年,拥有50余年推动技术创新和耕耘产业生态的成功经验。如今,英特尔正转型为一家以数据为中心的公司。英特尔的战略愿景聚焦于三个方面:一是致力于生产世界上最好的半导体芯片;二是引领人工智能与“自能”革命;三是做全球领先的端到端技术平台提供者。英特尔正与合作伙伴一起,共推人工智能、自动驾驶、 5G及物联网等领域的技术创新与应用突破,驱动智能互联世界,从而解决人类面临的重大挑战。 英特尔于1985年进入中国,是在华高科技领域最大的外国投资企业之一,协议总投入约130亿美元。中国是英特尔全球战略之重点,英特尔在中国拥有美国总部之外最为全面的业务部署,覆盖了前沿研究、产品技术开发、精尖制造、产业生态合作、市场营销、客户服务、风险投资和企业社会责任等。英特尔中国现有员工约9,500人。扎根中国三十四年,英特尔见证并深度参与了中国的改革开放,从浦东开发、西部开发到振兴东北等,英特尔一直跟随改革开放的步伐,积极带动区域经济发展,为高端制造持续注入新动力。 2014年12月,英特尔宣布在未来15年将为成都工厂投资16亿美元,首次引入英特尔最先进的高端测试技术( ATT),使成都工厂在原有的芯片封装与测试业务之外进一步升级为英特尔在美国境外唯一的ATT技术工厂;该技术已于2016年11月18日正式投产。 2015年10月,英特尔宣布投资55亿美元,将英特尔大连工厂升级为非易失性存储技术制造基地;该项目已经于2016年7月正式投产, 2017年发布了两款全新的基于3D NAND的数据中心级固态盘;其二期项目已经在2018年9月投产英特尔最先进的96层3D NAND产品。英特尔中国研究院是英特尔全球五大创新中枢之一,而英特尔亚太研发中心已发展成为英特尔在亚洲最大的综合性研发基地之一。 英特尔中国积极履行企业社会责任,涵盖了人才培养、员工关爱、多元化和包容、环境可持续、供应链建设、志愿服务等领域。英特尔连续20多年被教育部评为最佳合作伙伴。我们持续支持英特尔杯嵌入式大赛、英特尔杯软件创新大赛和人工智能人才培养等项目,开展丰富多彩的校园活动,每年都有上万名学生的直接参与,受益青少年数以十万计。英特尔中国员工在2018年参与志愿活动人数达8,636人,贡献志愿服务时间超过12万小时,参与比例为69%; 10年来累计志愿服务时间超过72 万小时。我们把公司运营与环境可持续发展协调并进,积极减少碳足迹;还和政府、产业链以及公益组织深入合作,共同推动绿色可持续发展。全球独立机构声望研究院发布的“中国最具声望的公司”( RepTrak? 100) 2018年百强排行榜中,英特尔荣登榜首。

讲义

分布式AI计算

Intel AI布局

Intel提供了从硬件到高性能库,到框架,到工具,以及到完整的解决方案一整套大而全的AI布局来帮助大家充分的释放Intel CPU的性能。

Intel AI已经在各个领域得到了广泛的应用,比如金融领域、医药领域、工业领域、监控领域等等。

在Intel硬件平台上部署AI

在intel硬件平台上部署AI其实是一件非常简单的事情,而且Intel也给大家提供了很多的硬件选择来帮助大家进行AI的运算。

比如在设备端,大家可以使用Intel ATOM处理器和Intel CORE处理器来做AI的训练和推理。在EDGE端和在集群方面,可以使用Intel XEON处理器来做AI的运算。除此之外还有Intel MOVIDIUS芯片和专门用来做深度学习训练和推理的Intel NERVANA芯片NNP-L和NNP-I。此外,Intel还将在不久推出Intel独立的GPU来帮助大家在GPU上做AI的运算。

Intel AI的合作伙伴和大学们

在AI领域,Intel有很多的合作伙伴,比如腾讯、NASA、TACC等。除此之外,Intel和很多的国内外高校都有非常紧密的关于AI方面的合作,而且我们针对于各个国内外高校都提供了大量的关于Intel方面的宣讲和动手实验室。

深度学习神话

大部分的AI或者深度学习的工作或者项目来说,使用CPU是完全已经足够了的,而对于一些非常早期就开始研究AI的一些研究者来说,他们可能需要额外的加速器来满足他们进行深度学习的需求。所以通过使用Intel CPU进行分布式的AI计算,既能够给大家一个非常不错的AI的性能,而且能够让大家充分的利用现在手上已经有的CPU的资源,而不用去额外的购买其它的加速器。

分布式AI计算:多节点

对于分布式AI计算来说,我们需要在多个计算机节点上进行AI的运算。这也就意味着说我们需要一定的消息传递机制来确保各个节点上都有最新的计算的结果。很多时候,我们使用的是MPI高性能库来做梯度的更新,来确保各个节点上都有最新的结果。对于目前主流的AI框架来说,比如Caffe使用的就是已经深度优化过的Intel MPI ML Scaling Library。除此之外,对TensorFlow/PyTorch/MXNet来说,它们使用的是Uber Horovod加上Intel MPI Library来做分布式AI的计算。

分布式AI计算:基础概念

我们先来介绍进行分布式AI计算的消息传递相关基本概念。这里我们列举了6个来自MPI高性能库的集合通讯的例子。

Scatter。它作用是将一段数组的不同部分发给所有的进程。

Broadcast。它的作用只是将相同的信息发给所有的进程。

Gather。它的作用和Scatter的正好相反。它的作用是从所有的进程中将每个进程的数据都集中到一个进程中,同样根据进程的编号,对数组元素进行排序。

All-Gather。它的作用是将所有的数据聚合到每个进程中。

Reduce。它的作用是将每个进程中的数据进行规约操作,并把规约出来的结果发送到其中一个进程。

All-Reduce。它的作用是将规约出来的结果发送给所有的进程。

分布式AI计算:模式

第一种模式,Patameter Server Mode。在这种模式下,把计算机节点分成两个部分,一部分是Patameter Server,另一部分是Worker。每一个进程既可以是Patameter Server,也可以是Worker。而且两者数目的比例可以根据自己的需求进行决定的。Worker是用来训练数据计算梯度,并把数据发送到Patameter Server进行后续的聚合操作。

第二种模式,All-Reduce Mode。在这种模式下,所有的进程都是Worker,并且它们会通过All-Reduce这样的方式来平均梯度、更新结果,并把它们的结果发给所有的节点。通常来讲,这一种模式在目前的分布式AI计算领域下面更受欢迎。

Intel MLSL简介

Intel机器学习扩展库(Intel MLSL)

Intel MLSL是Intel推出基于MPI的机器学习扩展库。它实现了在深度学习领域高效的进行消息传递模式的,并且对于消息传递模式的可扩展性也做了大量的优化。另外,它也能够支持多种不同的内部连接Intelconnects。比如Intel Omni-Path Architecture、 InfiniBand*、 Ethernet等等。同时它也提供了一些常用的API、支持深度学习的框架,比如Caffe、Theano、Torch等等。

为什么要使用Intel MLSL?

因为它提供了最优的进行并行工作的决策,比如数据并行或者模型并行等等。另外,无论是针对于大的或者小batch size,它都有非常良好的可扩展性,而且能够选择最优的消息通讯算法来减少消息通讯的量。它对于RNNs、CNNs,以及LSTMs都有非常良好的支持,是一种高效的、可移植的分布式AI计算的实现。

Intel MLSL特点和实现

Intel MLSL支持很多目前流行的AI框架。在优化方面,MLSL使用的是现有的MPI功能和扩展,并且在内部连接的通讯对于框架来说是完全透明的。

Intel MLSL安装

提供了两种安装方法,第一种从源代码进行安装,也就是building from source。另外一种是从RPM或者压缩包直接来进行安装。

Intel MLSL并行选项

如果需要进行分布式计算一个深度学习的全连接层,其实有多种方法可以实现并行。

第一种并行是数据并行,Data Parallelism。在这种模式下,把所有的权重值或者模型复制到所有的节点中,并把输入的数据进行切分。把切分后不同的输入数据的部分,分配给每一个不同的节点。我们需要进行剃度的更新,然后把更新后的梯度散发到各个节点中。这时候集合通讯相关的消息传递是非常有必要的,可以使用 AllReduce、ReduceScatter、AllGather的模式来实现数据并行。

如下图所示是数据并行分布式AI计算的一般范式。前面两步是切割输入数据、跑模型、训练出梯度、平均梯度到所有的节点中、更新模型、再重复前面第一步的步骤。

第二种并行是模型并行,Model Parallelism。在这种模式下,所有的输入数据和模型都做了一定的切分。每个节点都有属于自己的部分的输入数据和权重值或者模型。平均梯度的聚合通信的消息传递在这种并行模式下也是必须的。

第一个例子是把权重值或者模型做了横向的切分。

第二个例子是把权重池和模型做了纵向的切分。

第三种并行是混合并行,Hybrid Parallelism。在这种模式下,把节点分成了不同的组。在组之间使用的是数据并行,而在组内,在各个节点间使用的是模型并行。混合并行的模式下,所有的梯度以及activations更新的消息传递都是必须的。

并行选项的选择

当activations > weights时,使用数据并行。当activations < weights时,使用模型并行。数据并行和模型并行都有它一定的副作用,比如说在一定的扩展程度下面,使用数据并行的方式会导致activations远远小于weights,而使用模型并行的方式,只会导致weights远远小于activations。另外,如果是在一个非常大的集群上面做并行计算,通讯的时间会成为一个很大的性能的问题。

Intel MLSL APIs

Intel MLSL提供了很多AI计算的API。这些AIP会隐藏后端进行消息传递的细节内容,所以用户只需要调用这些高层的API就可以了。集合通讯的API都有一个非常好的性能,而且能够高效的进行同步的操作。用户可以非常容易地使用主要是Non-Blocking集合通讯的操作来实现分布式AI的计算。

Intel Caffe with MLSL

通过使用Intel Caffe加上Intel MLSL在集群上进行分布式AI计算,能够达到一个非常好的性能的数据。

GitHub: https://github.com/intel/caffeIntel

Optimization for Caffe: https://software.intel.com/en-us/frameworks/caffe

分布式计算:Intel Caffe with MLSL

对于分布式AI计算,Intel Caffe已经提供了如何进行多节点训练的官方的指导,大家可以直接参考网址里面的内容而进行Intel Caffe的分布式训练。

Intel Caffe multi-node training guide: https://github.com/intel/caffe/wiki/Multinode-guide

如图展示了两条进行分布式计算的命令,里面的参数选项也是非常的多,大家可以参考来深入的了解每一个参数选项的具体含义。

Intel Caffe with MLSL分布式实例

①针对于分布式的SGD模型来说,它的可扩展性和性能都是非常好、非常理想的。

②Intel Caffe里面已经默认集成Intel MLSL进行多节点的训练,而Intel MLSL也被应用到了百度的DeepBench里面去。此外,SURFSara使用Intel Caffe和MLSL进行分布式的rResNet50的训练达到了一个非常好的记录,而且UC-Berkeley、TACC和UC-Davis也使用Intel Caffe/MLSL做了很多令人满意的训练和实验。

Uber Horovod简介

主流AI框架和Horovod

Intel对目前主流的一些AI框架,比如说TensorFlow、Pytorch、MXNet等等已经做了非常深入的针对于Intel CPU的优化。通过使用Intel深度优化过的AI框架加上Horovod,可以在集群上达到非常好的进行分布式AI计算的性能。

Horovod总览

Horovod是Uber最初开发的开源的深度学习的分布式计算工具。它最初是设计用来做分布式TensorFlow训练的,现在也支持分布式Pytorch和MXNet的训练。Horovod的分布式计算也是基于MPI的,无论是Intel MPI、Open MPI、MPICH。Horovod的优势在于非常容易使用,同时相比较传统的分布式计算方法,更加高效,且拥有更好的性能和更好可扩展性。

Horovod安装

主要是分为两个步骤:

  1. 安装Intel MPI Library,高性能库
  2. 解压缩并进入目录 $bash ./install.sh

Horovod例子和指导

Horovod官方的GitHub下也已经给出了很多面向不同的AI框架的分布式训练的例子和指导,这边列出来几条大家可以用作参考。

Horovod with TensorFlow: https://github.com/horovod/horovod#usage

Horovod with Keras: https://github.com/horovod/horovod/blob/master/docs/keras.rst

Horovod with PyTorch:https://github.com/horovod/horovod/blob/master/docs/pytorch.rst

Horovod with MXNet: https://github.com/horovod/horovod/blob/master/docs/mxnet.rst

Horovod with TensorFlow

使用Horovod进行分布式训练是非常简单的,只需要使用horovodrun或者mpirun就可以了。horovodrun是mpirun的一层wapper,主要的功能都是一样的。

Horovod示例: https://github.com/horovod/horovod/tree/master/examples.

分析TensorFlow with Horovod性能

Horovod自带时间线的分析工具叫做Horovod Timeline。

如图所示其时间线展示是非常直观的可视化展示。激活这个工具来记录整一个Horovod运行时候的活动状态仅仅只需要设定Horovod_Timeline环境变量来指定一个需要生成的Horovod Timeline的文件路径,再直接执行horovodrun即可生成时间线。

对于Intel优化的TensorFlow with Horovod在Intel CPU上测评了多节点训练,具体如图所示。

The TensorFlow benchmarks:$ git clone https://github.com/tensorflow/benchmarks

其它分布式AI计算工具

分布式PyTorch计算

在不使用Horovod的情况下,PyTorch可以使用自带的进行分布式计算的包来做多节点的训练。PyTorch自带的分布式计算是基于Parameter Server Mode。

这里给出链接详细的介绍了这部分的内容: https://pytorch.org/tutorials/intermediate/dist_tuto.html

PyTorch分布式示例计算代码如下图所示。

PyTorch三个不同的分布式后端:

  • TCP Backend 需要手动设置,但是在绝大部分的机子上和操作系统上都能够完美地工作,而且它支持所有的点对点的或者聚合的通讯,但是它没有像MPI一样深度的优化
  • MPI Backend 需要手动的重新编译代码,但是它比较TCP的好处是它有更高层级的优化,在大型的计算机集群上面做分布式计算会有更好的更加突出的性能
  • Gloo Backend 提供了针对于CPU和GPU上的集合通讯优化的实现

分布式PyTorch计算: TCP后端

这里简单的例举了两个通过TCP进行分布式PyTorch计算的方法。

第一种主动的提供主进程的IP地址和world size,这个时候所有的worker就可以直接和主进程进行消息的传递。

第二种提供了任何一个有效的IP multicast地址和world size,这个时候在这一个组里面的所有的节点都有可能和worker进行通讯。

分布式MXNet计算

MXNet分布式训练的官方的指导: https://mxnet.incubator.apache.org/versions/master/faq/distributed_training.html

MXNet分布式计算的实际例子: https://github.com/apache/incubator-mxnet/tree/master/example

下面是分布式图像分类训练的例子,使用的是VGG11的模型和CIFAR10的数据集。

这一个脚本本身也已经带了很多的默认的参数:

  • -n :需要启动多少个worker nodes
  • -s:需要启动多少个server nodes
  • --launcher:指定消息通讯的模式,比如ssh是默认的模式,还有mpi、sge、yarn、local
  • -H
  • --sync-dst-dir

课程评价(0)

感谢你参加本课程,请你作出评价:
0/300

以下选自学员评价

暂无精选评价