|
|
51CTO旗下网站
|
|
移动端

Baidu Create 2018深度学习前沿技术与工业应用公开课精彩回顾

中国开发者们的年度盛会——百度AI开发者大会于近日落下帷幕。本次大会中,深度学习框架PaddlePaddle备受开发者们的关注,深度学习前沿技术与工业应用公开课分论坛现场座无虚席,开发者们挤爆全场,不少参会者甚至坐在地上听完全部课程。

作者:查士加来源:51CTO|2018-07-24 11:07

【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道

【51CTO.com原创稿件】中国开发者们的年度盛会——百度AI开发者大会于近日落下帷幕。百度在深度学习领域的技术研发始于2012年初,一年后,百度在深度学习平台领域已取得初步成功,并将其应用于百度的多项核心业务。

百度深度学习框架PaddlePaddle自2016年开源以来,受到了业界的广泛关注,已经成为全球发展热度增速最高的开源深度学习平台,PaddlePaddle社区更是汇集了一大批AI技术开发者。开源的模式使PaddlePaddle在近两年取得了快速发展和升级,2017年11月百度发布了更细粒度的新一代深度学习框架——PaddlePaddleFluid,今年7月发布了PaddlePaddle3.0,这些相继印证了百度在深度学习领域的雄厚实力。

实际上,无人车、智能家电、AI云、AlphaGo等常见的AI应用领域,都离不开深度学习框架的训练和预测服务,深度学习框架则相当于AI时代的操作系统,在AI领域扮演者至关重要的角色。本次大会中,深度学习框架PaddlePaddle备受开发者们的关注,深度学习前沿技术与工业应用公开课分论坛现场座无虚席,开发者们挤爆全场,不少参会者甚至坐在地上听完全部课程。

为满足现场观众对前沿技术的渴求,本次公开课在每轮演讲结束后特意设置了多轮问答环节,与会嘉宾积极踊跃地提问,涉及到实操性的问题时更是连翻追问,百度的专家讲师团纷纷给出了耐心详细的解答,会后参会者们纷纷表示受益颇丰。

本次公开课的课程内容涉及到深度学习领域的方方面面,包括深度学习的语义计算技术,百度视觉技术、OCR迁移至Paddle-Fluid版本的工程实例,PaddlePaddle的新特性,大规模稀疏数据分布式模型训练,移动端深度学习技术及应用实践,深度学习预测引擎Anakin的优化,以及深度学习的可视化等,小编梳理了本届开发者大会中百度专家讲师们的最新研究及实践成果,让我们一睹为快吧。

深度学习公开课现场的一角:坐在地上的小伙伴们

百度自主研发的深度学习框架PaddlePaddle

基于深度学习的语义计算技术

百度产品中常见的语义匹配场景包括百度搜索、百度Feed流以及百度拍照搜索等,分别实现问题与答案匹配、用户与新闻匹配、图片与文本匹配的效果。

语义匹配模型包括输入层、表示层、匹配层和匹配得分四层。

其中表示层需要完成输入数据转化为数值向量的过程。

匹配层需要完成两个向量融合并产生打分的过程,表示层和匹配层都可以是一个深度神经网络。

上图是百度常见的训练模型,百度拥有海量的用户行为日志,包括点击行为和非点击行为,这些行为通常暗示一种语义关系,点击行为的语义更相关,因此要从海量的用户行为日志信息中挖掘样本,提取高质量弱标记数据,将语义相关的数据作为正例,语义不太相关的数据作为负例,Query和正例的打分比Query和负例的打分大,使𝑺↓+ − 𝑺↓−> 𝝈,通过定义目标函数来优化神经网络的参数。

由于召回端有非常多的结果,如果用复杂的神经网络模型来计算匹配度,系统很难承受,因此可以在召回层对Query做向量表示,将这个表示离线的计算出来,可以大大减少计算开销。在精排阶段,在结果很少的情况下可使用GPU做复杂的模拟计算,也就是在匹配层进行复杂计算。

流行的Encoder, Decoder算法组件, Transformer:下载链接

