Releases: PaddlePaddle/Paddle
PaddlePaddle 2.3.0-rc0 Release Note
我们很高兴地发布飞桨框架 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
2.2.2 Release Note
1. 重要更新
我们很高兴的发布飞桨框架2.2.2版本,主要是对2.2.1中一些功能和性能问题的修复,并对部分功能点做了增强。
2. 训练框架(含分布式)
(1)新功能
API
- 新增
paddle.nn.Mish
和paddle.nn.functional.mish
,支持逐元素计算mish激活函数。 (#38803)
其他
paddle.nn.PReLU
、paddle.nn.functional.prelu
、paddle.nn.static.prelu
新增支持data_format
参数,可以设置输入的数据类型。 (#38495)paddle.index_select
新增支持float16
数据类型。(#38751)- 优化
paddle.multiplex
当inputs
中张量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.max
、paddle.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.svd
当full_matrics=True
时,输出tensor的shape在动态图和静态图下不同的问题。(#37744) - 修复
Tensor
切片索引使用多个None
类型索引时结果维度异常的问题。(#37400) - 修复
Tensor
索引赋值在部分场景下显存泄露的问题。(#38098) - 修复模型使用
save_inference_model
导出后,添加反向 pass 做训练,conv2d
缺失属性报错的问题。 (#38832)
IR(Intermediate Representation)
-
动态图转静态图
-
模型量化
其他
-
自定义OP
-
动态图Inplace策略
-
NHWC 策略
- 修复 batchnorm_op 中,当数据类型为 FP32 ,且数据维度 dims = 2,data_layout = NHWC 时,反向 Op 内中间变量未定义问题。 (#37020)
3. 部署方向(Paddle Inference)
(1)功能优化
框架及API更新
- C API支持对c++ std::string的处理。(#38667)
后端能力增强
- GPU 及 TensorRT 子图引擎相关更新
(2)问题修复
框架及API修复
-
算子修复
-
框架功能修复
后端能力修复
-
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
andpaddle.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
, andpaddle.nn.static.prelu
newly support thedata_format
parameter. You can set input data type. (#38495) - The
paddle.index_select
supportsfloat16
data type. (#38751) - Optimize error message of
paddle.multiplex
when tensorsize
ininputs
is 0. (#38757) - Add initialization parameter
data_loader
forpaddle.fluid.contrib.slim.quantization.PostTrainingQuantization
, and support input of thepaddle.io.DataLoader
object or Python Generator. (#38729)
(2)Bug Fixes
API
- Fix operation error of
paddle.max
in input ofx.ndim > 6 and axis < 0
. (#38070) - Fix bug of
paddle.max
andpaddle.min
: Result is incorrect on the CPU device when the parameter axis is the list type andlen(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
checkslabels
. (#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 supportpaddle.dtype
type. (#38108) - Fix bug that output tensor's shape is different between dynamic and static graphs when
full_matrics=True
inpaddle.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 usingsave_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 forflatten_contiguous_range
operator output configuration error in quantization. (#37741)
Others
- Custom OP
- Fix bug that user-define...
PaddlePaddle 2.2.1 Release Note
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.scatter
的index
越界导致 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.ELU
与paddle.nn.functional.elu
的计算公式,解决 alpha<0 时结果错误的问题;paddle.nn.functional.elu_
不支持 alpha<0 的场景,在 alpha<0 时会报错。(#37437) - 修复
paddle.slice
反向执行时出现out_of_range
的问题。(#37584) paddle.shape
没有反向,显式设置stop_gradient
为True
。(#37412)paddle.arange
没有反向,显式设置stop_gradient
为True
。(#37486)paddle.shard_index
在输入数据的最后一维不为1时进行报错提示。(#37421)- 修复
paddle.matmul
使用int8量化,反量化时维度错误的问题。(#36982) - 修复
paddle.nn.Dropout
在eval
模式下不计算梯度的问题。(#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
不支持bias
为None
的问题。(#37411, #37566) - 修复
paddle.vision.datasets.Cifar10
,paddle.vision.datasets.Cifar100
加载数据没有顺序的问题。 (#37528) - 修复一维
Tensor
在使用省略号(...)索引时维度检测异常报错的问题。(#37192) - 修复
Tensor
索引赋值(setitem
)梯度属性无法传播的问题,详见issue。(#37028)
IR(Intermediate Representation)
分布式训练
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) - Add
paddle.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
addssrc_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 totrain、eval
mode. (#37383)
- When adopting
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 ofk
andinput_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
andpaddle.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 thepaddle.slice
is reversely executed. (#37584) paddle.shape
doesn't support backward, explicitly setstop_gradient
toTrue
. (#37412)paddle.arange
doesn't support backward, explicitly setstop_gradient
toTrue
.(#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
, undereval
, does not calculate the gradient. (#37305) - Fix the issue that `paddl...
PaddlePaddle 2.2.0 Release Note
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 |
---|---|
|
|
Tensor.__setitem__
不再支持非int
类型的 slice 索引(x[start:stop:step] = value
)。由于float
类型在作为索引时不具有数学意义( 如start
为 0.5 时如何确定具体索引的位置)且容易导致一些未知行为,所以本次更新中我们把 slice 索引的数据类型限定为int
,使用float
的 slice 索引将报错。(#35701)
2.1 | 2.2 |
---|---|
|
|
- 为动态图
Tensor.__setitem__
中加入 inplace 调用合法性检测,不满足检测的赋值代码会报错(检测逻辑:当Tensor
为叶节点并且stop_gradient
为False
时,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 |
---|---|
|
|
- 针对
paddle.sum
输入类型为bool
时,输出类型也为bool
,行为与numpy.sum
不一致问题,进行了不兼容升级,升级后输出类型为int64
,与numpy.sum
保持一致。(#34313)
2.1 | 2.2 |
---|---|
|
|
- 针对
paddle.to_tensor
在输入data
为Tensor
时不拷贝Tensor
导致stop_gradient
属性可能被错误修改的问题,优化了该情况下的Tensor
拷贝行为。原实现中,当data
为Tensor
且dtype
和place
不改变时,会直接返回data
(即不发生拷贝)并修改data.stop_gradient
属性。该行为会导致原来的计算图data
的反向传播出现问题。新实现中,上述情况下,paddle.to_tensor
会拷贝一个新的Tensor
且返回,不会修改原data
的stop_gradient
属性。(#33335)
2.1 | 2.2 |
---|---|
|
|
3. 训练框架(含分布式)
(1)新功能
API
-
新增线性代数计算API
paddle.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
)
- 可微分的 1d 到 nd 复数到复数快速傅里叶变换。(
-
新增短时傅里叶变换相关函数
- 短时傅里叶变换。(
paddle.signal.stft
) - 短时傅里叶逆变换。(
paddle.signal.istft
)
- 短时傅里叶变换。(
-
-
新增高层API
- 新增paddle.vision.ops.roi_pool
和paddle.vision.ops.RoIPool
,支持检测任务中 RoI 区域池化操作。 (#36154)
- 新增paddle.vision.ops.roi_align
和paddle.vision.ops.RoIAlign
,支持检测任务中 RoI 区域 Align 操作。(#36207)
- 新增paddle.vision.ops.psroi_pool
和 ``paddle.vi...
PaddlePaddle 2.2.0-rc0 Release Note
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 |
---|---|
|
|
Tensor.__setitem__
不再支持非int
类型的 slice 索引(x[start:stop:step] = value
)。由于float
类型在作为索引时不具有数学意义( 如start
为 0.5 时如何确定具体索引的位置)且容易导致一些未知行为,所以本次更新中我们把 slice 索引的数据类型限定为int
,使用float
的 slice 索引将报错。(#35701)
2.1 | 2.2 |
---|---|
|
|
- 为动态图
Tensor.__setitem__
中加入 inplace 调用合法性检测,不满足检测的赋值代码会报错(检测逻辑:当Tensor
为叶节点并且stop_gradient
为False
时,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 |
---|---|
|
|
- 针对
paddle.sum
输入类型为bool
时,输出类型也为bool
,行为与numpy.sum
不一致问题,进行了不兼容升级,升级后输出类型为int64
,与numpy.sum
保持一致。(#34313)
2.1 | 2.2 |
---|---|
|
|
- 针对
paddle.to_tensor
在输入data
为Tensor
时不拷贝Tensor
导致stop_gradient
属性可能被错误修改的问题,优化了该情况下的Tensor
拷贝行为。原实现中,当data
为Tensor
且dtype
和place
不改变时,会直接返回data
(即不发生拷贝)并修改data.stop_gradient
属性。该行为会导致原来的计算图data
的反向传播出现问题。新实现中,上述情况下,paddle.to_tensor
会拷贝一个新的Tensor
且返回,不会修改原data
的stop_gradient
属性。(#33335)
2.1 | 2.2 |
---|---|
|
|
3. 训练框架(含分布式)
(1)新功能
API
-
新增线性代数计算API
paddle.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
)
- 可微分的 1d 到 nd 复数到复数快速傅里叶变换。(
-
新增短时傅里叶变换相关函数
- 短时傅里叶变换。(
paddle.signal.stft
) - 短时傅里叶逆变换。(
paddle.signal.istft
)
- 短时傅里叶变换。(
-
-
新增高层API
- 新增paddle.vision.ops.roi_pool
和paddle.vision.ops.RoIPool
,支持检测任务中 RoI 区域池化操作。 (#36154)
- 新增paddle.vision.ops.roi_align
和paddle.vision.ops.RoIAlign
,支持检测任务中 RoI 区域 Align 操作。(#36207)
- 新增paddle.vision.ops.psroi_pool
和paddle.vision.ops.PSRoIPool
,支持检测任务中位置敏感的 RoI 区域池化操作。 (#36111)
- 新增paddle.vision.models.vgg19
预训练权重。 (#35788)
- 新增paddle.vision.datasets.*
中数据集 API 下载进度条。(#33302)
- 新增paddle.Model.predict
参数verbose
,支持是否显示日志。...
PaddlePaddle 2.1.3 Release Note
PaddlePaddle 2.1.2 Release Note
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_static
中input_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)
环境适配
编译安装
新硬件适配
昆仑硬件训练支持
- 修改昆仑的
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 largeshape
. (#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 assize(), detach()
, etc. (#33330) - Add incompatible upgrade note to the Warning content of
Tensor.grad
.(#34262) - Downlink
paddle.save
to save the function ofLayer
. (#34039) - Fix
paddle.jit.save
for saving models on Mac systems that cannot be retrained on Linux platforms. (#34154) - Fix
layer_norm
with wrongcuda kernel
parameters for largesize
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 includingint, float, string, bool
in theinput_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
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.DataLoader
在num_workers=0
且Dataset
生成GPUTensor
送入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
的精度问题。解决PipeLineParallel
的microbatch
使用不正确的问题。(#33097) - 修复
new_group
API创建多个通信组,会hang的问题。(#33553)
混合精度训练
- 动态图增加
SyncBatchNorm
对AMP的支持,提升动态图SyncBatchNorm
层在AMP模式的性能,在PaddleSeg的DeepLabV3P
模型上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.Momentum
的weight_decay
同时被指定为L2Decay
时,参数正则化被执行2次的问题。(#32881) - 修复windows系统下warning信息可能显示乱码问题。(#33689)
推理部署
模型量化
Paddle Inference
功能升级
性能优化
- 增加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 graphSyncBatchNorm
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
whennum_workers=0
andDataset
returns GPUTensor
and sends it toDataLoader
.(#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...
PaddlePaddle 2.1.0 Release Note
重要更新
飞桨框架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 |
---|---|
|
|
paddle.jit.TraceLayer.save_inference_model
接口不兼容升级。将原先的第一个参数dirname改为path,名字表意更通用并且与paddle.save和load等接口统一,表示由用户指定保存模型路径的前缀。(#31989)
2.0 | 2.1 |
---|---|
|
|
paddle.io.DataLoader
当Dataset
只包含一个字段时,DataLoader
返回格式不兼容升级。当用户自定义数据集只包含一个字段并通过如return image
或yield image
返回数据时,2.0版本返回的数据格式是[image_tensor]
,而2.1版本返回的数据格式为image_tensor
,保持输入输出数据结构的一致性。
2.0 | 2.1 |
---|---|
|
|
训练框架
功能优化(含分布式)
基础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.PyLayer
API,用于支持动态图在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
支持int32
和int64
。(#32373)- 支持
paddle.nn.functional.interpolate
在 Nearest neighbor 模式下,输入数据类型为int。(#32270) - API中所有支持传入list或tuple的参数,全部升级为支持传入list和tuple。(#32344, #32528 #32360)
- 优化
softmax
算子性能。(#31821) - 优化
paddle.norm
文档说明,澄清paddle.norm
与numpy.linalg.norm
API 存在功能差异。(#32530) - 优化Tensor 的数据类型(
datatype
)的打印形式,例如,float32
类型的Tensor的dtype
从VarType.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_v2
和nearest_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_index
和reduction='mean'
下出Nan的问题。(#32545) - 修复bool tensor和float tensor相加输出的类型为bool的问题。(#32272)
- 修复比较类API在broadcast的计算错误。(#32470)
...
PaddlePaddle 2.0.2
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_split
与paddle.io.Subset
。(#32090)
问题修复
API
- 修复
paddle.nn.MaxPool3D
和paddle.nn.AvgPool3D
的stride
和padding
没有默认值的问题。(#32014) - 修复支持cudnn的 RNN 创建参数时报告重复创建的问题。(#31916)
- 修复
paddle.nn.functional.cross_entropy
的soft_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 topaddle.nn.functional.cross_entropy
, which controls whether to perform softmax operation before calculating the cross entropy; add the deprecated mark topaddle.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
andpaddle.io.Subset
. (#32090)
Bug Fixes
API
- Fix the issue that the
stride
andpadding
ofpaddle.nn.MaxPool3D
andpaddle.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
ofpaddle.nn.functional.cross_entropy
is True, and theweight
parameter is specified, an error will be reported; add theuse_softmax
parameter topaddle.nn.functional.cross_entropy
, which controls whether to perform softmax operation before calculating the cross entropy; add the deprecated mark topaddle.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)