美团深度学习系统的工程实践

背景

深度学习作为AI时代的核心技术,已经被应用于多个场景。在系统设计层面,由于其具有计算密集型的特性,所以与传统的机器学习算法在工程实践过程中存在诸多的不同。本文将介绍美团平台在应用深度学习技术的过程中,相关系统设计的一些经验。

本文将首先列举部分深度学习算法所需的计算量,然后再介绍为满足这些计算量,目前业界比较常见的一些解决方案。最后,我们将介绍美团平台在NLU和语音识别两个领域中,设计相关系统的经验。

深度学习的计算量

ModelInput SizeParam SizeFlops
AlexNet227 x 227233 MB727 MFLOPs
CaffeNet224 x 224233 MB724 MFLOPs
VGG-VD-16224 x 224528 MB16 GFLOPs
VGG-VD-19224 x 224548 MB20 GFLOPs
GoogleNet224 x 22451 MB2 GFLOPs
ResNet-34224 x 22483 MB4 GFLOPs
ResNet-152224 x 224230 MB11 GFLOPs
SENet224 x 224440 MB21 GFLOPs

数据来源

上表列举了,ImageNet图像识别中常见算法的模型大小以及单张图片一次训练(One Pass)所需要的计算量。

自2012年,Hinton的学生Alex Krizhevsky提出AlexNet,一举摘下ILSVRC 2012的桂冠后,ILSVRC比赛冠军的准确率越来越高。与此同时,其中使用到的深度学习算法也越来越复杂,所需要的计算量也越来越大。SENet与AlexNet相比,计算量多了近30倍。我们知道,ImageNet大概有120万张图片,以SENet为例,如果要完成100个epoch的完整训练,将需要2.52 * 10^18的计算量。如此庞大的计算量,已经远远超出传统的机器学习算法的范畴。更别说,Google在论文《Revisiting Unreasonable Effectiveness of Data in Deep Learning Era》中提及的、比ImageNet大300倍的数据集。

物理计算性能

面对如此庞大的计算量,那么,我们业界当前常用的计算单元的计算力是多少呢?

  • CPU 物理核:一般浮点运算能力在10^10 FLOPS量级。一台16 Cores的服务器,大致上有200 GFLOPS的运算能力。实际运行,CPU 大概能用到80%的性能,那就160 GFLOPS的运算能力。完成上述SENet运行,需要182天。
  • NVIDIA GPGPU: 目前的V100,单精度浮点运算的峰值大概为14 TFLOPS, 实际运行中,我们假设能用到50%的峰值性能,那就是7 TFLOPS,需要4天。

根据以上数据结果可以看出:在深度学习领域,GPU训练数据集所需要耗费的时间,远远少于CPU,这也是当前深度学习训练都是采用GPU的重要原因。

业界的解决方案

从前面的计算可知,即使使用GPU来计算,训练一次ImageNet 也需要4天的时间。但对于算法工程师做实验、调参而言,这种耗时数天的等待是难以忍受的。为此,目前业界针对深度学习训练的加速,提出了各种各样的解决方案。

异构计算的并行方案

数据并行(Data Parallelism)

数据并行,即每个计算单元都保留一份完整的模型拷贝,分别训练不同的数据,经过一个Iteration或若干个Iteration后,把各个计算单元的模型做一次同步。这是最常见的深度学习训练方式,好处在于逻辑简单、代码实现方便。

模型并行(Model Parallelism)

模型并行,即各个计算单元存储同一层模型数据的不同部分,训练相同的数据。相对于数据并行,因为各个运算单元每训练完一层神经网络,就必须要同步一次,频繁的同步通信导致系统不能充分地利用硬件的运算能力,所以更为少见。但是在一些业务场景下,Softmax层需要分类的类别可能会有很多,导致Softmax层太大,单个计算单元无法存储,这个时候,需要把模型切割成若干部分,存储在不同的运算单元。模型并行常见于NLU、推荐、金融等领域。

流式并行(Stream Parallelism)

流式并行,即每个计算单元都存储不同层的模型数据,训练相同的数据。如上图所示,GPU1只负责第一层神经网络的计算,GPU2只负责2~5层神经网络的计算,GPU3只负责第6层的计算。流式并行的好处在于每个运算单元之间的通信和计算重叠(overlap),如果配置得当,可以非常充分地利用硬件资源。缺点在于,根据不同的模型,需要平衡好各个计算单元的计算量,如果配置不好,很容易形成“堰塞湖”。如上图所示,很有可能出现GPU1 负责的运算量太少,而GPU2 负责的运算量太多,导致GPU1 和GPU2 之间堵塞住大量的Mini-batch,更常见于线上环境。