接下来举一个文本生成的例子。我们常用的机器翻译模型,其目标是把原语言通过神经网络建模翻译成目标语言,目前学术界对翻译模型的抽象都是基于编码器和解码器两个阶段的建模方法。基于用户输入的原语言做Decoder编码,然后对Decoder的词做最大化的测量估计,在机器翻译的解码过程中,通常对用户输入的语言做原语言的编码,通过Beam  Search的方法找到最大可能的翻译的结果。Transformer是近两年比较常用的、效果和速度都比较好的模型,感兴趣的开发者不妨跑一跑。

语言模型是自然语言处理中比较经典的问题,其目标是学习一个词序列的联合概率函数,也就是说这个句子是否常见。如世界杯期间,在百度搜索中搜“阿根廷在”这四个字,“阿根廷在哪个组”这个Query的概率较大。

Neural Network Language Model. Bengio. 2003

上图是神经网络中较常见的Neural Network Language Model,它是用神经网络做语言模型的比较常见的模型。

上图是一个循环神经网络,它会不断融合历史和当前的信息,因此也是作为语言模型比较常见的侯选。

接下来介绍一下百度卖方的NLP的计算服务,在ai.baidu.com网站有很多基于深度学习训练的NLP模型的可调用服务,包括DNN语言模型、词法分析、短文本相似度、中文情感分析等。百度在NLP方面开源了一些基于PaddlePaddle的项目,如NLP里的中文词法分析,开源了整个模型训练的配置,以及部署的方法,其中基于深度学习网络,融合了切词、标注,以及专名识别,是三个任务融合为一体的一个开源项目。

PaddlePaddle应用于百度视觉技术的工程实践

百度的AI视觉技术主要包括四个方面:图像识别、图像搜索、视频理解和机器人视觉。五年前百度已开始将机器人视觉全面转向深度学习技术,这些技术大量应用于百度内部和外部的各种业务。

图像识别是把图像生成文本标签,包括通用分类,百度内部主要的分类模型有文字识别、人脸识别,以及医疗图像、图像审核和一些细粒度分类等一些特定领域的应用,图像识别主要使用CNN的分类技术。

图像检索是用深度学习定义图像和图像之间的关系,图像检索主要应用于百度识图,包括图文检索、相同图片检索,相似图片检索以及商品图片检索等功能。

视频理解用于视频分类、视频标签等,也大量应用于监控场景下的目标跟踪、人体姿态跟踪等。在小视频带来的新型市场环境下,视频理解技术大量应用于百度内部的业务场景中。

机器人视觉主要用于一些工业场景,包括深度传感器、SLAM、嵌入式视觉等,使用大量的嵌入式的技术。

据现场专家的介绍,这些AI视觉技术已经开放,同时百度还会不断通过新的数据进行持续迭代,提供更加优质的服务。

进行视觉技术研发的挑战

百度内部有上百个模型同时使用,每天会不断产生新的数据,模型迭代需要解决的问题主要有三个方面:一是如何评价对比模型,然后才能选择最优的模型结构或优化策略;二是如何快速经济的训练(复现)这些模型;三是如何沉淀工程和算法经验,供大家共同使用。百度视觉技术研发的目标是使得机器学习流程化、标准化,构建模型持续快速迭代能力。

接下来介绍一下百度是如何基于PaddlePaddle解决上述问题的。

基于PaddlePaddle的模型研发

百度内部有两种模型的研发,一是基线模型,是一些基础的视觉问题,如图像分类、图像检测、图像跟踪等,百度将这些问题定义为一个基本的机器学习问题。另一种是业务模型,就是针对业务场景、业务需求来收集数据,训练模型。这两种场景下采用不同的方式,使模型的比较和模型的复现更加容易。

自2017年PaddlePaddle发布Fluid版本后,基线模型研发统一采用开源的方式实现,并且通过开源社区提交基线模型的训练代码和文档等研究成果,它的好处在于可以把机器学习的各个步骤进行标准化,包括将训练框架统一到PaddlePaddle的最新版本,数据读取、预处理、网络定义、优化参数等接口均实现标准化,便于模型对比。

PaddlePaddle的技术支持

1、PaddlePaddle提供标准的符合论文实现的operator实现;

2、通过PaddlePaddle实现统一的训练方式,保证单机单卡、单机多卡、多机多卡训练效率和收敛一致性;

3、基于开源社区开发新的视觉相关operator。

