Skip to content

Releases: PaddlePaddle/Paddle

PaddlePaddle 2.3.0-rc0 Release Note

30 Apr 12:12
5d4980c
Compare
Choose a tag to compare

我们很高兴地发布飞桨框架 2.3.0-rc0 版本,本版本包含如下重要更新。

API

  • 新增 100 多个 API,覆盖自动微分、线性代数、概率分布、稀疏张量、框架性能分析、硬件设备管理、视觉领域等方面。

  • 新增 4 个自动微分 API,11 个线性代数 API,21 个概率分布类 API,更好地支持科学计算、强化学习等场景。

  • 新增 11 个 稀疏张量计算 API,支持创建 COO、CRS 格式的 Sparse Tensor 以及与 Tensor 互相转换等基础功能。

  • 新增 9 个框架性能分析 API,以paddle.profiler.Profiler为核心,提供对训练、推理过程中性能数据的收集、导出和统计的功能。

  • 新增 7 个硬件设备管理 API,更好支持硬件相关信息获取。

  • 新增多个视觉、文本领域 API,方便复用 MobileNetV3, ResNeXt等骨干网络,实现快速组网。

飞桨高可复用算子库 PHI

  • 发布飞桨高可复用算子库 PHI (Paddle HIgh reusability operator library),支持组合式算子功能复用、Primitive算子内核复用、插件式硬件加速库复用。针对飞桨框架原算子库存在的算子接口不清晰、算子复用成本较高、调用性能不够快的问题,我们重构了飞桨框架的算子库,设计了灵活、高效的函数式算子库 Phi,可以通过对函数式算子接口组合调用的方式实现新算子。新算子库提供了 200 余个跟 python 开发接口保持一致的 C++ 运算类 API,以及近500个可供组合调用的前、反向函数式算子内核 Kernel,可大幅降低框架原生算子和自定义算子的开发成本。新算子库支持Primitive API方式开发算子内核,可支持不同硬件(比如GPU和XPU)的算子内核复用。新算子库支持以插件方式接入硬件(比如NPU)的加速库,实现低成本复用硬件加速库。

分布式训练

  • 全面升级自适应分布式训练架构,含弹性扩缩容、异步流水执行器、异构通信、自动并行等多个模块,支持了多种异构硬件下自动感知的分布式训练及分布式推理。

  • 动态图混合并行下新增MoE并行策略、GroupSharded 并行策略、Pure FP16 等,进一步支持了动态图下大模型的高效并行训练。

  • 全面升级优化了通用异构参数服务器架构,进行各模块的抽象简化,如通信、存储等,提升了参数服务器的二次开发体验;GPU 参数服务器在千亿参数百亿数据分钟级流式训练下性能提升2.38倍。

编译安装

  • 从 2.3.0-rc0 版本开始,飞桨对框架支持的 GPU 架构种类进行了调整和升级。

推理部署

  • 新增 Java API 和 ONNX Runtime CPU 后端。

  • 支持 TensorRT 8.0 / 8.2 和结构化稀疏,针对 ERNIE 类结构模型性能深度优化。

硬件适配

  • 新增自定义新硬件接入:提供一种插件式扩展 PaddlePaddle 硬件后端的方式。

  • 新增对华为昇腾910 / GraphCore IPU / 寒武纪MLU / 昆仑芯2代多种异构芯片的训练/推理支持。

框架架构

Thanks to our Contributors

This release contains contributions from the project core team as well as :

Adam Osewski, Allen Guo, arlesniak, chenenquan, chenyanlann, fengkuangxiaxia, fuqianya, fwenguang, guguguzi, helen88, houj04, Jacek Czaja, jakpiase, jianghaicheng, joanna.wozna.intel, joeqiao12, Leo Chen, Leo Guo, Li-fAngyU, lidanqing, Liyulingyue, Matsumoto GAO, maxhuiy, Ming-Xu Huang, Nyakku Shigure, piotrekobi, piotrekobiIntel, QingshuChen, qipengh, Skr Bang, Sylwester Fraczek, Sławomir Siwek, taixiurong, tanzhipeng, Tomasz Socha, TTerror, Webbley, yaozhixin, ykkk2333, yujun, Zhangjingyu06, zhangxiaoci, zhangyikun02, zhangyk0314, zlsh80826, zn, Zuza

PaddlePaddle 2.2.2 Release Note

26 Jan 02:13
b031c38
Compare
Choose a tag to compare

2.2.2 Release Note

1. 重要更新

我们很高兴的发布飞桨框架2.2.2版本,主要是对2.2.1中一些功能和性能问题的修复,并对部分功能点做了增强。

2. 训练框架(含分布式)

(1)新功能