混合并行(Hybrid Parallelism)

混合并行,即上面提到的并行方式的混合。如对于一些图像识别任务来说,可能前几层使用数据并行,最后的Softmax层,使用模型并行。

异构计算的硬件解决方案

  • 单机单卡:一个主机内安装上一块GPU运算卡。常见于个人计算机。
  • 单机多卡:一个主机内安装上多块GPU运算卡。常见的有:1机4卡,1机8卡,甚至有1机10卡。一般公司都采取这种硬件方案。
  • 多机多卡:多台主机内安装多块GPU运算卡。常见于公司内部的计算集群,一般多机之间采取Infiniband 来实现网络的快速通信。
  • 定制化:即类似于Google的TPU解决方案。常见于“巨无霸”公司内部。

异构计算的通信解决方案

根据上面的硬件解决方案,我们以ResNet为例:模型的大小为230M,单张图片运算量为11 GFLPOS,Mini-batch假设为128。可以计算出各个硬件模块在深度学习训练中的耗时比较:

  • GPU:对于V100,假设有6 TFLOPS,一次Mini-batch 理论耗时:0.23s。
  • PCI-E:常见PCI-E 3.0 * 16,速度为10 GB/s,传输一个模型的理论耗时为:0.023s。
  • 网络:假设为10 GB/s的高速网络,传输一个模型的理论耗时:0.023s。
  • Disk:普通的磁盘,我们假设200M/s的读取速度,读取一次Mini-batch所需要的图片耗时:0.094s。

根据上面的数据结果,我们似乎可以得出一个结论:PCI-E和网络的传输耗时,相对于GPU来说,整整少了一个数量级,所以网络通信同步的时间可以忽略不计。然而问题并没有那么简单,上面例子中的耗时只是单个模型的耗时,但是对于8卡的集群来说,如果使用数据并行,每次同步就需要传输8份模型,这就导致数据传输的时间和GPU的计算时间“旗鼓相当”。这样的话,GPU就得每训练完一个Mini-batch,都得等候很久的一段时间(采取同步更新),这会浪费很多计算资源。因此,网络通信也需要制定对应的解决方案。下面我们以Nvidia NCCL中单机多卡的通信解决方案为例介绍,而多机多卡的通信解决方案其实是类似的。

上图是单机4卡机器,在硬件上,两种不同的通信体系。左边为普通的PCI-E通信,即4个GPU之间组成一个环状。右边为NVLink通信,即两两之间相互连接。

常见的通信类型如下图所示:

对于深度学习训练而言,关键的两种通信类型为:Broadcast和Reduce。Broadcast用于Master分发最新的模型给各个GPU。Reduce 用于各个GPU计算完Mini-batch后,把模型更新值汇总到Master上。以Broadcast为例,最简单的通信方式是Master往各个GPU上发送数据,这样的耗时就是4次模型传输的时间,通信时间就会太长,一种简单的优化方法如下图所示:

即把所需要传输的数据分成若干块,然后通过接力的方式逐个传递,每个GPU都把自己最新的一块数据发送到下一个GPU卡上。这种传输方式能充分利用硬件层面的通信结构,使得需要的耗时大幅缩减。与此类似的,Reduce的通信优化也可以采取相同的方式进行提速。

美团的定制化深度学习系统

尽管目前在业界已经推出了很多著名的深度学习训练平台,通用的训练平台如TensorFlow、MxNet等等,还有领域专用的训练平台,如语音识别中的Kaldi,但是我们经过调研后,决定内部自主开发一套深度学习系统,理由如下:

  • 通用的训练平台,缺乏了领域特色的功能。如语音识别中的特征提取模块和算法。
  • 通用的训练平台,通常是基于Data-flow Graph,来对计算图中的每个operator进行建模,所以颗粒度很小,需要调度的单元多,导任务调度复杂。
  • 领域特色的训练平台,如Kaldi,在神经网络训练的时候,性能不足。
  • 线上业务存在很多特殊性,如果使用TensorFlow之类作为训练平台,不太适合线上业务的情景。

NLU线上系统

线上系统的业务特点

我们在设计NLU线上系统时,考虑了NLU业务的一些特性。发现其具备如下的一些特点: * 随着业务和技术的变化,算法流程也经常发生变化。 * 算法流程是多个算法串联组成的,不单纯的只有深度学习算法。如分词等算法就不是DL算法。 * 为了能够快速响应一些紧急问题,需要经常对模型进行热更新。 * 更重要的是,我们希望构建一个能以“数据驱动”的自动迭代闭环。

业务多变

NLU任务的算法流程是多层级的,并且业务经常发生变化。如下图所示:

即随着业务要求的变化,NLU系统一开始的算法流程,只需要把一个Query分为两个类,但是到后面,极有可能会变成需要分为三个类别。

热更新

根据业务需求,或者为了紧急处理一些特殊问题,NLU线上系统经常需要做出快速响应,热更新算法模型。如最近的热点词“skr”,几乎是一夜之间,突然火爆起来。如下图所示的微博,如果不能正确理解“skr”的正确语义,可能就不能准确理解这条微博想要表达的意思。

为了避免影响用户体验,我们可能会对NLU系统,马上进行热更新,把新模型紧急进行上线。

数据驱动的自动迭代闭环

对于线上系统而言,构建如上图所示的自动迭代闭环,能更好地利用业务数据来提升服务质量。

NLU线上系统的核心设计

算法流程的抽象

为了适应线上系统串联、多变的算法流程,我们把线上系统的算法进行抽象,如下图所示:

即每一个算法,都依赖于若干个槽位(Slot)和资源(Resource),一旦槽位和资源就位,就会触发对应的算法执行。算法的执行先通过算法适配器,来适配槽位和资源中的数据,转换成算子的输入格式。然后算子执行算法本身,执行完算子后,再经过算法解析器。算法解析器主要用于解析算法执行的结果,触发对应的槽位。如根据算法的结果,触发Top 3的结果。

多个算法串联起来,就构建成如下结果:

热更新流程的设计

如上图所示,我们把算法的热更新流程设计如上。初试状态为左上角,即多个Query使用同一份模型数据。当遇到模型更新的请求后,系统将会block住新的query(右上角状态)。然后更新模型完后,新的query使用新的模型,旧query依然使用旧模型(右下角状态)。最后,当使用旧模型的query结束后,把旧的模型从内存中删除(左下角),然后系统恢复到初始状态。

声学模型训练系统

因为TensorFlow等通用深度学习训练平台,缺乏了特征提取等业务相关的领域功能,而Kaldi的声学模型训练过程又太慢。所以美团开发了一个声学模型训练系统——Mimir,其具备如下特性:

  • 使用比TensorFlow更粗颗粒度的建模单元,使得任务调度、优化更简单方便易行。
  • 使用数据并行的并行方案,单机多卡可达到近线性加速。(采取同步更新策略下,4卡加速比达到3.8)
  • 移植了Kaldi的一些特有的训练算法。
  • 速度上为Kaldi的6~7倍。(800个小时的训练数据,单机单卡的条件下,Kaldi需要6~7天, Mimir只需20个小时)
  • 业务上,移植了Kaldi的特征提取等领域的相关模块。

参考资料

  • NCCL: ACCELERATED MULTI-GPU COLLECTIVE COMMUNICATIONS
  • 【深度学习】老师木讲架构:深度学习平台技术演进

作者简介

  • 剑鹏,美团点评算法专家。2017年加入美团,目前作为语音识别团队的声学模型负责人,负责声学模型相关的算法和系统设计与开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个程序员的理财观

文 | 王喆你好,我叫王喆,看过我技术文章的朋友知道,我是一个搞推荐系统的机器学习工程师,不熟悉的同学也没关系,就当我是一名普普通通的程序员就好。但今天我们不谈技术,也不谈996这些烦人的话题&#xff0…

2020年最值得收藏的60个AI开源工具

原本链接:https://www.infoq.cn/article/2uabiqaxicqifhqikeqw 本文,InfoQ梳理了60个2019年至今GitHub上热门的开源工具,献给那些对新征程满怀期待的开发者们。Flair (顶级 NLP 库)2018 年是 NLP 井喷的一年。像 ELMo 和谷歌 BERT 这样的库层…

LeetCode 942. 增减字符串匹配

1. 题目 给定只含 “I”(增大)或 “D”(减小)的字符串 S ,令 N S.length。 返回 [0, 1, …, N] 的任意排列 A 使得对于所有 i 0, …, N-1,都有: 如果 S[i] "I",那么…

Netty堆外内存泄露排查盛宴

导读 Netty 是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了 TCP 和 UDP 套接字服务器等网络编程。 Netty 底层基于 JDK 的 NIO,我们为什么不直接基于 JDK 的 NIO 或者其他NIO框架…

论文浅尝 - ESWC2020 | YAGO 4: A Reason-able Knowledge Base

论文笔记整理:叶群,浙江大学计算机学院,知识图谱、NLP方向。会议:ESWC 2020链接:https://suchanek.name/work/publications/eswc-2020-yago.pdfIntroductionYAGO是世界上最大的链接数据库之一,由德国马普研…