Paddle-Cloud 集群训练

Paddle-Cloud平台的作业管理

百度内部基于PaddlePaddle有一个较好的实现模型快速迭代的Paddle-Cloud平台,基于Kubernetes资源调度、队列管理、用户管理等于一身,可管理模型训练,可统一管理训练配置,提供Visual-DL的支持。在数据读取方面,Paddle-Cloud平台上实现了统一的数据读取、数据仓库的直读,保证可以从原始数据直接复现业务模型。此外,训练模型可以经过平台训练,直接存储在模型仓库中,跟存储打通。

示例:图像分类模型的论文结果复现——复现标准的分类模型

示例:图像分类模型的论文结果复现——搭建过程

视觉模块:已发布Paddle视觉模型

• 图像分类:image_classification

• 人脸检测:face_detection

• OCR识别:ocr_recognition

• 目标检测:object_detection

• 模型转换:image_classification/caffe2fluid

视觉模块:开发中的视觉模型

• 图像特征学习

• OCR end2end

• 定点化训练

未来会发布更多自研模型

• 人脸检测: 2018 WiderFace 第一名

• 大规模分类: 2018 Webvision 第一名

• 视频识别: 2018 ActivityNet 第一名

工程示例:OCR Paddle-v1 迁移到Paddle-Fluid

下面重点介绍一下OCR的工程示例,OCR于三年前开始使用Paddle-V1版本进行识别模型训练,由于V1版本已不是主流的维护版本,因此要将OCR升级到最新的Fluid的版本,把训练统一迁移到内部的Paddle-Cloud集群,与此同时,百度一些优化的预测库也可以应用到最新的OCR预测中。

在此背景下,百度在开源社区成立了Paddle-vision联合项目组,并在迁移的过程中实现了模型研发、训练迁移和预测迁移三大目标。

在模型迁移的过程中,项目组将Paddle的一些特殊OP用Fluid的版本进行打平,验证了Paddle-Fluid版本的前向网络和Paddle-V1的一致性,同时也验证了新版本的训练效果。Fluid版本与旧版本Paddle对齐了模型训练指标,通过对比多种优化方法和学习率动态调整策略,使得整个网络的准确率大幅提升。

模型训练方面,实现Fluid框架训练OCR英文识别模型,与旧版本Paddle训练出的模型相比,精度相对提升1%。此外,还在Paddle-Cloud上实现了afs数据分发,实现了Paddle-Cloud进行单机单卡、单机多卡训练OCR识别模型。

OCR预测库接入和封装需要解决的问题包括:

1、开发Fluid预测库框架,实现统一接口的封装;

2、实现Fluid预测库框架下的多batch预测;

3、携手sys anakin团队优化了GPU预测速度,加速47%;

4、将fluid-OCR预测加入到QA自动回归测试流程,避免因Paddle升级而引入新的bug。

在预测库的接入和封装方面遇到了不少困难,其中包括封装的接口与原服务Tcmalloc兼容、预测加速不明显、新预测库对原检测系统耗时的影响大等问题。

具体的解决方法如下:

1、在动态库里面提供glibc编译的内存释放接口;

2、与sys anakin团队合作,优化了预测速度;

3、fluid默认打开了openblas的多线程。openblas多线程优先级较高,导致系统默认多线程的资源只能分配到单核CPU上,需要服务显式关闭openblas的多线程。

经过一番努力之后,实现了基于PaddlePaddle Fluid框架训练和预测的OCR英文识别模型上线。成功上线后,整体中英文系统QPS提升7%,每天影响约1500w含英文文本图像的OCR流量。

模型研发总结

1、基于公开数据集对齐公开算法,保证基线模型正确性,标准化数据集合和训练步骤,便于横向对比。

2、基于开源方式,百度实现贡献到Paddle社区,经过重复review,提升代码和文档质量,实现社区反馈,技术积累和问题解决。

3、基于PaddlePaddle统一的集群训练方式,实现一些高级训练特性的快速集成;Paddlemobile,anakin等团队针对不同硬件的优化;独立的训练QA测试,保证训练结果随版本迭代可复现。

深度学习框架PaddlePaddle的新特性与炼成之路

PaddlePaddle能全面支撑Modeling、Training和Serving下的各种AI场景。

