资讯 人工智能开发者
此为临时链接,仅用于文章预览,将在时失效

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

作者:杨文
2018/04/18 19:42

雷锋网AI研习社按:人工智能技术发展迅猛的背后不仅得益于庞大的数据量,更需要强大的硬件支持。面对层出不穷的 AI 应用,已经很难采用一种通用的硬件进行高效的数据计算和处理,这也促使了各种类型的 AI 芯片蓬勃发展。

近期,在雷锋网 AI 研习社线上公开课上,Thinker (AI 芯片) 团队深度学习平台负责人周鹏程分享了目前主流的分布式异构计算特性,区别和应用,并且介绍了如何让当前流行的大数据分析引擎(如:Spark)从 AI 芯片的强大计算能力中获益。视频回放:http://www.mooc.ai/open/course/479

周鹏程,Thinker (AI 芯片) 团队深度学习平台负责人,曾就职于阿里巴巴技术保障事业部,担任算法工程师;清华大学微电子硕士,主要研究方向:面向可重构芯片的编译器后端优化,指令级并行,高并发编程模型以及分布式计算。

分享主题:如何在集群中高效地部署和使用 AI 芯片

分享提纲:

  • 关于Hadoop YARN资源管理系统的介绍

  • Spark分布式计算框架的介绍

  • 各种异构芯片不同的平台,特性,区别,以及应用

  • 开源项目StarGate

这次直播分享首先为大家介绍 Hadoop YARN 资源管理系统。Hadoop YARN 资源管理框架,它主要管理集群中的 CPU 和内存。

YARN(Yet Another Resource Negotiator)是一个通用的资源管理平台,可为各类计算框架提供资源的管理和调度。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

YARN 总体上是 Master/Slave 结构,主要由 ResourceManager、NodeManager、 ApplicationMaster 和 Container 等几个组件构成。

NodeManager (NM) 是每个节点上的资源和任务管理器。它会定时地向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态;同时会接收并处理来自 AM 的 Container 启动/停止等请求。

ApplicationMaster (AM) 用户提交的应用程序均包含一个 AM,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster 是应用框架,它负责向 ResourceManager 协调资源,并且与 NodeManager 协同工作完成 Task 的执行和监控。

Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当 AM 向 RM 申请资源时,RM 为 AM 返回的资源便是用 Container 表示的。YARN 会为每个任务分配一个 Container 且该任务只能使用该 Container 中描述的资源。

接下来介绍一个特殊的 applicationmaster,它就是 Spark。这个计算框架非常流行,可以支持流式计算,图计算,数据库查询。更多关于 Spark 的介绍,大家可以参考官网,本文主要介绍如何让 spark 应用在异构计算平台上。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

Spark 的数据结构 RDD (Resilient Distributed Dataset)

RDD 是 Spark 提供的核心抽象,全称为 Resillient Distributed Dataset,即弹性分布式数据集。可以抽象地认为它是在一个集群环境中的一个大数组,这个数组不可变,但又可以切分很多的小数组,每一个小数组(partition)被分发到集群中的几个节点,这样就实现了数据的并行,然后把计算推送到有数据的节点上,就完成了一次分布式计算。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

RDD 通常通过 Hadoop 上的文件,即 HDFS 文件或者 Hive 表,来进行创建;有时也可以通过应用程序中的集合来创建。

RDD 最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的 RDD partition,因为节点故障,导致数据丢了,那么 RDD 会自动通过自己的数据来源重新计算该 partition。这一切对使用者是透明的。

RDD 的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark 会自动将 RDD 数据写入磁盘。

Spark on YARN 模式的计算瓶颈是底层芯片上,关于这部分可观看回放视频介绍。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

接下来是CPU,GPU,FPGA,AI芯片在不同的应用上的区别。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

图中绿色的部分是 GPU 计算核心,GPU 的计算单元特别丰富,但是控制逻辑单元非常少,这就导致它只能适用于比较规则的计算类型,比如卷积运算,这种类型的运算只是简单且重复的做矩阵乘法。因此,最适合用GPU了。

FPGA 和 GPU 的不一样在于,FPGA 首先设计资源受到很大的限制,例如 GPU 如果想多加几个核心只要增加芯片面积就行,但 FPGA 一旦你型号选定了逻辑资源上限就确定了(浮点运算在 FPGA 里会占用很多资源),其次,FPGA 里面的逻辑单元是基于 SRAM-查找表,其性能会比 GPU 里面的标准逻辑单元差好多。最后,FPGA 的布线资源也受限制(有些线必须要绕很远),不像 GPU 这样走 ASIC flow 可以随意布线,这也会限制性能。

现实中有很多应用,不是都适合用 GPU 来处理,比如图计算。我们都知道图是由很多的节点和边组成,如果用一个节点表示一个算子,节点之间的边表示数据相关或数据依赖的话,我们就构建了一个计算图,也可以称为数据流图(DFG)。之所以说图计算不适合用 GPU 来做的,是因为它没有办法高效处理这种数据依赖,只能通过访存来传递这种依赖。而如果把这种数据流图映射到 FPGA 上,就可以通过计算单元之间的连线结构来传递和处理这种依赖,而且不同的计算单元可以执行不同的算子,再应用流水线技术,便可以大大降低访存的压力,大幅度提高性能。这就是 FPGA 比较适用于不规则应用(如:图计算、流式计算)的原因所在。

CPU,GPU,FPGA,ASIC 的架构特点

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

下图是我们团队研发的三款芯片,主要用于深度学习应用的加速。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

英特尔FPGA的开发流程

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

了解芯片的基本开发流程后,我们接下来要考虑的是如何高效地管理和使用服务器上已经安装好的各种加速器资源。为了实现这个目标,需要设计和实现对应的组件或者服务,比如需要一个监控组件用于实时监控加速器的各种状态和资源使用情况,同时还需要一个调度器组件负责为多个应用程序分配相应的加速器资源。总之,我们需要一个进行资源管理的服务。

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

这是我们团队自主研发的 StarGate 开源项目。地址:http://github.com/stargate-team/stargate

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

StarGate 的主要架构

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

接下来是 Spark on StarGate 部分的讲解,由于篇幅限制,这里不再做文字内容回顾,感兴趣的同学可以直接观看视频回放。视频地址链接:http://www.mooc.ai/open/course/479

总结

当前流行的大数据生产系统的计算瓶颈存在于底层芯片上,而芯片能够在很大程度上缓解计算压力。为了说明 AI 芯片强大的计算能力,分别介绍 AI 芯片的基本架构、特性以及适用场景。但是不同的 AI 芯片对当前主流的大数据生产系统的支持程度不同,很多时候需要扩展当前的生产系统才能集成现有的 AI 芯片。为了最小化 AI 芯片在数据中心部署的代价并且高效地利用 AI 芯片的强大计算能力,我们设计并开发了开源项目 StarGate。

以上就是本次雷锋网 AI 研习社公开课的全部分享内容。更多视频直播课程关注微信公众号:AI 研习社

雷锋网出品

长按图片保存图片,分享给好友或朋友圈

如何在集群中高效地部署和使用 AI 芯片? | 分享总结

扫码查看文章

正在生成分享图...

取消
相关文章