责任链模式在Android中的应用

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 责任链其实在Android中出现的频率还蛮高的,事件传递就是一种责任链机制。接下来我为大家介绍在开发应用时责任链的用处: 1.触摸事件的应用。2.响应事件的应用。 何为责任…

最新版《神经网络和深度学习》中文版.pdf

获取最新版《神经网络和深度学习》最新版PDF和PPT的方法: 1.扫码关注 “Python与机器智能” 公众号2.后台回复关键词:神经网络注:此处建议复制,不然容易打错▲长按扫描关注,回复神经网络即可获取文档目录如下获取最新版…

论文浅尝 | 知识图谱的不确定性衡量

论文笔记整理:谭亦鸣,东南大学博士。来源:Knowledge and Information Systems volume 62, pages611–637(2020)链接:https://link.springer.com/article/10.1007/s10115-019-01363-0概要本文的核心工作是利用知识结构来衡量知识库…

LeetCode 709. 转换成小写字母

1. 题目 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。 2. 解题 char tolower(char)小写比大写对应字符大32 class Solution { public:string toLowerCase(strin…

Logan:美团点评的开源移动端基础日志库

前言 Logan是美团点评集团移动端基础日志组件,这个名称是Log和An的组合,代表个体日志服务。同时Logan也是“金刚狼”大叔的名号,当然我们更希望这个产品能像金刚狼大叔一样犀利。 Logan已经稳定迭代了一年多的时间。目前美团点评绝大多数App已…

如何实现一个循环显示超长图片的控件

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 某次被问到如何实现一个滚筒状的控件,就是可以将一张很长的图片沿着Y轴无限旋转,如下图所示: 大概就是这个意思,当时还不知道图片可以裁剪&…

斯坦福大学——人工智能本科4年课程清单

文 | Mihail Eric编 | 大数据文摘相信每个入行人工智能的老手,对自己过往的几年学习生涯都或多或少会有一些遗憾:如果我当年先从基本概念入手就好了,如果我当年把核心算法吃的更透一点就好了……最近,一位在行业内工作了几年的斯坦…

bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结

bert模型简介、transformers中bert模型源码阅读、分类任务实战和难点总结:https://blog.csdn.net/HUSTHY/article/details/105882989 目录 一、bert模型简介 bert与训练的流程: bert模型的输入 二、huggingface的bert源码浅析 bert提取文本词向量 BertMo…

LeetCode 476. 数字的补数(移位 异或^)

1. 题目 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 2. 解题 先求出该数的2进制有多少位然后分别每位与1进行异或操作 class Solution { public:int findComplement(int num) {int n 1, num_copy num;while(num_copy/2){n;num_copy / 2;}wh…

论文浅尝 - ICLR 2020 | 用于文本推理的神经模块网络

论文笔记整理:邓淑敏,浙江大学在读博士,研究方向为低资源条件下知识图谱自动化构建关键技术研究。论文链接:https://openreview.net/pdf?idSygWvAVFPr Demo链接: https://demo.allennlp.org/reading-comprehension 代码链接: htt…

全栈深度学习第3期: 怎样科学管理实验数据?

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目,通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。1. Berkeley深度学习追剧群目前已有1000小伙伴加入,公众号后台回复口令 深度学习追剧 入群…

论文浅尝 - ICLR2020 | 通过神经逻辑归纳学习有效地解释

论文笔记整理:朱渝珊,浙江大学直博生。研究方向:知识图谱,快速表示学习等。论文链接:https://arxiv.org/pdf/1910.02481.pdf本文是ICLR 2020的一篇关于知识图谱中关于复杂(树状、组合)规则可微学…

上海交大张拳石:神经网络的变量交互可解释性研究

文 | Qs.Zhang张拳石知乎可解释性研究一直有两副嘴脸,一副烈火烹油繁花似锦,一副如履薄冰零丁洋里叹零丁。在2018年我开始发知乎是为了“活着”——被刷榜为王的风气屡屡打击之后,一朝中稿,倒过一口气来,终于可以跟大家…

基于TensorFlow Serving的深度学习在线预估

一、前言 随着深度学习在图像、语言、广告点击率预估等各个领域不断发展,很多团队开始探索深度学习技术在业务层面的实践与应用。而在广告CTR预估方面,新模型也是层出不穷: Wide and Deep[^1]、DeepCross Network[^2]、DeepFM[^3]、xDeepFM[^…

python库Camelot从pdf抽取表格数据以及python库camelot安装及使用中的一些注意事项

一、python库camelot安装及使用中的一些注意事项 1)camelot方法有两种解析模式:流解析(stream)、格子解析(lattice),其中格子解析能够保留表格完整的样式,对于复杂表格来说要优于流…