Paddle Modeling

Paddle Modeling涵盖数百种计算operator和layer组网;支持序列变长,动态batch size;Pre-trained模型开放。

Paddle Training

Paddle Training支持同步,异步分布式;多线程,多GPU,多stream异构并行计算;ring,trainer-pserver拓扑。

Paddle Serving

Paddle Serving能实现服务器端快速部署;汇编层高度性能优化;移动端Linux-ARM/iOS/Android/DuerOS多终端支持。

PaddlePaddle Serving灵活适配多种预测引擎:

  • 灵活融合原生计算operator与第三方预测引擎;
  • 默认引擎,快速可用;
  • 兼容业内流行预测引擎TensorRT;
  • Anakin,百度开源预测引擎,性能优异。

PaddlePaddle Serving的默认引擎:

  • 统一的training与serving的基础架构和实现,训后模型快速部署。
  • 多pass进行图优化。
  • CPU MKLDNN高性能加速。
  • GPU可以混合调度TensorRT。

PaddlePaddle核心框架

PaddlePaddle Fluid版本主要包含四大组成部分:Python API;模型改写与优化;训练Runtime;CPU/GPU支持。

Python API支持图像模型、NLP模型、语音模型、推荐模型等各类模型。Python API大致可分为组网类底层API以及执行类底层API两大类别。组网类底层API包含通用、控制、计算、优化、IO等类型的API。执行类底层API包含训练、预测、分布式等API。

组网类API

  • Variables:Paddle中的变量,可以是Tensor,可以是Parameter,也可以是RPCClient。概念类似高级语言中的变量,可以有不同类型。
  • Layers:Paddle中,用户配置模型的基础模块,Layer表示一个或者一组紧密关联的计算,Layers可以通过输入输出连接起来。
  • Block:Block表示一组连续的计算逻辑,通常是一个或多个顺序Layer组成。通常主模型是一个block0,另外在control flow中,比如while, iflese,也会单独形成一个子block。
  • Control Flow:Paddle支持if-else, while, switch等编程语言中常见的control flow。以确保模型的灵活表达。control flow通常以block的形式存在。
  • Program:包含了1个或者多个block,表示一个完整的模型执行单元。执行器需要完整的执行Program,并保证读写关系符合用户的预期。

执行类API

执行类API

执行类API

示例

训练Runtime

训练Runtime

显存优化

  • InPlace Activation
  • 反向不需要input,并且输出和输入的tensor一致,可以直接overwrite input,节省显存开销。
  • Memory Optimizer
  • Live variable analysis:分析每个Op的live-in和live-out,找到可以将来被复用的candidate。在将来的op output中,如果有match candidate的,复用candidate,节省显存分配。

多卡并行-SSA Graph

  • 将模型program转换成一个可并发执行的Intermediate Representation (IR);利用Static Single Assignment为variable加version,得到一个正确的依赖关系;Build Pass中插入通信节点和额外的依赖关系。
  • 基于图依赖的执行:Input ready的所有operator可以并发执行;Operators在多个GPU上数据并行执行;多卡gradient聚合,确保数据并行中参数一致。

多卡并行-Profile

多机分布式

多机分布式支持ring、pserver两种模式。ring:自动插入多机communicator,多机同步训练,支持高性能RDMA通信。pserver:拆分成trainer program和pserver program。支持同步和异步的分布式训练。Trainer端多线程异步发送gradient;Pserver端多线程异步apply optimization。

用户Focus Modeling, 框架自动多机化部署:

  • 发现optimizer operators,parameters, gradients。
  • split和assign他们到parameter server上。
  • 在trainer和parameter server上插入发送和接收的通信节点。
  • 生成在trainer执行的program。
  • 生成在parameter server执行的program。

多机分布式的通信和集群:

  • 支持MPI, RPC等通信方式。
  • RPC将来会换成brpc,并提供原生的RPC+RDMA支持,极大提高通信效率。
  • 支持Kubernetes集群部署。

多机分布式下的容错:

  • trainer或者pserver failure后可以重启恢复训练。
  • 即将支持pserver端的分布式checkpoint和恢复,支持大规模embedding。

大规模稀疏数据分布式模型训练