API

  • 新增paddle.nn.Mishpaddle.nn.functional.mish,支持逐元素计算mish激活函数。 (#38803)

其他

  • paddle.nn.PReLUpaddle.nn.functional.prelupaddle.nn.static.prelu 新增支持 data_format 参数,可以设置输入的数据类型。 (#38495)
  • paddle.index_select 新增支持 float16 数据类型。(#38751)
  • 优化 paddle.multiplexinputs中张量 size 为 0 时的报错信息。(#38757)
  • paddle.fluid.contrib.slim.quantization.PostTrainingQuantization 新增初始化参数data_loader,支持传入 paddle.io.DataLoader 对象或者Python Generator 。(#38729)

(2)问题修复

API

  • 修复paddle.max在输入x.ndim > 6 and axis < 0时运行出错的问题。(#38070)
  • 修复paddle.maxpaddle.min的bug:在CPU设备上,当参数axis是list类型且len(axis) == x.ndim and axis[i] < 0时,结果出错。(#38478)
  • 修复paddle.nn.functional.unfold在InferShape计算时不区分compile time和runtime的问题。(#38925)
  • 修复paddle.nn.functional.cross_entropy在对labels进行检查时,存在不必要的GPU与CPU同步的问题。(#38849
  • 修复paddle.distributed.split在沿列切分FC时,反向计算时得到的输入梯度结果异常的问题。(#38724)
  • 修复 paddle.nn.Layer.to 不支持 paddle.dtype 类型的问题。(#38108)
  • 修复静态图下 paddle.linalg.svdfull_matrics=True 时,输出tensor的shape在动态图和静态图下不同的问题。(#37744)
  • 修复Tensor切片索引使用多个None类型索引时结果维度异常的问题。(#37400)
  • 修复Tensor索引赋值在部分场景下显存泄露的问题。(#38098)
  • 修复模型使用 save_inference_model 导出后,添加反向 pass 做训练,conv2d 缺失属性报错的问题。 (#38832)

IR(Intermediate Representation)

  • 动态图转静态图

    • 修复了部分初始化相关 API 动静行为不统一的问题。(#37827)
    • 修复动转静代码转写时会将 paddle 作为变量的问题。(#37999)
    • 修复动转静代码转写时,突出的代码注释导致转写报错的问题。(#38003)
    • 修复 for ... zip... 语句在动转静中死循环的问题。(#37846)
  • 模型量化

    • 修复动态图量化训练导出模型多余节点问题。(#38122) (#38025)
    • 针对量化模型在Paddle Lite上无法预测的问题,去除量化导出模型的 clip_extra 设置。 (#38343)
    • 针对 flatten_contiguous_range 算子在量化中输出配置错误的问题,修复 flatten_contiguous_range 量化设置。 (#37741)

其他

  • 自定义OP

    • 修复了自定义算子在多进程下加载Python API 时,可能因文件不完整导致报错的问题。(#38128)
    • 修复了在CentOS平台上编译时,D_GLIBCXX_USE_CXX11_ABI未按预期生效导致的编译失败问题。(#37878)
  • 动态图Inplace策略

    • 修复了多个inplace op连续执行时,accumulator 报错的问题。(#38406)
    • 修复了 Tensorsetitem 方法,对叶子节点进行inplace操作时,导致反向图构建错误的bug。(#38014)
  • NHWC 策略

    • 修复 batchnorm_op 中,当数据类型为 FP32 ,且数据维度 dims = 2,data_layout = NHWC 时,反向 Op 内中间变量未定义问题。 (#37020)

3. 部署方向(Paddle Inference)

(1)功能优化

框架及API更新

  • C API支持对c++ std::string的处理。(#38667)

后端能力增强

  • GPU 及 TensorRT 子图引擎相关更新
    • 支持 relu、relu6、tanh、sigmoid、pool2d、concat、batch_norm、split、gelu、scale、swish、prelu、clip、reduce_sum、reduce_mean 算子在静态 shape 且2维输入情况下调用 TensorRT 推理。(#37773)
    • 支持mish激活函数调用 TensorRT 推理。 (#38866)

(2)问题修复

框架及API修复

  • 算子修复

    • 修复roi_align算子在使用 TRT 时不兼容的问题。(#38788)
    • 增加elementwise在维度相同时广播的功能。(#37908)
  • 框架功能修复

    • 修复动态图转静态图时的模型剪裁逻辑,使得包含 subblock 的算子在动态图转静态图时可以正确剪裁。(#37579)
    • 修复多线程下 CreatePredictor 接口的报错问题,当前的 CreatePredictor 接口允许在多线程中调用而不会导致推理异常。(#37894)
    • 配置config时,对于没有权重的模型,支持 params file 传空字符串。(#38579)
    • 修复Paddle-TRT engine直接输入cpu tensor没有进行gpu数据拷贝的问题。(#37427)

后端能力修复

  • TensorRT 子图引擎修复

    • 修复pool2d在某些参数组合的情况下运行TensorRT出错的问题。(#37929)
  • MKLDNN引擎修复

    • 修复 matmul_v2 的 mkldnn kernel 不支持两个输入的shape长度不同的问题。 (#38733)

其他修复

  • 修复ERNIE模型在TRT8下可能出现的hang死问题。(#37839)

2.2.2 Release Note

1. Important Updates

This version fixed some function and performance issues of PaddlePaddle 2.2.1 and optimized some functions.

2. Training Framework (distributed included)

(1)New functions

API

  • Add the paddle.nn.Mish and paddle.nn.functional.mish which support the element-by-element calculation of the mish activation function. (#38803)

Others

  • The paddle.nn.PReLU, paddle.nn.functional.prelu, and paddle.nn.static.prelu newly support the data_format parameter. You can set input data type. (#38495)
  • The paddle.index_select supports float16 data type. (#38751)
  • Optimize error message of paddle.multiplex when tensor size in inputs is 0. (#38757)
  • Add initialization parameter data_loader for paddle.fluid.contrib.slim.quantization.PostTrainingQuantization, and support input of the paddle.io.DataLoader object or Python Generator. (#38729)

(2)Bug Fixes

API

  • Fix operation error of paddle.max in input of x.ndim > 6 and axis < 0. (#38070)
  • Fix bug of paddle.max and paddle.min: Result is incorrect on the CPU device when the parameter axis is the list type and len(axis) == x.ndim and axis[i] < 0. (#38478)
  • Fix bug that paddle.nn.functional.unfold does not distinguish between compile time and runtime in InferShape calculation. (#38925) (#38834)
  • Fix bug where GPU unnecessarily synchronizes with the CPU when paddle.nn.functional.cross_entropy checks labels. (#38849
  • Fix bug of input gradient result error in backward computing when paddle.distributed.split slices the FC along columns. (#38724)
  • Fix bug where paddle.nn.Layer.to does not support paddle.dtype type. (#38108)
  • Fix bug that output tensor's shape is different between dynamic and static graphs when full_matrics=True in paddle.linalg.svd under static graphs. (#37744)
  • Fix bug of the result dimension exception when the Tensor slice index uses multiple None type indexes. (#37400)
  • Fix memory leak bug of Tensor index assignment in some scenarios. (#38098)
  • Fix bug of conv2d reporting an error with missing attributes after model is exported using save_inference_model and backward pass is added for training. (#38832)

IR(Intermediate Representation)

  • Dynamic Graph to Static Graph

    • Fix bug of inconsistency between dynamic and static behaviors of some initialization-related APIs. (#37827)
    • Fix bug where paddle will be used as a variable when dynamic to static code is transcribed. (#37999)
    • Fix bug that highlighted code comments lead to an error report when dynamic to static code is transcribed. (#38003)
    • Fix endless loop of for … zip … statement in dynamic to static graph. (#37846)
  • Model quantization

    • Fix problem of redundant nodes in model derived from quantitative training of dynamic graph. (#38122) (#38025)
    • To solve the problem that the quantitative model cannot be predicted on Paddle Lite, remove clip_extra settings of quantitative export models. (#38343)
    • Fix flatten_contiguous_range quantization settings for flatten_contiguous_range operator output configuration error in quantization. (#37741)

Others

  • Custom OP
    • Fix bug that user-define...
Read more

PaddlePaddle 2.2.1 Release Note

08 Dec 05:04
a5cf2e3
Compare
Choose a tag to compare

2.2.1 Release Note

1. 重要更新

我们很高兴的发布飞桨框架2.2.1版本,主要是对2.2.0中一些功能和性能问题的修复,并对部分功能点做了增强,重点如下:

  • 新增 paddle.linalg.triangular_solve,用于计算带有三角系数矩阵的线性方程组。
  • 新增 paddle.device.cuda.graphs.CUDAGraph API,支持NVIDIA的CUDA Graph功能,注意目前该API还处于实验阶段,尚未稳定。
  • 修复了基础API、Tensor 索引中的已知问题。

2. 训练框架(含分布式)

(1)新功能

API

  • 新增paddle.linalg.triangular_solve API,用于计算带有三角系数矩阵的线性方程组。(#36714)
  • 新增paddle.device.cuda.graphs.CUDAGraph API,支持NVIDIA的CUDA Graph功能,可以将GPU计算全部捕捉到一张CUDA Graph中,往后多次调用,可以去除框架的额外开销,提升运行性能。注意目前该API还处于实验阶段,尚未稳定。(#37109)
  • 新增paddle.incubate.graph_send_recv API,主要应用于图学习领域,目的是为了减少在消息传递过程中带来的中间变量显存或内存的损耗,包含 SUM、MEAN、MIN、MAX 共四种更新模式。(#37205)
  • 新增paddle.incubate.operators.ResNetUnit API,用于 ResNet 网络里的卷积、批归一化、shortcut/bottleneck操作融合。(#37109)

(2)功能优化

API

  • paddle.incubate.FusedTransformerEncoderLayer,添加 src_mask=None 的支持,添加pure fp16的支持。 (#37229)

IR(Intermediate Representation)

  • 动态图转静态图
    • 使用@paddle.jit.to_static装饰单独的 function 时,提供 train()、eval() 函数支持切换到 train、eval 模式。(#37383)

分布式训练

  • 异构参数服务器完善任意次切图能力,增加流水线训练功能,提升训练吞吐。(#37446)

其他

  • 针对 paddle.scatterindex 越界导致 core dump 的问题,加强了越界检查,并完善对应的报错信息。(#37431)

(3)性能优化

  • 优化 paddle.top_k,根据 k 的大小和 input_width 大小进行选择不同的实现方案,当 k>=75% input_width 时选择 cub 实现,否则选择手写 kernel 实现。(#37325)
  • 优化paddle.fluid.optimizer.LarsMomentumOptimizer,通过 optimizer 算子融合 + CUDA Cooperative Groups的方式提高OP性能。(#37109)

(4)问题修复

API

  • 修复paddle.nn.ELUpaddle.nn.functional.elu 的计算公式,解决 alpha<0 时结果错误的问题;paddle.nn.functional.elu_不支持 alpha<0 的场景,在 alpha<0 时会报错。(#37437)
  • 修复paddle.slice反向执行时出现 out_of_range 的问题。(#37584)
  • paddle.shape 没有反向,显式设置 stop_gradientTrue。(#37412)
  • paddle.arange 没有反向,显式设置 stop_gradientTrue。(#37486)
  • paddle.shard_index 在输入数据的最后一维不为1时进行报错提示。(#37421)
  • 修复 paddle.matmul 使用int8量化,反量化时维度错误的问题。(#36982)
  • 修复 paddle.nn.Dropouteval 模式下不计算梯度的问题。(#37305)
  • 修复 paddle.nn.functional.dropout 在静态图下输入 Tenor 形状中有 -1 并指定 drop 该维时报错的问题。(#37223)
  • 修复RNN类API paddle.nn.LSTM,paddle.nn.GRU, paddle.nn.SimpleRNN在CPU训练时多层RNN(dropout设置为0)反向计算出错的问题。(#37086)
  • 修复 paddle.incubate.FusedTransformerEncoderLayer 反向计算梯度错误、pre_layer_norm 处理不正确、参数处理不正确,漏传参数、 add_bias 计算错误等问题。 (#37229)
  • 修复 paddle.incubate.fused_multi_head_attention 不支持 biasNone 的问题。(#37411, #37566)
  • 修复paddle.vision.datasets.Cifar10, paddle.vision.datasets.Cifar100加载数据没有顺序的问题。 (#37528)
  • 修复一维Tensor在使用省略号(...)索引时维度检测异常报错的问题。(#37192)
  • 修复Tensor索引赋值(setitem)梯度属性无法传播的问题,详见issue。(#37028)

IR(Intermediate Representation)

  • 动态图转静态图
    • 动转静后的模型调用 paddle.flops 能够正确统计模型参数。(#36852)
    • 动转静模块能够正确转换for i in [1, 2, 3]循环语句。(#37259)

分布式训练

  • fleet.load_model: 修复参数服务器模式下模型加载API不可用问题。(#37461)
  • fleet.save_inference_model: 修复参数服务器模式下模型保存 dense 参数前,未从 server 端拉取参数的问题。(#37461)

其他

  • 修复动态图 inplace 操作的问题:对一个非叶子节点进行 inplace 操作后,立即执行 backward,该节点及更前的节点的梯度计算错误。(#37420)

3. 部署方向(Paddle Inference)

(1)问题修复

  • 在明确关闭日志的情况下,进一步去除冗余的调试日志。(#37212)
  • 修复内存/显存优化策略,避免因不当的内存/显存优化导致预测结果有误或崩溃。(#37324, #37123)
  • 修复 Transformer 模型的 MultiHead 结构中融合后 QkvToContextPluginDynamicscale 的 scale 计算错误问题,这是由于 cuda 函数的 block 和 thread 设置错误引起的。(#37096)
  • 将所有的推理OP在int8量化的功能中注册:解决因历史原因有些推理OP没有在int8量化中注册的问题。(#37266)

2.2.1 Release Note

1. Important Updates

This version fixed some function and performance issues of PaddlePaddle 2.2.0, and optimized some functions. The highlights are as follows:

  • Add paddle.linalg.triangular_solve to calculate linear equations with triangular coefficient matrices.
  • Add paddle.device.cuda.graphs.CUDAGraph API that supports the CUDA Graph function of NVIDIA. Note that this API is still experimental and not yet stable.
  • Fix known issues of basic API and Tensor index.

2. Training Framework(Distributed Included)

(1)New Functions

API

  • Add paddle.linalg.triangular_solve API to calculate linear equations with triangular coefficient matrices. (#36714)
  • Add paddle.device.cuda.graphs.CUDAGraph API that supports the CUDA Graph function of NVIDIA by capturing all GPU calculations into a single CUDA Graph and calling them for later use, which not only cuts the extra overhead but also improves the runtime performance. Note that the API is still experimental and not yet stable. (#37109)
  • Addpaddle.incubate.graph_send_recv API for graph learning to reduce the loss of intermediate variables in memory or video memory during message passing. It contains four update modes, namely, SUM, MEAN, MIN, and MAX. (#37205)
  • Add paddle.incubate.operators.ResNetUnit API to integrate the convolution, batch normalization, and shortcut/bottleneck operation in the ResNet network. (#37109)

(2)Function Optimization

API

  • paddle.incubate.FusedTransformerEncoderLayer adds src_mask=None and supports pure fp16.(#37229)

IR(Intermediate Representation)

  • Dynamic Graph to Static Graph
    • When adopting@paddle.jit.to_static to decorate single function, train()、eval() functions are provided to support the switch to train、eval mode. (#37383)

Distributed Training

  • Optimize the ability of arbitrary cutting and add pipeline training in the heterogeneous parameter server, which enhance training throughput.(#37446)

Others

  • Enhance the out-of-bounds check for the index of ``paddle.scatter` that causes core dump, and improve the corresponding error reporting message. (#37431)

(3)Performance Optimization

  • Optimize paddle.top_k by enabling it to choose different implementations according to the size of k and input_width: cub implementation when k>=75% input_width, otherwise the handwritten kernel implementation.(#37325)
  • Optimize paddle.fluid.optimizer.LarsMomentumOptimizer to improve OP performance by integrating optimizer operator and CUDA Cooperative Groups. (#37109)

(4)Bug Fixes

API

  • Fix the calculation error of paddle.nn.ELU and paddle.nn.functional.elu when alpha<0;please note the inplace version:paddle.nn.functional.elu_ will raise error when alpha<0. ([#37437]
  • (#37437))
  • Fix the problem of out_of_range when the paddle.slice is reversely executed. (#37584)
  • paddle.shape doesn't support backward, explicitly set stop_gradient to True. (#37412)
  • paddle.arange doesn't support backward, explicitly set stop_gradient to True.(#37486)
  • paddle.shard_index reports an error if the last dimension of the input data is not 1. (#37421)
  • Fix the wrong dimension of inverse quantization when paddle.matmul adopts int8 quantization. (#36982)
  • Fix the issue that paddle.nn.Dropout, under eval, does not calculate the gradient. (#37305)
  • Fix the issue that `paddl...
Read more

PaddlePaddle 2.2.0 Release Note

10 Nov 09:45
ab2004b
Compare
Choose a tag to compare

English Version

1. 重要更新

我们很高兴的发布飞桨框架2.2.0版本,本版本包含如下重要更新。

API

  • 新增100+个API,包含24个傅里叶变换API、17个线性代数计算 API 等,更好地支持科学计算类、信号处理类模型。
  • 新增多种索引类型的支持,新增的索引类型包括:省略号(…)、维度扩增(None)、布尔类型数组(Bool Mask)、整数数组((list),以及张量(Tensor) ),可以更加方便的对张量(Tensor)进行操作。
  • 新增 paddle.einsum API,可以以更加简洁的方式来表达多维张量(Tensor)的计算。
  • 动态图混合精度功能增强,新增整个任务使用半精度(float16)训练的方式,主要任务下的计算效率提升20%左右。
  • 新增FasterTokenizer文本预处理功能,可以提升BERT/ERNIE等预训练模型的推理速度,并节省94%的C++部署代码。

IR(Intermediate Representation)

  • 动态图转静态图:进一步扩充了动静转换支持的语法和场景,现在使用混合精度训练的动态图模型也可以通过 to_static 接口一键转换为静态图进行训练或推理部署;另外,对转换后训练的性能进行了优化,通过引入缓存和开启 Pass 等策略,转换后的训练性能相对动态图方式有明显提升。
  • Pass 开发:新增 Python 端对静态图IR的改写接口,针对 OP fusion 等子图替换场景可以在 python 中快速完成开发。
  • 对算子 Kernel 实现中的底层代码进行了抽象与功能封装,提供高性能的 Block 级 IO 运算和 Compute 运算(Kernel Primitive API)。使用 Kernel Primitive API 进行 Kernel 开发可以更加专注计算逻辑的实现,在保证性能的同时大幅减少代码量,同时实现了算子计算与硬件解耦。

分布式

  • 混合并行:在静态图已有 4D 混合并行的基础上,进行了流水线执行器等性能优化,千亿模型下训练算力利用达到GPU理论性能峰值的51%;动态图支持了 4D 混合并行能力,千亿模型下功能和性能与静态图持平;增加了自动补全、自动切分等基础功能,具备了基于用户标记的半自动并行能力。
  • GPU 参数服务器:千亿模型下,优化数据读取、GPU-PS 构建、SSD 性能,完善流水线等功能,使得整体性能提升一倍,内存占用减少一倍,一台 GPU 机器可替代百台 CPU 机器训练千亿模型。

推理部署

  • 推理加速:支持最新的 TensorRT 8.x,适配 Nvidia 的硬件新特性进行加速。
  • 推理易用性:增加 TensorRT 子图中的动态 Shape 配置的自动推导功能,可选从数据推导出 Shape 的范围,无需琐碎的手动配置,简化了动态 Shape 的使用。

2. 不兼容升级

  • 针对 grad 在路径(paddle.autograd,grad, paddle.grad) 公开暴露的问题,推荐使用 paddle.grad,移除了 from paddle.autograd import * ,然后直接调用 grad 的方式。(#35579)
2.1 2.2
>>> import paddle
>>> from paddle.autograd import *
>>> x = paddle.ones(shape=[1], dtype='float32')
>>> x.stop_gradient = False
>>> y = x*x
>>> grad(outputs=[y], inputs=[x])
[Tensor(shape=[1], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
        [2.])]
>>> import paddle
>>> from paddle.autograd import *
>>> x = paddle.ones(shape=[1], dtype='float32')
>>> x.stop_gradient = False
>>> y = x*x
>>> grad(outputs=[y], inputs=[x])
NameError: name 'grad' is not defined
>>> paddle.grad(outputs=[y], inputs=[x]) # 改用paddle.grad API
[Tensor(shape=[1], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
       [2.])]
  • Tensor.__setitem__ 不再支持非 int 类型的 slice 索引( x[start:stop:step] = value )。由于 float类型在作为索引时不具有数学意义( 如 start 为 0.5 时如何确定具体索引的位置)且容易导致一些未知行为,所以本次更新中我们把 slice 索引的数据类型限定为 int,使用 float 的 slice 索引将报错。(#35701)
2.1 2.2
>>> import paddle
>>> x = paddle.to_tensor([1, 2, 3, 4])
>>> start = paddle.zeros([1])
>>> stop = paddle.zeros([1]) + 2
>>> step = paddle.ones([1])
>>> x[start:stop:step] = 0 # start,stop,step 支持float类型Tensor
>>> x 
>>> import paddle
>>> x = paddle.to_tensor([1, 2, 3, 4])
>>> start = paddle.zeros([1])
>>> stop = paddle.zeros([1]) + 2
>>> step = paddle.ones([1])
>>> x[start:stop:step] = 0
ValueError: (InvalidArgument) Currently, the type of tensor in slice indices only allows int32 and int64, please check the type of index tensor.

>>> # 须改为如下代码:
>>> start = paddle.zeros([1], dtype='int32')
>>> stop = paddle.zeros([1], dtype='int32') + 2
>>> step = paddle.ones([1], dtype='int32')
>>> x[start:stop:step] = 0 # start,stop,step 必须为integer类型Tensor
>>> x
Tensor(shape=[4], dtype=int64, place=CUDAPlace(0), stop_gradient=True,
       [0, 0, 3, 4])
  • 为动态图Tensor.__setitem__ 中加入 inplace 调用合法性检测,不满足检测的赋值代码会报错(检测逻辑:当 Tensor 为叶节点并且stop_gradientFalse 时,Tensor 赋值操作将被拦截并报错)。由于 tensor[index]=value的执行会覆盖 Tensor 中原来的值,是 Tensor 的 inplace 操作,如果 Tensor 是计算图中的一个叶节点并且需要计算梯度时,进行 Tensor 的赋值操作会使该 Tensor 反向梯度的计算出现问题,属于非法的 inplace 操作。所以本次更新加入了对这种操作的检测与拦截,当前使用 tensor[index]=value 方式赋值的代码都会检测是否满足 inplace 操作的要求,不满足将会报错。 (#35701)
    • 示例:使用weight[index]=value方式的参数初始化代码调整,self.weight属于叶节点且需要计算梯度,不能使用inplace操作(会影响反向梯度值计算),但初始化赋值本身不需要反向计算过程,所以在明确不需要反向计算时,可以使用no_grad关闭梯度计算后再进行赋值。
2.1 2.2
>>> import paddle
>>> class MyLayer(paddle.nn.Layer):
...     def __init__(self):
...         super(MyLayer, self).__init__()
...         self.weight = self.create_parameter(...)
...         self.weight[index] = 1.0
...
>>> import paddle
class MyLayer(paddle.nn.Layer):
...     def __init__(self):
...         super(MyLayer, self).__init__()
...         self.weight = self.create_parameter(...)
...         with paddle.no_grad(): # 关闭梯度计算后可进行赋值
...             self.weight[index] = 1.0
  • 针对paddle.sum 输入类型为 bool 时,输出类型也为bool,行为与numpy.sum 不一致问题,进行了不兼容升级,升级后输出类型为int64,与 numpy.sum 保持一致。(#34313)
2.1 2.2
>>> import paddle
>>> import numpy as np
>>> np_arr = np.ones((2, 3), dtype='bool')
>>> pd_arr = paddle.to_tensor(np_arr)
>>> pd_sum = pd_arr.sum(0)
>>> pd_sum.dtype
paddle.bool
>>> import paddle
>>> import numpy as np
>>> np_arr = np.ones((2, 3), dtype='bool')
>>> pd_arr = paddle.to_tensor(np_arr)
>>> pd_sum = pd_arr.sum(0)
>>> pd_sum.dtype
paddle.int64
  • 针对paddle.to_tensor在输入 dataTensor 时不拷贝 Tensor 导致 stop_gradient 属性可能被错误修改的问题,优化了该情况下的 Tensor 拷贝行为。原实现中,当 dataTensordtypeplace 不改变时,会直接返回 data(即不发生拷贝)并修改 data.stop_gradient 属性。该行为会导致原来的计算图 data 的反向传播出现问题。新实现中,上述情况下,paddle.to_tensor 会拷贝一个新的 Tensor 且返回,不会修改原 datastop_gradient 属性。(#33335)
2.1 2.2
>>> import paddle
>>> x = paddle.rand([2,3])
>>> x.stop_gradient = False
>>> y = paddle.to_tensor(x)
>>> print(id(x) == id(y)) # True
>>> print(x.stop_gradient, y.stop_gradient) # True True
>>> import paddle
>>> x = paddle.rand([2,3])
>>> x.stop_gradient = False
>>> y = paddle.to_tensor(x)
>>> print(id(x) == id(y)) # False
>>> print(x.stop_gradient, y.stop_gradient) # False True

3. 训练框架(含分布式)

(1)新功能

API

  • 新增线性代数计算APIpaddle.linalg.*

  • 新增 paddle.linalg.svd,支持对多维 Tensor 进行奇异值分解。(#34953)

    • 新增 paddle.linalg.cond,支持根据范数种类 p 计算一个或一批矩阵的条件数。(#35140)
    • 新增 paddle.linalg.matrix_rank,支持计算多维矩阵 Tensor的秩。 (#34823)
    • 新增 paddle.linalg.eigvals,支持计算一般方阵的特征值。 (#35720, #35909)
    • 新增 paddle.linalg.eigh,支持计算复数厄米特矩阵或者实数对称矩阵的特征值和特征向量。(#34990, #35916, #35812, #36091,#35919)
    • 新增 paddle.linalg.det, 支持计算多维矩阵的行列式值。(#34992)
    • 新增 paddle.linalg.slogdet,支持计算多维矩阵行列式值的符号值与自然对数值。(#34992)
    • 新增 paddle.linalg.pinv,支持计算多维矩阵 Tensor 的伪逆矩阵。(#35804)
    • 新增 paddle.linalg.multi_dot,支持多个矩阵连乘的计算。(#35224)
    • 新增 paddle.linalg.solve,支持计算线性方程组的解。(#35715)
    • 新增paddle.linalg.matrix_power,支持矩阵的幂运算操作。(#34667)
    • 新增paddle.linalg.eigvalsh,用于计算厄米特矩阵或者实数对称矩阵的特征值。(#36680)
    • 新增paddle.linalg.eig,用于计算一般方阵的特征值和特征向量。(#35674)
    • 新增paddle.linalg.qr,用于计算矩阵的QR分解(暂不支持反向)。(#36627)
  • 新增傅里叶变换相关API (#35665)

    • 新增快速傅立叶变换系列函数

      • 可微分的 1d 到 nd 复数到复数快速傅里叶变换。(paddle.fft.fft, paddle.fft.fft2, paddle.fft.fftn, paddle.fft.ifft, paddle.fft.ifft2, paddle.fft.ifftn)
      • 可微分的 1d 到 nd 实数到复数快速傅里叶变换。(paddle.fft.rfft, paddle.fft.rfft2, paddle.fft.rfftn, paddle.fft.ihfft, paddle.fft.ihfft2, paddle.fft.ihfftn)
      • 可微分的 1d 到 nd 复数到实数快速傅里叶变换。 (paddle.fft.hfft, paddle.fft.hfft2, paddle.fft.hfftn, paddle.fft.irfft, paddle.fft.irfft2, paddle.fft.irfftn)
      • fft 相关的辅助函数。(paddle.fft.fftfreq, paddle.fft.rfftfreq, paddle.fft.fftshift, paddle.fft.ifftshift)
    • 新增短时傅里叶变换相关函数

      • 短时傅里叶变换。(paddle.signal.stft)
      • 短时傅里叶逆变换。(paddle.signal.istft)
  • 新增高层API
    - 新增 paddle.vision.ops.roi_poolpaddle.vision.ops.RoIPool,支持检测任务中 RoI 区域池化操作。 (#36154)
    - 新增 paddle.vision.ops.roi_alignpaddle.vision.ops.RoIAlign,支持检测任务中 RoI 区域 Align 操作。(#36207)
    - 新增 paddle.vision.ops.psroi_pool 和 ``paddle.vi...

Read more

PaddlePaddle 2.2.0-rc0 Release Note

21 Oct 10:49
c576169
Compare
Choose a tag to compare

English Version

1. 重要更新

我们很高兴的发布飞桨框架2.2.0-rc0版本,本版本包含如下重要更新。

API

  • 新增100+个API,包含24个傅里叶变换API、14个线性代数计算 API 等,更好地支持科学计算类、信号处理类模型。
  • 新增多种索引类型的支持,新增的索引类型包括:省略号(…)、维度扩增(None)、布尔类型数组(Bool Mask)、整数数组((list),以及张量(Tensor) ),可以更加方便的对张量(Tensor)进行操作。
  • 新增 paddle.einsum API,可以以更加简洁的方式来表达多维张量(Tensor)的计算。
  • 动态图混合精度功能增强,新增整个任务使用半精度(float16)训练的方式,主要任务下的计算效率提升20%左右。

IR(Intermediate Representation)

  • 动态图转静态图:进一步扩充了动静转换支持的语法和场景,现在使用混合精度训练的动态图模型也可以通过 to_static 接口一键转换为静态图进行训练或推理部署;另外,对转换后训练的性能进行了优化,通过引入缓存和开启 Pass 等策略,转换后的训练性能相对动态图方式有明显提升。
  • Pass 开发:新增 Python 端对静态图IR的改写接口,针对 OP fusion 等子图替换场景可以在 python 中快速完成开发。
  • 对算子 Kernel 实现中的底层代码进行了抽象与功能封装,提供高性能的 Block 级 IO 运算和 Compute 运算(Kernel Primitive API)。使用 Kernel Primitive API 进行 Kernel 开发可以更加专注计算逻辑的实现,在保证性能的同时大幅减少代码量,同时实现了算子计算与硬件解耦。

分布式

  • 混合并行:在静态图已有 4D 混合并行的基础上,进行了流水线执行器等性能优化,千亿模型下训练算力利用达到GPU理论性能峰值的51%;动态图支持了 4D 混合并行能力,千亿模型下功能和性能与静态图持平;增加了自动补全、自动切分等基础功能,具备了基于用户标记的半自动并行能力。
  • GPU 参数服务器:千亿模型下,优化数据读取、GPU-PS 构建、SSD 性能,完善流水线等功能,使得整体性能提升一倍,内存占用减少一倍,一台 GPU 机器可替代百台 CPU 机器训练千亿模型。

推理部署

  • 推理加速:支持最新的 TensorRT 8.x,适配 Nvidia 的硬件新特性进行加速。
  • 推理易用性:增加 TensorRT 子图中的动态 Shape 配置的自动推导功能,可选从数据推导出 Shape 的范围,无需琐碎的手动配置,简化了动态 Shape 的使用。

2. 不兼容升级

  • 针对 grad 在路径(paddle.autograd,grad, paddle.grad) 公开暴露的问题,推荐使用 paddle.grad,移除了 from paddle.autograd import * ,然后直接调用 grad 的方式。(#35579)
2.1 2.2
>>> import paddle
>>> from paddle.autograd import *
>>> x = paddle.ones(shape=[1], dtype='float32')
>>> x.stop_gradient = False
>>> y = x*x
>>> grad(outputs=[y], inputs=[x])
[Tensor(shape=[1], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
        [2.])]
>>> import paddle
>>> from paddle.autograd import *
>>> x = paddle.ones(shape=[1], dtype='float32')
>>> x.stop_gradient = False
>>> y = x*x
>>> grad(outputs=[y], inputs=[x])
NameError: name 'grad' is not defined
>>> paddle.grad(outputs=[y], inputs=[x]) # 改用paddle.grad API
[Tensor(shape=[1], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
       [2.])]
  • Tensor.__setitem__ 不再支持非 int 类型的 slice 索引( x[start:stop:step] = value )。由于 float类型在作为索引时不具有数学意义( 如 start 为 0.5 时如何确定具体索引的位置)且容易导致一些未知行为,所以本次更新中我们把 slice 索引的数据类型限定为 int,使用 float 的 slice 索引将报错。(#35701)
2.1 2.2
>>> import paddle
>>> x = paddle.to_tensor([1, 2, 3, 4])
>>> start = paddle.zeros([1])
>>> stop = paddle.zeros([1]) + 2
>>> step = paddle.ones([1])
>>> x[start:stop:step] = 0 # start,stop,step 支持float类型Tensor
>>> x 
>>> import paddle
>>> x = paddle.to_tensor([1, 2, 3, 4])
>>> start = paddle.zeros([1])
>>> stop = paddle.zeros([1]) + 2
>>> step = paddle.ones([1])
>>> x[start:stop:step] = 0
ValueError: (InvalidArgument) Currently, the type of tensor in slice indices only allows int32 and int64, please check the type of index tensor.

>>> # 须改为如下代码:
>>> start = paddle.zeros([1], dtype='int32')
>>> stop = paddle.zeros([1], dtype='int32') + 2
>>> step = paddle.ones([1], dtype='int32')
>>> x[start:stop:step] = 0 # start,stop,step 必须为integer类型Tensor
>>> x
Tensor(shape=[4], dtype=int64, place=CUDAPlace(0), stop_gradient=True,
       [0, 0, 3, 4])
  • 为动态图Tensor.__setitem__ 中加入 inplace 调用合法性检测,不满足检测的赋值代码会报错(检测逻辑:当 Tensor 为叶节点并且stop_gradientFalse 时,Tensor 赋值操作将被拦截并报错)。由于 tensor[index]=value的执行会覆盖 Tensor 中原来的值,是 Tensor 的 inplace 操作,如果 Tensor 是计算图中的一个叶节点并且需要计算梯度时,进行 Tensor 的赋值操作会使该 Tensor 反向梯度的计算出现问题,属于非法的 inplace 操作。所以本次更新加入了对这种操作的检测与拦截,当前使用 tensor[index]=value 方式赋值的代码都会检测是否满足 inplace 操作的要求,不满足将会报错。 (#35701)
    • 示例:使用weight[index]=value方式的参数初始化代码调整,self.weight属于叶节点且需要计算梯度,不能使用inplace操作(会影响反向梯度值计算),但初始化赋值本身不需要反向计算过程,所以在明确不需要反向计算时,可以使用no_grad关闭梯度计算后再进行赋值。
2.1 2.2
>>> import paddle
>>> class MyLayer(paddle.nn.Layer):
...     def __init__(self):
...         super(MyLayer, self).__init__()
...         self.weight = self.create_parameter(...)
...         self.weight[index] = 1.0
...
>>> import paddle
class MyLayer(paddle.nn.Layer):
...     def __init__(self):
...         super(MyLayer, self).__init__()
...         self.weight = self.create_parameter(...)
...         with paddle.no_grad(): # 关闭梯度计算后可进行赋值
...             self.weight[index] = 1.0
  • 针对paddle.sum 输入类型为 bool 时,输出类型也为bool,行为与numpy.sum 不一致问题,进行了不兼容升级,升级后输出类型为int64,与 numpy.sum 保持一致。(#34313)
2.1 2.2
>>> import paddle
>>> import numpy as np
>>> np_arr = np.ones((2, 3), dtype='bool')
>>> pd_arr = paddle.to_tensor(np_arr)
>>> pd_sum = pd_arr.sum(0)
>>> pd_sum.dtype
paddle.bool
>>> import paddle
>>> import numpy as np
>>> np_arr = np.ones((2, 3), dtype='bool')
>>> pd_arr = paddle.to_tensor(np_arr)
>>> pd_sum = pd_arr.sum(0)
>>> pd_sum.dtype
paddle.int64
  • 针对paddle.to_tensor在输入 dataTensor 时不拷贝 Tensor 导致 stop_gradient 属性可能被错误修改的问题,优化了该情况下的 Tensor 拷贝行为。原实现中,当 dataTensordtypeplace 不改变时,会直接返回 data(即不发生拷贝)并修改 data.stop_gradient 属性。该行为会导致原来的计算图 data 的反向传播出现问题。新实现中,上述情况下,paddle.to_tensor 会拷贝一个新的 Tensor 且返回,不会修改原 datastop_gradient 属性。(#33335)
2.1 2.2
>>> import paddle
>>> x = paddle.rand([2,3])
>>> x.stop_gradient = False
>>> y = paddle.to_tensor(x)
>>> print(id(x) == id(y)) # True
>>> print(x.stop_gradient, y.stop_gradient) # True True
>>> import paddle
>>> x = paddle.rand([2,3])
>>> x.stop_gradient = False
>>> y = paddle.to_tensor(x)
>>> print(id(x) == id(y)) # False
>>> print(x.stop_gradient, y.stop_gradient) # False True

3. 训练框架(含分布式)

(1)新功能

API

  • 新增线性代数计算APIpaddle.linalg.*

  • 新增 paddle.linalg.svd,支持对多维 Tensor 进行奇异值分解。(#34953)

    • 新增 paddle.linalg.cond,支持根据范数种类 p 计算一个或一批矩阵的条件数。(#35140)
    • 新增 paddle.linalg.matrix_rank,支持计算多维矩阵 Tensor的秩。 (#34823)
    • 新增 paddle.linalg.eigvals,支持计算一般方阵的特征值。 (#35720, #35909)
    • 新增 paddle.linalg.eigh,支持计算复数厄米特矩阵或者实数对称矩阵的特征值和特征向量。(#34990, #35916, #35812, #36091,#35919)
    • 新增 paddle.linalg.det, 支持计算多维矩阵的行列式值。(#34992)
    • 新增 paddle.linalg.slogdet,支持计算多维矩阵行列式值的符号值与自然对数值。(#34992)
    • 新增 paddle.linalg.pinv,支持计算多维矩阵 Tensor 的伪逆矩阵。(#35804)
    • 新增 paddle.linalg.multi_dot,支持多个矩阵连乘的计算。(#35224)
    • 新增 paddle.linalg.solve,支持计算线性方程组的解。(#35715)
    • 新增paddle.linalg.matrix_power,支持矩阵的幂运算操作。(#34667)
  • 新增傅里叶变换相关API (#35665)

    • 新增快速傅立叶变换系列函数

      • 可微分的 1d 到 nd 复数到复数快速傅里叶变换。(paddle.fft.fft, paddle.fft.fft2, paddle.fft.fftn, paddle.fft.ifft, paddle.fft.ifft2, paddle.fft.ifftn)
      • 可微分的 1d 到 nd 实数到复数快速傅里叶变换。(paddle.fft.rfft, paddle.fft.rfft2, paddle.fft.rfftn, paddle.fft.ihfft, paddle.fft.ihfft2, paddle.fft.ihfftn)
      • 可微分的 1d 到 nd 复数到实数快速傅里叶变换。 (paddle.fft.hfft, paddle.fft.hfft2, paddle.fft.hfftn, paddle.fft.irfft, paddle.fft.irfft2, paddle.fft.irfftn)
      • fft 相关的辅助函数。(paddle.fft.fftfreq, paddle.fft.rfftfreq, paddle.fft.fftshift, paddle.fft.ifftshift)
    • 新增短时傅里叶变换相关函数

      • 短时傅里叶变换。(paddle.signal.stft)
      • 短时傅里叶逆变换。(paddle.signal.istft)
  • 新增高层API
    - 新增 paddle.vision.ops.roi_poolpaddle.vision.ops.RoIPool,支持检测任务中 RoI 区域池化操作。 (#36154)
    - 新增 paddle.vision.ops.roi_alignpaddle.vision.ops.RoIAlign,支持检测任务中 RoI 区域 Align 操作。(#36207)
    - 新增 paddle.vision.ops.psroi_poolpaddle.vision.ops.PSRoIPool,支持检测任务中位置敏感的 RoI 区域池化操作。 (#36111)
    - 新增 paddle.vision.models.vgg19 预训练权重。 (#35788)
    - 新增 paddle.vision.datasets.* 中数据集 API 下载进度条。(#33302)
    - 新增 paddle.Model.predict 参数 verbose,支持是否显示日志。...

Read more

PaddlePaddle 2.1.3 Release Note

11 Oct 02:04
06d47ff
Compare
Choose a tag to compare

本版本主要是对2.1.2中的部分问题的修复,重点如下:

  • 新增 paddle.disable_signal_handler 支持关闭 Paddle 中信号捕捉机制,从而支持同时使用Paddle与TVM(#35366)。
  • 修复 paddle.flatten 在静态图使用下编译期计算维度错误的问题(#35398)。

PaddlePaddle 2.1.2 Release Note

11 Aug 08:08
e04b66f
Compare
Choose a tag to compare

2.1.2 Release Note

重要更新

本版本主要是对2.1.1中一些功能和性能问题的修复,重点如下:

  • 修复了基础API中的已知问题。
  • 修复了动转静语法转写已知的若干问题。
  • 自定义OP编译时C++版本检查由C++11升级为C++14。

训练框架

功能优化(含分布式)

基础API

  • 修复 paddle.vision 路径下部分API无法访问的问题。(#34489)
  • 修复paddle.concat在应用到多个大shape 的Tensor时溢出的问题。(#34396)
  • paddle.flip支持输入axis为整型,并提升了动态图模式下的性能。(#34477)
  • 修复paddle.slice 输入输出地址相同时越界访问问题。(#34265)
  • 修复 paddle.nn.Unfold 的输入参数顺序错误的问题。(#34251)
  • 新增了静态图下 Tensor 的若干接口,如 size()、detach()等。 (#33330)
  • Tensor.grad 的 Warning内容中增加了不兼容升级的说明。(#34262)
  • 下线 paddle.save 保存 Layer 的功能。(#34039)
  • 修复 paddle.jit.save在Mac系统上保存的模型,在Linux平台上无法对模型进行重训练的问题。(#34154)
  • 修复 layer_norm 在大 size 输入时 cuda kernel 参数错误的问题。(#33893)
  • 修复paddle.io.DataLoader误报不兼容升级warning问题。(#34001)
  • 修复paddle.io.DataLoader内存泄漏问题。(#34301)

动态图转静态图

  • 新增对 Sequential 容器类嵌套使用时的语法支持。(#34246)
  • 新增对 Python3 type hint 语法的兼容支持。(#33745)
  • @to_staticinput_spec 参数新增支持非 Tensor 类型,如 int、float、string、bool等。(#33464)
  • 修复了动转静语法转写已知的若干问题。(#33963)

自定义OP

  • 自定义OP编译时C++版本检查由C++11升级为C++14。 (#30415)

推理部署

Paddle Inference

问题修复

  • 修复batch_size > 1时ERNIE模型计算结果错误的问题。(#33784)
  • 修复windows下TensortRT推理路径用右斜杠分割导致的崩溃。(#33885)
  • 修复MKLDNN elementwise系列OP的X不支持广播的问题。(#33845

环境适配

编译安装

  • 限定了依赖的 Gast 库的版本范围。( gast>=0.3.3, <=0.4.0)(#33850)
  • 优化了Avx/No-Avx相关的安装报错信息,减少了冗余的Warning信息。(#33885)

新硬件适配

昆仑硬件训练支持

  • 修改昆仑的cmake文件,统一更新昆仑的算子库。(#34000

Important Updates

This release mainly fixes some features and performance issues in 2.1.1. See the following highlights:

  • Fix several known issues in frontend APIs.
  • Fix several known issues with dynamic to static syntax transcriptions.
  • C++ version check upgrade from C++11 to C++14 during Custom OP compile.

Training framework

Functional optimization (including distributed)

Basic API

  • Fix some APIs located in paddle.vision are not accessible issues. (#34489)
  • Fix paddle.concat overflow when applied to multiple Tensor with large shape. (#34396)
  • paddle.flip supports input axis as integer, and improves performance in dynamic graph mode. (#34477)
  • Fix paddle.slice out-of-bounds access problem when input and output addresses are the same. (#34265)
  • Fix the problem of wrong order of input parameters of paddle.nn.Unfold. (#34251)
  • Add several interfaces for Tensor under static graphs such as size(), detach(), etc. (#33330)
  • Add incompatible upgrade note to the Warning content of Tensor.grad.(#34262)
  • Downlink paddle.save to save the function of Layer. (#34039)
  • Fix paddle.jit.save for saving models on Mac systems that cannot be retrained on Linux platforms. (#34154)
  • Fix layer_norm with wrong cuda kernel parameters for large size input. (#33893)
  • Fix paddle.io.DataLoader error reporting incompatible upgrade warning issue. (#34001)
  • Fix paddle.io.DataLoader memory leak problem. (#34301)

Dynamic to static map

  • Add syntax support for nested use of Sequential container classes. (#34246)
  • Add compatibility support for Python3 type hint syntax. (#33745)
  • Add support for non-Tensor types including int, float, string, bool in the input_spec argument of @to_static. (#33464)
  • Fix a number of known problems with the transcription of dynamic to static syntax. (#33963)

Custom OP

  • C++ version check upgrade from C++11 to C++14 during Custom OP compile. (#30415)

Inference Deployment

Paddle Inference

bugfix

  • Fix wrong calculation result of ERNIE model when batch_size > 1. (#33784)
  • Fix the crash caused by splitting TensortRT inference path with right slash under windows.(#33885)
  • Fix MKLDNN elementwise series OP's X does not support broadcast .(#33845

Environment adaptation

Compile and install

  • Restrict the version range of dependent Gast libraries ( gast>=0.3.3, <=0.4.0). (#33850)
  • Optimize Avx/No-Avx related installation error messages, reduce redundant Warning messages. (#33885)

New Hardware Adaptation

Kunlun hardware training support

  • Modify the cmake file of Kunlun to unify and update its operator library.(#34000

Thanks to our Contributors

This release contains contributions from:

0x45f、Aurelius84、Chen Weihang、chentianyu03、HexToString、iducn、Jacek Czaja、Kaipeng Deng、Leo Chen、lzzyzlbb、Peihan、taixiurong、tianshuo78520a、WeiXin、wenbin、Wilber、wuhuachaocoding、xiongkun、Zhou Wei、 winter-wang .

PaddlePaddle 2.1.1 Release Note

01 Jul 08:43
1e62c23
Compare
Choose a tag to compare

2.1.1 Release Note

重要更新

本版本主要是对2.1.0中一些功能和性能问题的修复,并对部分功能点做了增强,重点如下:

  • 完成了 paddle.distributed、paddle.device、paddle.vision 目录API的可见性优化。
  • 动态图转静态图新增对 paddle.nn.Sequential容器内 sublayer 的用户代码的动静转换。
  • 动态图增加 SyncBatchNorm 对AMP的支持,提升动态图 SyncBatchNorm 层在AMP模式的性能。

训练框架

功能优化(含分布式)

基础API

  • paddle.distributed、paddle.device、paddle.vision 等层级新增推荐使用方式,推荐使用方式的具体说明请见下文2.1.0 Release Note。(#33420)
  • 新增 paddle.is_compiled_with_rocm 。(#33228)
  • 新增 paddle.strided_slice bool type输入的支持。(#33373
  • 新增 paddle.equal_all、paddle.equal、paddle.greater_equal、paddle.greater_than、paddle.less_equal、paddle.less_than、paddle.not_equal bool type输入的支持。 (#33551
  • 修复 paddle.utils.download 在ConnectionError异常时不进行Retry逻辑。(#33454
  • 修复 paddle.gather 在axis不等于0下,infershape错误的问题。(#33553
  • 修复 paddle.io.DataLoadernum_workers=0Dataset 生成GPU Tensor 送入DataLoader 时导致的段错误。(#33487, #33249
  • 修复 slice 操作结果作为左值使用inplace操作时,反向运行报错提示与错误无关的问题。(#32981
  • 修复 paddle.concat 动态图支持 uint8 出错的问题。(#33667)
  • 修复 paddle.grid_sample 显存溢出和输出结果异常的问题。(#33100#33232
  • 修复 roi_align 中align=True模式下输入为0时的问题。(#33446
  • 修复了在特定情况下 log_softmax 会把输入改为nan的问题。(#32937

动态图转静态图

  • 新增支持对 paddle.nn.Sequential容器内 sublayer 的用户代码的动静转换。(#33065
  • 修复了在控制流 for 语句转换中,在变量静态类型分析阶段未正确处理 Subscript 语法的问题。(#32969
  • 重构了动转静 param_guard 逻辑代码,全面解决动静态图 Tensor 类型互转问题。(#32985

分布式训练

  • 修复 paddle.distributed.spawn 在使用默认 nprocs 参数时出错的问题。(#33249
  • 修复流水线并行通信组创建不一致导致训练启动hang住的问题。(#32890#33473
  • 修复混合并行中保存参数失败的问题。(#33595#33588
  • 修复Fleet API无法直接运行 Program 的问题。(#33511
  • 修复异构参数服务器纯GPU训练模式中样本分桶不均导致hang住的问题。(#32957
动态图混合并行
  • 修复 TensorParallel 的精度问题。改变 TensorParallel 的参数初始化方式,保证参数切分后的随机性。(#33087
  • 修复 PipeLineParallel 的精度问题。解决 PipeLineParallelmicrobatch 使用不正确的问题。(#33097
  • 修复 new_group API创建多个通信组,会hang的问题。(#33553

混合精度训练

  • 动态图增加 SyncBatchNorm 对AMP的支持,提升动态图 SyncBatchNorm 层在AMP模式的性能,在PaddleSegDeepLabV3P模型上8卡AMP模式加速比提升19%。(#33709)

自定义OP

  • 移除了自定义OP编译时对 PADDLE_WITH_MKLDNN 宏的依赖。(#32903
  • 默认设置 GLIBCXX_USE_CXX11_ABI=1 以解决GCC版本过低导致编译时可能报错的问题。(#33185
  • 新增支持c++14的语法特性,默认开启-std=c++14编译选项。 (#33227

其他

  • 修复了多线程下 LoDTensorArray �作为Op输入时,训练会随机出段错误的问题。(#32984
  • 修复 paddle.ParamAttr 的 regularizer 和 paddle.optimizer.Momentumweight_decay 同时被指定为 L2Decay 时,参数正则化被执行2次的问题。(#32881
  • 修复windows系统下warning信息可能显示乱码问题。(#33689

推理部署

模型量化

  • 修复动态图量化训练功能中跳过OP量化的问题。(#32879
  • 修复量化模型保存时 layer_norm不保存 out_threahold 属性的问题。(#33610

Paddle Inference

功能升级

  • Paddle-TRT新增 gather_ndreduce_sum 的converter/plugin。(#33365
  • Paddle-TRT新增 reshape 。(#33372

性能优化

  • 增加TensorRT的 layer_norm 动态shape plugin,提升模型动态shape推理性能。(#33448

易用性优化

  • 新增 Paddle Inference ROCm 版的预测示例文档以及增加C++预测库的version.txt中与ROCM相关版本信息 (#33290)
  • 更新了XPU的编译选项,具体编译选项请参考 #33581

问题修复

  • 修复 fused_fc_elementwise_layernorm 在海光DCU下的线程数过大导致的计算结果错误问题。 (#33299)
  • 修复yolov3模型在Jetson Nano和Jetson TX2上开启gpu后运行失败的问题。(#33442)
  • Paddle-TensorRT plugin multihead_matmul 修复当seq_len > 1024的计算错误。(#33365
  • 修复了ERNIE 模型变长情况下,输入的顺序不一致导致输出结果不对的问题。(#33622
  • 修复OCR模型在GPU上预测报错问题。(#33431)
  • 修复 paddle.static.io.normalize_program 没有导出 paddle.static.normalize_program 的问题。(#33408
  • 修复TensorRT6.0使用stride > 1的conv失败的问题。(#33198 )
  • 修复批量推理图片时的显存访问越界错误。(#33370 )(#33531 )
  • 修复X86 CPU上MKLDNN缓存大小设置失效的问题。 (#33571
  • 修复TensorRT conv2d_transpose op converter维度错误设置问题。(#33242
  • 修复Jetson 设备上分CUDA Arch编译出的预测库结果错误的问题,本版本将发布分Arch编译的Jetson预测库,供对预测库体积有需求的用户使用。(#33269
  • 修复使用PaddleSlim量化模型从内存加载预测时,仍会因未设置校准表路径而报错的问题。(#33629
  • 修复BERT/ERNIE在非0号卡上使用TensorRT预测时报错cuda error 400的问题。(#33706
  • 修复在Linux下设置自定义编译参数时引发的cmake语法错误。(#33621
  • 优化 layer_norm 计算精度,修复大数据输入时输出Nan的问题。(#33420)
  • 修复windows下,TensorRT推理传入左斜杠做分隔符的模型路径时,opt路径错误问题。(#33885)

环境适配

新硬件适配

昆仑硬件训练支持

  • 修复 gather op,新增支持 logsumexp 。 (#32931)

2.1.1 Release Note

Important Updates

This version fixed some function and performance issues of PaddlePaddle 2.1.0, and optimized some function. The important updates are as following:

  • Optimize the API visibility of paddle.distributed、paddle.device、paddle.vision .
  • Add support for dynamic conversion of user code for sublayer in the paddle.nn.Sequential.
  • Add SyncBatchNorm support for AMP in dynamic graph, to improve the performance of dynamic graph SyncBatchNorm layer in AMP mode,

Training Framework

Functional optimization (including distributed)

Basic API

  • Optimize the API visibility of paddle.distributed、paddle.device、paddle.vision , for more information, please see 2.1.0 Release Note. (#33420)
  • Add paddle.is_compiled_with_rocm. (#33228)
  • Add the paddle.strided_slice to support bool type.(#33373
  • Add paddle.equal_all、paddle.equal、paddle.greater_equal、paddle.greater_than、paddle.less_equal、paddle.less_than、paddle.not_equal to support bool type. (#33551
  • Fix paddle.utils.download does not perform Retry when ConnectionError is abnormal.(#33454
  • Fix the issue of infershape error when paddle.gather axis is not equal to 0.(#33553
  • Fix segment fault caused by paddle.io.DataLoader when num_workers=0 and Dataset returns GPU Tensor and sends it to DataLoader .(#33487, #33249
  • Fix the issue that when use slice result as an lvalue of inplace operation, the error message of backward is not related to the error. (#32981
  • Fix the issue of paddle.concat support uint8 in dynamic graph.(#33667)
  • Fix the issue of paddle.grid_sample GPU memory overflow and abnormal output. (#33100#33232
  • Fix bug of roi_align, when the input width or height of rois is 0, the output feature should be 0 .(#33446
  • Fixed in some corner cases, input was modified to 'nan' bug of log_softmax op. (#32937

Dynamic Graphs to Static Graphs

  • Add support for dynamic conversio...
Read more

PaddlePaddle 2.1.0 Release Note

19 May 06:44
4ccd9a0
Compare
Choose a tag to compare

重要更新

飞桨框架2.1.0 版本有如下重要更新:

  • 环境适配: 增加了对Python 3.9、CUDA 11.2的支持;提供了对ROCm平台的支持(experimental);提供了对昇腾AI处理器的支持(experimental);增加了可在百度昆仑芯片上运行的模型数量;详情请见:开始使用

  • 分布式训练:在已有静态图的多维混合并行的基础上,新增动态图实现。

  • 框架功能:完成了多项功能增强和性能优化,特别的,新增了以下重要功能:

    • 自定义算子:提供了在框架外部自定义算子的新方案,简化了自定义算子写法与训练推理部署流程,详情请见:自定义外部算子
    • 新增inplace操作:新增可降低显存占用与提升性能的inplace操作,包括View策略,与12个inplace API。
    • 高层API相关:新增支持混合精度训练的高层API;新增通过paddle.hub来查看、共享、加载模型。
    • 自动混合精度训练优化: 优化了混合精度训练中slice、where、range等多个op的计算性能,提升了在MaskRCNN、ERNIE等模型上的加速效果。
    • oneDNN下BF16训练:新增支持了AMP(AutoMixedPrecision) pure_BF16模式; 新增支持了BF16类型的SGD和initializers初始值设定并减小了内存;新增支持了大部分word2vec BF16训练需要的前向和反向op。

飞桨的官方模型库和套件的最新更新请参见:Paddle projects notes along with PaddlePaddle2.1

不兼容升级

  • 飞桨框架2.1放弃了对python2和python3.5的支持,建议您升级python到3.8版本来使用飞桨。飞桨框架2.1不再提供支持CUDA9的预编译包,建议您升级CUDA版本来使用飞桨。
  • 对API可见性的优化,会导致无法使用from deeply_nested_namespace import *的方式导入被认为是实现细节的位于最底层的命名空间中的私有API。建议您通过查看飞桨官网的API文档说明来使用飞桨。具体的,以下行为在飞桨框架2.1版本中不再被允许。
# will import nothing from the deeply nested namespaces
from paddle.nn.layer.loss import *
from paddle.nn.layer.conv import *
  • Tensor.grad不兼容升级,返回值的类型由numpy变为Tensor。(#32142)
2.0 2.1
>>> import paddle
>>> x = paddle.to_tensor(5., stop_gradient=False)
>>> y = paddle.pow(x, 4.0)
>>> y.backward()
>>> type(x.grad)
< classnumpy.ndarray>
>>> import paddle
>>> x = paddle.to_tensor(5., stop_gradient=False)
>>> y = paddle.pow(x, 4.0)
>>> y.backward()
>>> type(x.grad)
< classpaddle.Tensor>
  • paddle.jit.TraceLayer.save_inference_model 接口不兼容升级。将原先的第一个参数dirname改为path,名字表意更通用并且与paddle.save和load等接口统一,表示由用户指定保存模型路径的前缀。(#31989)
2.0 2.1
>>> import os
>>> import paddle
>>> from paddle.vision.models import resnet18

>>> model = resnet18()
>>> x = paddle.rand([1, 3, 224, 224])
>>> _, static_layer = paddle.jit.TracedLayer.trace(model, inputs=[x])
>>> save_path = './save_infer_model'
>>> static_layer.save_inference_model(dirname=save_path)

>>> print(os.path.isdir(save_path))
>>> print(len(os.listdir(save_path)))
True
103
>>> import os
>>> import paddle
>>> from paddle.vision.models import resnet18

>>> model = resnet18()
>>> x = paddle.rand([1, 3, 224, 224])
>>> _, static_layer = paddle.jit.TracedLayer.trace(model, inputs=[x])
>>> save_path = 'save_infer_model'
>>> static_layer.save_inference_model(path=save_path)

>>> print(os.path.isdir(save_path))
>>> print([name for name in os.listdir('./') if name.startswith(save_path)])
False
['save_infer_model.pdmodel', 'save_infer_model.pdiparams']
  • paddle.io.DataLoaderDataset只包含一个字段时,DataLoader返回格式不兼容升级。当用户自定义数据集只包含一个字段并通过如return imageyield image返回数据时,2.0版本返回的数据格式是[image_tensor],而2.1版本返回的数据格式为image_tensor,保持输入输出数据结构的一致性。
2.0 2.1
>>> import numpy as np
>>> import paddle
>>> from paddle.io import DataLoader, Dataset
>>> 
>>> class RandomDataset(Dataset):
>>>     def __getitem__(self, idx):
>>>         return np.random.random((2, 3)).astype('float32')
>>> 
>>>     def __len__(self):
>>>         return 10
>>> 
>>> dataset = RandomDataset()
>>> loader = DataLoader(dataset, batch_size=1)
>>> data = next(loader())
>>> print(data)
[Tensor(shape=[1, 2, 3], dtype=float32, place=CUDAPinnedPlace, stop_gradient=True,
       [[[0.73782003, 0.62605530, 0.32727283],
         [0.37154925, 0.63570684, 0.53859973]]])]
>>> import numpy as np
>>> import paddle
>>> from paddle.io import DataLoader, Dataset
>>> 
>>> class RandomDataset(Dataset):
>>>     def __getitem__(self, idx):
>>>         return np.random.random((2, 3)).astype('float32')
>>> 
>>>     def __len__(self):
>>>         return 10
>>> 
>>> dataset = RandomDataset()
>>> loader = DataLoader(dataset, batch_size=1)
>>> data = next(loader())
>>> print(data)
Tensor(shape=[1, 2, 3], dtype=float32, place=CUDAPinnedPlace, stop_gradient=True,
       [[[0.73782003, 0.62605530, 0.32727283],
         [0.37154925, 0.63570684, 0.53859973]]])

训练框架

功能优化(含分布式)

基础API

  • 新增paddle.dtype 以及 paddle.float32 等数据类型,作为 paddle 内的数据类型。 (#32012)
  • 新增paddle.nn.functional.glu。 (#32096)
  • 新增paddle.nn.utils.spectral_norm#32633
  • 新增paddle.Tensor.register_hook API,用于在动态图场景中为前向Tensor对应的梯度Tensor注册hook函数。(#31775)
  • 新增Tensor.__array__函数,支持numpy.array(Tensor)numpy.asarray(Tensor)paddle.Tensor类型转换成numpy.ndarray类型 。(#32300)
  • 新增Tensor API:Tensor.item(*args),可将Tensor中指定位置的元素转化为Python的scalar值并返回。(#32634)
  • 新增paddle.nn.LayerList对负数索引的支持。(#31750)
  • 新增12个动态图inplace API:clip_scale_add_subtract_ceil_floor_exp_reciprocal_round_sqrt_rsqrt_flatten_。这些inplace API不能通过paddle.api_的形式调用,应该使用Tensor.api_来调用。(#32699)
  • 新增paddle.autograd.backward API, 用于自定义起始梯度。(#31540)
  • 新增paddle.nn.LayerDict 类。(#31951)
  • 新增layer.to API。(#32040)
  • 新增paddle.autograd.PyLayerAPI,用于支持动态图在Python端自定义反向计算。(#32130)
  • 新增支持paddle.optimizer在动态图中指定非参数的Tensor作为parameters进行优化。#32362)
  • paddle.static.nn添加了若干 sequence* 系列功能,在 paddle.nn.functional 添加了sequence_mask。 (#32089)
  • paddle.nn.CTCLoss中添加norm_by_times参数。(#32490)
  • paddle.fill_constant 支持 uint8_t。(#31911)
  • paddle.clip支持int32int64。(#32373)
  • 支持paddle.nn.functional.interpolate 在 Nearest neighbor 模式下,输入数据类型为int。(#32270)
  • API中所有支持传入list或tuple的参数,全部升级为支持传入list和tuple。(#32344, #32528 #32360)
  • 优化softmax算子性能。(#31821)
  • 优化paddle.norm文档说明,澄清paddle.normnumpy.linalg.normAPI 存在功能差异。(#32530)
  • 优化Tensor 的数据类型(datatype)的打印形式,例如,float32类型的Tensor的dtypeVarType.FP32变为 paddle.float32。(#30682)
  • oneDNN功能优化:
    • 升级 oneDNN 至 v2.2.1。(#31067 [#31473])(#31473), #30295 32227)
    • 增加了更加准确的,基于数据类型的 oneDNN kernel 选择策略。(#29840)
    • 融合oneDNN layer_norm子图为完整的单个layer_norm op。(#32162, #30891, #30962)
    • 减少oneDNN elementwise_mul创建中不必要的内存分配。(#30203)
    • 改进了缓存每个线程使用的内存消耗。(#30358)
    • 增加了LSTM oneDNN fp32 and int8 kernel支持。(#30719 #31894)
    • 增加了 OneDNN hardswish 支持。(#30211)
    • 增加了 bilinear_interp_v2nearest_interp_v2 的oneDNN支持。(#32312)
  • 升级 Xbyak 数学库 至 v5.81。(#30809)
  • 修复paddle.io.DataLoader支持数据集包含list,dict和string等嵌套的复杂数据格式,修复迭代中途程序退出偶现的报错、资源未释放等问题。(#31481)
  • 修复 paddle 中修改 logging 库的 root logger 导致的问题。(#32706)
  • 修复L1Decay动态图模式下backward报错的问题。(32718)
  • 修复paddle.nn.functional.cross_entropy中设置ignore_indexreduction='mean'下出Nan的问题。(#32545)
  • 修复bool tensor和float tensor相加输出的类型为bool的问题。(#32272)
  • 修复比较类API在broadcast的计算错误。(#32470)
    ...
Read more

PaddlePaddle 2.0.2

16 Apr 06:47
5c7ad3b
Compare
Choose a tag to compare

2.0.2 Release Note

重要更新

本版本主要是对2.0.1中一些功能和性能问题的修复,并对部分功能点做了增强,重点如下:

  • paddle.nn.functional.cross_entropy 新增了 use_softmax 参数,控制是否在计算交叉熵前先进行softmax运算;并给paddle.nn.functional.softmax_with_cross_entropy 添加了 deprecated 标志,该API将在未来的版本中废弃。
  • 修复了分布式训练中参数服务器模式下的多个问题。
  • 升级Paddle的oneDNN版本至2.2版本,提升了多个模型的预测性能。

训练框架

功能优化

API

  • 新增 paddle.io.random_splitpaddle.io.Subset。(#32090)

问题修复

API

  • 修复 paddle.nn.MaxPool3Dpaddle.nn.AvgPool3Dstridepadding 没有默认值的问题。(#32014)
  • 修复支持cudnn的 RNN 创建参数时报告重复创建的问题。(#31916)
  • 修复 paddle.nn.functional.cross_entropysoft_label 为 True,并指定 weight 参数时报错的问题;新增参数 use_softmax,用于控制是否在计算交叉熵前先进行softmax运算;同时,给 paddle.nn.functional.softmax_with_cross_entropy 添加 deprecated 说明,该API将会在未来的版本中废弃。(#31953#32105#32035)
  • 修复paddle.nn.ClipByNorm在梯度全部为零时产生NaN数值的问题,该问题会导致使用混合精度训练时不收敛。(#32038)
  • 修复 paddle.stack 内存越界访问的问题。(#32005)

分布式

  • 修复参数服务器模式下计算图切分支持GradClip策略的问题。(#31945)
  • 修复参数服务器模式下截断高斯分布初始化的问题。(#31945)
  • 修复参数服务器模式下Profiler多线程信息打印不准确的问题。(#31945)
  • 修复在Python3环境下使用Dataset读取数据时,使用zip输出数据时的兼容性问题。(#31945)
  • 清理多余日志信息, 优化exe.train_from_dataset输出格式。(#32009)

推理部署

Paddle Inference

功能升级

  • Paddle-TRT适配由Paddle 2.0 训练保存的ERNIE/BERT模型。(#31959)

性能优化

  • 升级Paddle的oneDNN版本到oneDNN 2.2,多个模型预测性能有提升。(#31270)
    • Upgrade onednn to onednn 2.2 which improved many models inference performance. (#31270)
  • 添加hard_swish oneDNN算子支持,增加 conv + hard_swish 算子融合, 使得ocr_det模型性能在SkyLake上提升18%。(#31870)
    • Add hard_swish oneDNN support and conv + hard_swish fusion, which improved ocr_det model inference performance by 18%. (#31870)

问题修复

  • 修复rnn模型动态图转静态图导出保存后,运行时崩溃问题。(#31846)
  • 修复了开启oneDNN预测连续多个图像时报错的问题。(#31837)
    • Fix continuous images inference failure when oneDNN is ON. (#31837)
  • 修复了部署在CPU上的部分oneDNN int8 模型与原量化模型存在精度差的问题。(#31810)
    • Fix the accuracy difference between fake quantized models and deployed oneDNN int8 models. (#31810)
  • 去除了SkipLayerNorm融合的多余限制条件。 (#32082#32119)

Important Updates

This version fixed some function and performance issues of PaddlePaddle 2.0.1, and optimized some function. The important updates are as following:

  • Add the use_softmax parameter to paddle.nn.functional.cross_entropy, which controls whether to perform softmax operation before calculating the cross entropy; add the deprecated mark to paddle.nn.functional.softmax_with_cross_entropy, for this API will be deprecated in the future version.
  • Fix multiple issues of distributed training in parameter server mode。
  • Upgrade Paddle's oneDNN version to 2.2, which improves the inference performance of multiple models.

Training Framework

Function Optimization

API

  • Add paddle.io.random_split and paddle.io.Subset. (#32090)

Bug Fixes

API

  • Fix the issue that the stride and padding of paddle.nn.MaxPool3D and paddle.nn.AvgPool3D do not have default values. (#32014)
  • Fix the issue that when RNN supporting cudnn creates parameters, repeated creations are reported. (#31916)
  • Fix the issue that when the soft_label of paddle.nn.functional.cross_entropy is True, and the weight parameter is specified, an error will be reported; add the use_softmax parameter to paddle.nn.functional.cross_entropy, which controls whether to perform softmax operation before calculating the cross entropy; add the deprecated mark to paddle.nn.functional.softmax_with_cross_entropy, for this API will be deprecated in the future version. (#31953, #32105, #32035)
  • Fix the issue of paddle.nn.ClipByNorm generating NaN values as the gradients are all zero, which will lead to non-convergence when using mixed precision training. (#32038)
  • Fix the issue of accessing array out of bounds in paddle.stack. (#32005)

Distributed Training

  • Fix the issue that in parameter server mode the calculation graph segmentation supports GradClip strategy.(#31945)
  • Fix the initialization of truncated gaussian distribution in parameter server mode.(#31945)
  • Fix the issue of incorrectly printing the Profiler's multi-threaded information in parameter server mode.(#31945)
  • Fix the Python3 incompatibility issue when data are read by Dataset and output by zip.(#31945)
  • Clean up redundant log information and optimize the output format of exe.train_from_dataset.(#32009)

Inference Deployment

Paddle Inference

Function Upgrades

  • Paddle-TRT adapts to the ERNIE/BERT model trained and saved by PaddlePaddle 2.0.(#31959)

Performance Optimization

  • Upgrade onednn to version 2.2, which has improved many models inference performance. (#31270)
  • Add hard_swish oneDNN support and conv + hard_swish fusion, which has improved ocr_det model inference performance by 18% on SkyLake. (#31870)

Bug Fixes

  • Fix the issue that a run of the rnn model, which is saved after the dynamic graph to static graph, will crash.(#31846)
  • Fix the error of inferring continuous images when oneDNN is ON. (#31837)
  • Fix the accuracy difference between fake quantized models and deployed oneDNN int8 models. (#31810)
  • Remove the redundant constraints of SkipLayerNorm fusion. (#32082#32119)