release_note_cn.md 5.2 KB
Newer Older
1
#  Release Note
2

3
## 重要声明
4

5
 - 此版本为测试版,还在迭代中,目前还没有稳定,后续API会根据反馈有可能进行不兼容的升级。对于想要体验飞桨最新特性的开发者,欢迎试用此版本;对稳定性要求高的工业级应用场景推荐使用Paddle 1.8稳定版本。
6

7
 - 此版本主推动态图的开发方式,并提供了高层API的封装。动态图模式具有很好的灵活性,高层API可以大幅减少重复代码。对于初学者或基础的任务场景,推荐使用高层API的开发方式,简单易用;对于资深开发者想要实现复杂的功能,推荐使用动态图的API,灵活高效。
8

9
 - 此版本同时对飞桨的API目录体系做了优化,原目录下API会建立alias仍然可用,但建议新的程序使用新目录结构。
10 11 12

## 基础框架

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
### 基础API
- 组网类API实现动静统一,支持在动态和静态图两种模式下运行
- API目录结构调整,Paddle 1.x 版本的API主要位于paddle.fluid目录,本版本对API目录结构进行调整,使得分类更为合理,具体调整规则如下:
  - 原fluid.layers下跟tensor操作相关的API移动到paddle.tensor目录
  - 原fluid.layers下跟组网相关的操作移动到paddle.nn目录,带有参数的类型放到paddle.nn.layers目录,函数式的API放到paddle.nn.functional目录
  - 原fluid.dygraph下动态图专用API移动到paddle.imperative目录
  - 创建paddle.framework目录,用来存放跟框架相关的Program, Executor等API
  - 创建paddle.distributed目录,用来存放分布式相关的API
  - 创建paddle.optimizer目录,用来存放优化算法相关的API
  - 创建paddle.metric目录,用来创建评估指标计算相关的API
  - 创建paddle.incubate目录,用来存放孵化中的代码,其中的API有可能会发生调整,该目录存放了复数计算complex和高层API相关的代码
  - 所有在paddle.tensor和paddle.framework目录下的API,在paddle目录下创建别名,比如:paddle.tensor.creation.ones可以使用paddle.ones别名

- 新增API如下:
  - 在paddle.nn目录新增8个组网类的API: interpolate, LogSoftmax, ReLU, Sigmoid, loss.BCELoss, loss.L1Loss, loss.MSELoss, loss.NLLLoss
  - 在paddle.tensor目录新增59个Tensor相关API:add, addcmul, addmm, allclose, arange, argmax, atan, bmm, cholesky, clamp, cross, diag_embed, dist, div, dot, elementwise_equal, elementwise_sum, equal, eye, flip, full, full_like, gather, index_sample, index_select, linspace, log1p, logsumexp, matmul, max, meshgrid, min, mm, mul, nonzero, norm, ones, ones_like, pow, randint, randn, randperm, roll, sin, sort, split, sqrt, squeeze, stack, std, sum, t, tanh, tril, triu, unsqueeze, where, zeros, zeros_like
  - 新增device_guard用来指定设备,新增manual_seed用来初始化随机数种子


### 高层API
- 新增paddle.incubate.hapi目录,对模型开发过程中常见的组网、训练、评估、预测、存取等操作进行封装,实现低代码开发,MNIST手写数字识别任务对比动态图实现方式,高层API可减少80%执行类代码。
- 新增Model类封装,继承Layer类,封装模型开发过程中常用的基础功能,包括:
  - 提供prepare接口,用于指定损失函数和优化算法
  - 提供fit接口,实现训练和评估,可通过callback方式实现训练过程中执行自定义功能,比如模型存储等
  - 提供evaluate接口,实现评估集上的预测和评估指标计算
  - 提供predict接口,实现特定的测试数据推理预测
  - 提供train_batch接口,实现单batch数据的训练
- 新增Dataset接口,对常用数据集进行封装,支持数据的随机访问
- 新增常见Loss和Metric类型的封装
- 新增CV领域Resize, Normalize等16种常见的数据处理接口
- 新增CV领域lenet, vgg, resnet, mobilenetv1, mobilenetv2图像分类骨干网络
- 新增NLP领域MultiHeadAttention, BeamSearchDecoder, TransformerEncoder, TransformerDecoder , DynamicDecode API接口
- 发布基于高层API实现的12个模型,Transformer,Seq2seq,  LAC,BMN, ResNet,  YOLOv3, , VGG, MobileNet, TSM, CycleGAN,  Bert, OCR
46 47

### 性能优化
48
- 新增`reshape+transpose+matmul` fuse,使得Ernie量化后 INT8 模型在原来基础上性能提升~4%(在6271机器上)。量化后INT8模型相比未经过DNNL优化(包括fuses等)和量化的FP32模型提速~6.58倍
49

50
### 调试分析
51

52 53
- 针对Program打印内容过于冗长,在调试中利用效率不高的问题,大幅简化Program、Block、Operator、Variable等对象的打印字符串,不损失有效信息的同时提升调试效率
- 针对第三方库接口`boost::get`不安全,运行中抛出异常难以调试的问题,增加`BOOST_GET`系列宏替换了Paddle中600余处存在风险的`boost::get`,丰富出现`boost::bad_get`异常时的报错信息,具体增加了C++报错信息栈,出错文件及行号、期望输出类型和实际类型等,提升调试体验
54

55
## Bug修复
56

57 58 59 60
 - 修复while loop中存在slice操作时计算结果错误的bug
 - 修复inplace ops引起的transformer 模型性能下降问题
 - 通过完善cache key, 解决Ernie精度测试最后一个batch运行失败的问题
 - 修复fluid.dygraph.guard等context中出现异常时无法正确退出的问题