在互联网场景中,亿级的用户每天产生着百亿级的用户数据,百度的搜索和推荐系统是大规模稀疏数据分布式模型训练的主要应用场景。

如何利用这些数据训练出更好的模型来给用户提供服务,对机器器学习框架提出了很高的要求。主要包括:

  • 样本数量大,单周20T+。
  • 特征维度多达千亿甚至万亿。
  • T级别,参数大。
  • 小时级更新,时效要求高。

主要问题包括三个方面:

1. 在千亿feature的时候,一个宽度8的 embedding table的参数量2980.23GB。

2. Feature ID使用hash算法计算,分布在int64范围内,难以预先确定。

3. 输入特征非常稀疏。(数百/千亿)

分布式查找表(Distribute Lookup Table):

1. 参数量大:针对数据特点的数据结构SelectedRows(key-value);分布式存储;Pserver端 save/load。

2. Feature ID不确定:Auto Growth。

3. 输入特征稀疏:参数Prefetch。

系统整体架构一

系统整体架构二

应用优化

  • Model Average Optimizer:训练中通过窗⼝累计历史parameter,在预测时使用average后的parameter,整体提高预测的精度。
  • 序列变长:Batch中序列长度不一,计算时无需填充。
  • 动态Batch:训练中,每个iteration的batch size可变。

移动端深度学习优化

移动端深度学习具有低延迟、节省流量、节省吞吐量和隐私安全四大优势,同时也面临着来自性能、机型覆盖、硬件芯片覆盖、SDK尺寸、内存使用、模型尺寸和32位APP限制等多方面的挑战。

影响移动端深度学习性能的硬件包括:

  • CPU:缓存预取,Block 对齐;降低总线带宽占用;DL预测加速。
  • GPU:矩阵运算,DL预测加速;图形渲染加速。
  • DSP/NPU:DSP高通多媒体芯片;NPU华为AI芯片。
  • FPGA:AIG合作研发ARM的AI框架;落地安防监控,各类摄像头场景。

影响移动端深度学习性能的工具:

  • ATrace - 从ftrace中读取统计信息然后交给数据分析工具来处理。
  • Gprof - gprof精确地给出函数被调用的时间和次数。
  • xcode - instrument 动态调追踪和分析OS X和iOS代码的性能分析。
  • streamline - 查看核心数据。

影响移动端深度学习性能的trick包括编译选项、循环展开、内联、分支优先和汇编。

缓存优化

neon优化

移动端深度学习的体积优化有编译选项、避免不必要引入、根据网络适配、定制probuf或者去掉。移动端深度学习的能效比优化从DSP、GPU和AI处理器三方面着手。

百度已与华为、ARM等多家硬件厂商展开合作。与华为的合作,基于百度视觉搜索SDK验证,在图像分类和主体监测方面,GoogLeNet-V3和squeezenet两种网络CPU与NPU性能对比,华为AI芯片的NPU加速效果显著。

百度还与ARM合作,且在Paddle-Mobile 中已经融入了ARM的合作成果,在Mali GPU上性能表现优异,实现了在G71 mobilenet 1.0运行时的自动切换。

此外,百度专家在本次公开课上还分享了深度学习预测引擎Anakin的优化以及深度学习的可视化,来自英特尔人工智能产品事业部的高级经理Marcin Rysztowski也分享了《PaddlePaddle在Intel平台的优化》的主题演讲。整场公开课可谓干货满满,不难看出百度在深度学习领域的成果颇丰。

据了解,为了更好的帮助开发者学习深度学习,PaddlePaddle建立了覆盖线上、线下的全套课程及培训。PaddlePaddle公开课拥有10大系列、400节课程、累计学习时间3000分钟的在线课程体系,可以覆盖开发者的学习全阶段。

没有到现场听课的小伙伴们也不必感到惋惜和沮丧,本次公开课的视频正在加紧剪辑中,并将在PaddlePaddle的官方微信号上更新,让我们共同期待吧。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

【责任编辑:查士加 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月最赞

读 书 +更多

网络管理员考试全真模拟试题与解析

本书是按照全国计算机技术与软件专业技术资格(水平)考试《网络管理员考试大纲》的要求,参照《网络管理员教程》及近年来考试试题编写的。...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