百度 于洋 - PaddlePaddle:Towards a Deep Learning Compiler for the Cloud

冉夜卉

2017/12/18 发布于 技术 分类

ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过50%拥有8年以上的工作经验。 ArchSummit秉承“实践第一、案例为主”的原则,展示新技术在行业应用中的最新实践,技术在企业转型中的加速作用,帮助企业技术管理者、CTO、架构师做好技术选型、技术团队组建与管理,并确立技术对于产品和业务的关键作用。

文字内容
1. PaddlePaddle Towards  a  Deep  Learning  Compiler   于洋   Baidu  
5. 于洋   百度资深工程师   百度资深工程师,从事百度深度学习平台PaddlePaddle开发工作。2015年天津 大学硕士毕业。之后加入百度后一直从事深度学习系统的研发,主要负责深度学 习系统的性能优化和功能开发工作。是PaddlePaddle的主要开发人员之一,参与 开发了PaddlePaddle的Fluid模块。    
6. PaddlePaddle历史   开源前   •  百度内部项目   开源后   •  2016年9月开源   •  四年前由徐伟老师发起   •  开源后TechLeader  -----  王益   •  50+百度内部产品使用   •  新的PythonAPI   •  支持浏览器编程,云端运行   •  获得两次百度百万美元最高奖   •  深度整合Kubernetes   •  发布PaddlePaddle  Fluid  
7. 深度学习框架历史   基于层的深度学习 框架      用Sequence  Of   Layer表示神经网络   基于Op的深度学习框 架     用DAG表示神经网络   四年前! 两年前! 命令式编程的深度 学习框架     使用编程语句表示 神经网络   ⺫⽬目前!
8. 深度学习框架历史   •  四年时间,发展出三代深度学习系统   •  深度学习系统表达能力越来越强   •  Sequence  of  Layer   •  适应CNN   •  Symbolic  Programming  paradigm   •  DAG   •  可以适应RNN,并减少框架核心的代码量   •  Symbolic  Programming  paradigm   •  Imperative  programming   •  不区分神经网络的配置和执行。   •  神经网络边配置边执行。  
9. Symbolic  神经网络框架的问题   •  缺乏像编程语言般的灵活性   •  举例:   •  RNN会按照展开成多份静态网络   •  每份静态的网络只能处理同样形状(Shape)的数据。  
10. PyTorch的命令式编程范式   •  借用了其他编程语言的控制流   •  好处:    框架本身不用关心If/Else,  While如何实现   •  问题:   •  无法序列化网络。不能很好的部署、集群并行。   •  性能优化空间小。  
11. 编译器的主要模块   Source   Code   Frontend! Common Optimizer! Backend! Machine   Code  
12. PaddlePaddle-Fluid编译器设计思路   Python! Frontend! Other! Language! frontend! ProgramDesc! (Nested Block)! MultiGPU Backend! Cluster Backend! FPGA Backend! …!
13. 编译阶段与运行阶段分离   •  编译阶段描述计算流程   •  编译结果是ProgramDesc   •  类似编程语言中的AST(抽象语法树)   •  设备无关优化在编译阶段完成   •  不同执行器后端根据设备特性对Program进行优化、运行  
14. Block   •  PaddlePaddle-Fluid将计算描述成嵌套的Block,而不是DAG。   编程语⾔言! For, while! If-Else, Switch! 顺序执⾏行! PaddlePaddle! WhileOp! IfElseOp! 指令(Op)序列!
15. RNN  /  Loop  
16. If-else  /  IfElseOp  
17. 更强的IfElse/While   •  与PyTorch/DyNet实现动态网络的机制不同,Fluid实现动态的IfElse/ While操作   •  『动态』:    每一个mini-batch中的每条数据的分支都可以不同   •  『高效』:    数据自动基于Batch运行,无补零  
18. PaddlePaddle-Fluid  RNN执行流程   AvgLoss! Loss! Loss! Loss! FC! FC! FC! RNN! RNN! RNN! Loss! Loss! FC! FC! RNN! RNN! Loss! Loss! Loss! Loss! Loss! FC! FC! FC! FC! FC! RNN! RNN! RNN! RNN! RNN!
19. 执行器优化:  单设备à多设备   Data! FC! FC! …! …! Data! FC! FC! FC! FC! FC! FC! FC! FC! …! …! …! …! …!
20. 执行器优化:  Kernel  Fusion   Op! Fusible! Op! Op! Op! Fused Op! Op! Op!
21. 从单机到多机   •  本地训练程序编译出中间结果  `Program`   •  本地训练程序将中间结果上传给集群Master节点   •  集群Master节点将单机`Program`分解变换成集群每个节点需要执行的 程序  
22. 从单机到多机   Program   Local! Master! Program   Program   Laoptop! Model Parallelism! Worker! Worker! Worker! Data Parallelism! Worker! Role=PServer! Worker! Role=PServer   Worker! Role=PServer   Worker! Role=Trainer! Worker! Role=Trainer!
23. 项目信息   •  Main  Repo   •  Book   •  github.com/PaddlePaddle/Paddle   •  github.com/PaddlePaddle/book   •  Model  Bank   •  Cloud   •  github.com/PaddlePaddle/models   •  github.com/PaddlePaddle/cloud