技术公开课实录:飞桨编程指南和特性解读

原创
2019/12/12 19:41
阅读数 59

导读:飞桨PaddlePaddle)致力于让深度学习技术的创新与应用更简单。为了让更多的开发者了解飞桨的最近技术进展,特别组织了系列技术稿件,视频来源于2019 Wave Summit秋季深度学习开发者峰会上的技术公开课。

 

本期是由百度飞桨主任架构师为大家带来飞桨编程指南和特性解读,敬请观看。

视频关键知识点Notes:

01

编程指南

飞桨核心框架整体分为五个部分:模型组网、模型表达与优化、模型训练、以及服务器和移动端的预测部署。飞桨1.6版本,在服务器端增加了C语言的API,同时加强了与模型压缩PaddleSlim、端侧推理引擎Paddle Lite的配合。

1.1 编程接口API

飞桨在Python层能够调用的API超过一千个。主要分为两类。一类是框架类API,另一类是组网类API。框架类API用来定义执行过程,包括执行器、模型的存取、分布式计算这些整体训练流程的控制API。而组网类的API里面包含重要的基础数据结构、算子、网络层等。

1.2 网络结构Program

飞桨的整个开发过程当中,用Program表示整个网络结构,一个Program里面会包含很多的Block,代表了写程序时的控制流程。Block内部有两类重要的东西,一类就是数据,另一类就是计算。通常所谓的Tensor数据,飞桨统一用Variable来表示,包括各种数据类型。而在Layer里则是各种计算。

 

02

 新特性与升级

2.1  基础API升级

飞桨在1.6版本升级了很多类型和序列的检查,在一些常用的OP上增加了Tensor输入。在过去飞桨的版本里面,很多OP需要输入一个定义好的数据,这样在组某些网络结构会不够灵活。通过支持Python的输入,现在可以实时计算拿到Python的维度。

 

2.2  面向对象式API

在原生飞桨的API里更多采用了函数制的API,缺点是在定义一层复杂网络后,想要访问变得非常困难。针对这样的问题,飞桨1.6进一步升级了面向对象式的API,Layer可以通过面向对象的方式实现。先做成员的定义,再做成员函数调用,更容易控制中间成员的变量。

 

2.3  动态执行模式

动态执行模式和静态执行模式的组网过程完全相同。区别是需要做整个数据变量的定义,可以实时的拿到数据,有极高的可调试性。

 

2.4  数据异步读取API

飞桨1.6版本之前,数据读取主要采用异步读取PyReader,把计算和数据的IO折叠起来,充分的利用性能。虽然效率比较高,但会调用整个Program,对整个网络结构产生变化。飞桨1.6中增加了DataLoader接口,数据的异步读取而不会改变网络结构,既高效又保证了易用性。

 

2.5  Seq2Seq API

在旧版本的飞桨里面,使用标准结构如LSTM、GRU是非常简单的,调用API就可以了。但若想要自定义非标准的结构就会有点困难。在新版本里面,飞桨做了RNNCell的封装,定义了单步计算的过程,可以参考其写出自定义的网络结构,比如加上attention等其他的操作、变换。通过调用RNN循环,得到了整个循环网络的结构。

 

2.6  自定义PythonAPI

飞桨1.6可以自定义的OP,加入到Program里面,作为正常的OP使用。

 

2.7  自定义C++Operator

对于部署到其他的生态环境的场景,飞桨也有C语言自定义C++ OP的方式。

 

2.8  预测API

在一些生产环境里面,比如像Java或PHP,实际上调用C++会比较麻烦。飞桨1.6增加了一套C语言的API,可以很容易的将接口集成到Java里面,实现快速的部署。

 

进入网盘获取视频中的PPT,链接:

https://pan.baidu.com/s/1WayOHKsx3g2wDbqz1w8-ww      密码:ss8u

想与更多的深度学习开发者交流,请加入飞桨官方QQ群:796771754。

如果您想详细了解更多飞桨PaddlePaddle的相关内容,请参阅以下文档。

官网地址:

https://www.paddlepaddle.org.cn/

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部