Releases: PaddlePaddle/Paddle
PaddlePaddle 2.4.0 Release Note
2.4.0 Release Note
1. 重要更新
-
新动态图架构正式生效:新动态图框架调大幅提升了调度性能,超90%API的调度性能提升超过50%,超50%套件模型性能提升超过5%,功能架构更加清晰,二次开发能力和体验显著增强。
-
全面提升了飞桨的动静统一能力: 动转静功能提供了更加丰富的Python语法支持,飞桨的Python语法覆盖率达到90%,对语法转写逻辑进行了重点地优化,完备地支持了控制流语法,提供了更加流畅的一键转静态图体验;借助全新升级的静态图执行器,让动转静训练具有更优的加速能力,重点模型测试显示接近静态图最佳水平;提升了动转静的可扩展性,新增支持多函数合并导出和推理,支持用户使用PHI算子库进行二次开发和灵活部署,有效支撑语音领域U2++特色模型的自定义解码。
-
新增稀疏计算类API: 新增55个稀疏API
paddle.sparse.*
,支持稀疏计算主流场景,已应用于3D点云目标检测、Sparse Transformers等任务的稀疏训练和推理部署,高稀疏度场景下相比使用DenseTensor提速105.75%,相比同类产品稀疏计算提速4.01%~58.55%;支持多种稀疏Tensor(SparseCoo 和 SparseCsr等)的计算,极致节省显存;同时保持了一致的使用体验,和稠密Tensor的API使用方式一致。 -
大规模图神经网络GPU训练引擎: 通过SSD、内存、显存的异构层次化存储技术,突破显存瓶颈,支持超大规模图的全GPU存储和训练;实现了游走、采样、训练的全GPU一体化解决方案,相比传统的分布式CPU解决方案,相同成本的情况下训练速度提升10+倍。
-
环境适配: 新增了适配CUDA11.7 版本的预编译安装包,新增了支持在Ubuntu 22.04及以上版本中运行。
前瞻性预告
- 飞桨框架将在2.5版本废弃对python 3.6的支持。
- 飞桨框架将会逐步废弃python端的
paddle.fluild
命名空间下的API,在2.5版本时,部分该命名空间下的API将会被直接删除。
2. 不兼容升级
- 取消了适配CUDA10.1 版本的预编译安装包。
- Tensor.clear_gradient(bool set_to_zero)接口不再接收kwargs传入的值,只能通过args传入set_to_zero的bool变量。
- 为了提高显存利用效率,动态图默认仅保留前向叶子结点变量的梯度如训练中网络参数的梯度,而不再支持默认保留非叶子结点的梯度。如果需要保留特定Tensor的梯度,可以在反向执行前调用Tensor.retain_grads()接口。
- paddle.autograd.PyLayer将不再支持输入是tuple的情况,如果输入希望是一组Tensor的情况请传入list of Tensor。
3. 训练框架(含分布式)
(1)新增API和增强API功能
-
新增稀疏计算类API:paddle.sparse
- 新增55个稀疏API,支持稀疏计算主流场景,已应用于3D点云目标检测、Sparse Transformers等任务的稀疏训练和推理部署,高稀疏度场景下相比使用DenseTensor提速105.75%,相比同类产品稀疏计算提速4.01%~58.55%;支持多种稀疏Tensor(SparseCoo 和 SparseCsr等)的计算,极致节省显存;同时保持了一致的使用体验,和稠密Tensor的API使用方式一致。#45849, #46694, #45086, #41857, #42935, #43475, #43668, #43966, #44022, #44346, #44432, #44451, #44743, #42013, #43520, #41434, #42130, #41276, #41857, #41356
-
新增语音领域API: paddle.audio
-
新增图学习领域API: paddle.geometric
-
新增视觉领域API
-
- 新增其他API
- 新增iinfo(#45321), count_nonzero(#44169), nanmedian(#42385), remainder_ (#45266), take(#44741), triu_indices(#45168), sgn(#44568), bucketize(#44195), nanquantile(#41343), frac(#41226), logcumsumexp(#42267), pairwise_distance(#44161), heaviside(#41872), logspace(#41261), corrcoef(#40690)
- 新增RReLU(#41823), CyclicLR(#40698), OneCycleLR(#41825), Softmax2D(#40910), SoftMarginLoss(#42364), MultiLabelSoftMarginLoss(#41183), TripletMarginLoss(#40487), TripletMarginWithDistanceLoss(#40545), CosineEmbeddingLoss和cosine_embedding_loss(#41680), PixelUnshuffle(#40728), ChannelShuffle(#40743)
-
增强API功能
- 增加BatchNorm1D的大batch_size计算功能 #43072
-
完善集合通信分布式训练API
- 完善
fleet.init
函数,增加log_level
参数,方便用户查看运行过程中的日志 #45909 - 新增
paddle.distributed.fleet.recompute_sequential paddle.distributed.fleet.recompute_hybrid
接口,方便用户使用recompute功能#45348 - 新增
paddle.distributed.fleet.layers.mpu
package,方便用户使用张量并行功能 #45803 - 新增通信API
paddle.distributed.destroy_process_group paddle.distributed.isend paddle.distributed.irecv paddle.distributed.all_to_all_single
,提升了通信的功能完备性和易用性 #43918 - 新增
paddle.distributed.stream
通信package,性能比基础版本提升5%到10% #46023 #45282 - 通信API新增多种数据类型
Char/Byte/Bool
等的支持,提升了通信的功能完备性和易用性 #45574 #45440 - 通信API异步参数从
use_calc_stream
变成sync_op
,增强了接口的语义可读性 #46493
- 完善
-
增强高层API
(2)新功能及重要功能升级
-
新动态图架构正式上线:新动态图框架调度性能大幅提升,相比原有架构大幅提升了调度性能,超90%API的调度性能提升超过50%,超50%套件模型性能提升超过5%; 新动态图架构清晰,耦合度低,基于新架构实现Hook、PyLayer等扩展模块的学习与开发成本显著降低。#37550,#37574,#37813,#37926,#39192,#37599,#37406,#37466,#37599,#40945,#39989
-
高阶自动微分机制:为了更好支持科学计算等场景,飞桨框架针对高阶自动微分能力进一步完善优化。目前,已在
paddle.incubate.autograd
目录下提供了支持前反向高阶自动微分相关试用功能及API(当前处于孵化状态,相关功能及API 签名可能会发生变化)。如果想自行实现相关模型、探索自动微分机制,请仔细阅读高阶自动微分使用方法及限制。具体的升级包括:- 静态图高阶微分机制升级,通过基础算子体系和程序变换,支持高阶前向及反向微分,并打通编译器、分布式功能。#41919, #41201
- 新增前向和反向高阶自动微分API,
paddle.incubate.autograd.forward_grad
,paddle.incubate.autograd.grad
。#43354 - 新增18个高阶自动微分算子
sin
,cos
,exp
,erf
,abs
,log
,cast
,where
,equal
,not_equal
,greater_than
,greater_equal
,elementwise_pow
square
,elementwise_max
,gelu
,reduce_mean
,size
。#46184, #46024, #45888, #45338, #44345 - 修复现有
elementwise_div
,reduce_sum
,p_norm
等算子缺陷。#46514, #46184
-
通用异构参数服务器架构:
- 参数服务器...
PaddlePaddle 2.3.2 Release Note
2.3.2 Release Note
2.3.2 版本修复了已知问题,并新增了少量功能。
训练框架(含分布式)
- 性能分析器增加对静态图和动态图的算子的输入张量的input shape的采集。(#44245、 #44384、 #44654)
- 修复部分单测在CUDA 11.7环境失败的问题。(#44785、 #44796)
- 修复量化后训练与量化感知训练时,部分 scale 命名不统一问题。(#44903)
- 修复在外部基于paddle开放的PHI C++ API,编写C++程序并且编译为可执行文件使用的场景中,因为PHI中ContextPool没有初始化而报错的问题。(#43910)
- 修复paddle编译产出的core_(no)avx.so动态库so name与实际文件名不一致,导致外部链接的时候报错找不到 libpaddle_pybind.so的问题。(#43977)
- 修复自定义算子中调用
Tensor.stream()
获取的stream与实际运行时stream不一致的问题。(#44500) - 修复在新动态图模式下执行自定义算子出现输入属性类型解析错误的问题。(#44938)
- 修复性能数据采集器因为线程局部变量被释放而丢失数据的问题。(#44384)
- 修复PACT感知量化训练中支持量化新格式的问题;增强量化新格式C++ kernel计算逻辑;支持Reduce Max算子量化。(#44876)
部署方向(Paddle Inference)
- FusedMultiTransformer 新增 normalize_before=False 功能,支持 layer_norm 计算在 attention 和 feed forward 后的 Transformer 结构。(#44931)
- 新增 NVCC_LAZY 算子按需加载选项,通过
export CUDA_MODULE_LOADING=LAZY
,即可实现算子按需加载。(#44957 #44997) - ONNX Runtime后端新增支持partial_sum、partial_concat、bilinear_interp、conv3d、pool3d、multiclass_nms convert。(#44791)
- 优化ONNX Runtime后端:支持Clone接口、支持获取输入mutable data,降低内存消耗。(#44766)
- 新增 squeeze2、unsqueeze2、cast、slice TensorRT convert 支持。(#44887、#44837、#44757)
- 修复skip layernorm fp16 kernel计算错误的问题。(#45041)
2.3.2 Release Note
V2.3.2 fixed known bugs, and added a tiny set of features.
Training Framework (distributed included)
- Profiler collects input tensors' shape for static graph and dynamic graph operators. (#44245, #44384, #44654)
- Fixed failed unit tests in CUDA 11.7. (#44785, #44796)
- Fixed scale name incosistency issue when being used in post training quantization and quantization aware training. (#44903)
- Fixed ContextPool in PHI uninitialized issue when PHI's C++ APIs are being used to compile a standalone executable. (#43910)
- Fixed the compiled output core_(no)avx.so's so name is not consistent with the actual file name issue, so libpaddle_pybind.so could be linked correctly. (#43977)
- Fixed the issue that
Tensor.stream()
is not returning the correct stream when being used in a customized operator. (#44500) - Fixed iniput attribute type parsing error when customized operator is being executed in new dynamic graph mode. (#44938)
- Fixed the issue that profiler's performence data collector is missing data caused by thread local variables not being freed correctly. (#44384)
- Fixed issue of supporting new format of PACT context aware training; Improved quatization new format C++ kernel computation logic; support Reduce Max operator quatization. (#44876)
Deployment Direction (Paddle Inference)
- FusedMultiTransformer added normalize_before=False, which supports layer_norm to compute the Transformer structure after attention and feed forward. (#44931)
- Added NVCC_LAZY operators loaded by demand option, which could be enabled by setting
export CUDA_MODULE_LOADING=LAZY
. (#44957, #44997) - ONNX Runtime backends added support for partial_sum, partial_concat, bilinear_interp, conv3d, pool3d, multiclass_nms convert. (#44791)
- Optimized ONNX Runtime backend support: support Clone interface, support getting input mutable data, reduce memory consumption. (#44766)
- Added squeeze2, unsqueeze2, cast, slice TensorRT convert. (#44887, #44837, #44757)
- Fixed skip layernorm fp16 kernel computation error. (#45041)
PaddlePaddle 2.3.1 Release Note
2.3.1 Release Note
1. 重要更新
- 2.3.1 版本是在 2.3 版本的基础上修复了已知问题,并且发布了支持 CUDA 11.6 的安装包。
2. 训练框架(含分布式)
(1)功能优化
API
- 修改
paddle.nn.initializer.KaimingUniform
和paddle.nn.initializer.KaimingNormal
两种初始化方式,使其支持多种类型的激活函数。(#43721, #43827) - 优化
paddle.io.DataLoader
的数据预读取功能,使其支持设置了prefetch_factor
设定的预读取数据的缓存数量,避免在读取大块数据时出现 IO 阻塞。(#43674 )
新动态图执行机制
- 修改新动态图 API 逻辑中 optional 类型 Tensor 的初始化方法,防止被提前析构导致数据异常。(#42561)
全新静态图执行器
- 延迟初始化执行器中的线程池,避免只执行一轮的
program
(如save、load、startup_program
等)创建线程池。(#43768)
混合精度训练
- 设置
paddle.nn.Layer
中set_state_dict
中禁用state_dict
hook。(#43407)
分布式训练
- 使
paddle.incubate.nn.functional.fused_attention
和paddle.incubate.nn.functional.fused_feedforward
支持张量模型并行。(#43505)
其他
- 调整框架算子内核打印字符串的格式,便于进行自动化拆分解析。(#42931)
- 更新模型量化 API,支持
rounding to nearest ties to even
的四舍五入方式,支持量化取值范围 [-128, 127]。(#43829) - 量化感知训练适配支持 AMP 混合精度训练。(#43689)
- 量化感知训练在启动时新增
progress bar
,便于查看量化初始化进度,统计 out_threshold 时跳过 scale op,加速初始化过程。(#43454) - 动态图量化训练支持
conv
和bn
融合,静态图离线量化支持设置skip_tensor_list
来跳过某些层不做量化。(#43301)
(2)性能优化
- 优化
paddle.incubate.nn.functional.fused_attention
和paddle.incubate.nn.functional.fused_feedforward
算子,增加add_residual
属性,用以控制最后一步是否进行加residual
操作,CAE 模型性能提升 7.7%。(#43719) - 优化
linspace
算子,将start
、stop
、num
三个输入 Tensor 初始化在 CPU 上,避免在算子中进行 GPU -> CPU 拷贝,SOLOv2 模型性能提升6%。(#43746)
(3)问题修复
API
- 修复
paddle.io.DataLoader
在return_list=True
时因多线程冲突小概率报错问题。(#43691) - 修复
paddle.nn.Layer
的参数存在None
类型参数时to
方法报 NoneType 不存在 device 属性的错误。(#43597) - 修复 cumsum op 在某些
shape
下计算结果出错的问题。 (#42500, #43777) - 修复静态图下
Tensor.__getitem__
在使用bool
索引时组网阶段输出结果维度为 0 的问题。 (#43246) - 修复
paddle.slice
和paddle.strided_slice
处理参数为负数时出现异常的问题。(#43432) - 修复 set_value op 在处理切片
step
为负数时赋值结果异常的问题。 (#43694) - 修复 C++ 端
copy
接口不能在多卡设备间拷贝的问题。(#43728) - 修改
paddle.incubate.nn.functional.fused_attention
和paddle.incubate.nn.functional.fused_feedforward
中属性命名引发的推理时的问题。(#43505) - 修复 ConditionalBlockGrad op 处理不需要
grad
的 Tensor 时异常的问题。(#43034) - 解决 C++ 的 einsum op 反向速度优化引起的显存增加问题,并将反向优化默认打开。(#43397)
- 修复单卡下
paddle.io.DataLoader
多进程数据读取在固定随机种子时数据无法固定的问题。(#43702) - 修复 softmax op 在 Tensor 元素超过 2G 时,触发 CUDNN_STATUS_NOT_SUPPORT 的错误。(#43719)
- 修复 trace op
Event
字符串在不同算子无区分,导致性能分析不便利的问题。(#42789)
其他
- 修复动转静多次 deepcopy 并保存导致的显存溢出问题。(#43141)
- 修复自定义算子中使用的 PlaceType 类型升级引入的 device id 在多卡场景中出错的问题。(#43830)
- 优化
paddle.profiler.Profiler
timeline 可视化逻辑,将在 python 脚本中自定义的事件从 C++ 折叠层显示移动至 python 折叠层显示。(#42790)
3. 部署方向(Paddle Inference)
(1)新增特性
新增功能
(2)底层优化
CPU性能优化
- EnableMkldnn 配置中移除
gpu_cpu_reshape2_matmul_fuse_pass
,修复 ResNet50 性能下降的问题。 (#43750)
GPU 性能优化
- 添加
bilinear_interp_v2
TensorRT convert 支持。 (#43618) - 添加
matmul_scale_fuse_pass
、multihead_matmul_fuse_pass_v3
到 GPU pass,并添加单测。(#43765) - 添加 GPU handle 延迟初始化支持。 (#43661)
(3)问题修复
框架及API修复
- 修复联编 Paddle-Lite XPU 时的编译报错问题。(#43178)
- 修复 ERNIE 3.0 pass误触发的问题。(#43948)
- 修复 multihead op 中 int8 量化属性读不到的问题。(#43020)
后端能力修复
- 修复 MKLDNN 中 elementwise_mul 和 matmul 两个 op 在运行量化推理过程中崩溃的问题。 (#43725)
- 修复同一模型在推理时 TensorRT 子图序列化文件反复生成的问题。(#42945, #42633)
- 修复 ONNX Runtime 后端与外部使用的 protobuf 冲突问题。(#43159, #43742)
- 修复 python 预测库 ONNX Runtime 后端在多输入情况下推理报错问题。 (#43621)
4. 环境适配
编译安装
- 完成对 CUDA 11.6 的验证和适配,并在官网发布 CUDA 11.6 的安装包。(#43935, #44005)
- 修复在 Windows 上使用 CUDA 11.6 编译时的 cub 报错问题。(#43935, #44005)
- 修复 elementwise、reduce op 编译时间较长的问题。(#43202, #42779, #43205)
新硬件适配
2.3.1 Release Note
1. Important Updates
- V2.3.1 is built on V2.3 by fixing known issues and releasing precompiled binary that supports CUDA 11.6.
2. Training Framework (distributed included)
(1) Function Optimization
API
- Modify two initialization modes of
paddle.nn.initializer.KaimingUniform
andpaddle.nn.initializer.KaimingNormal
, to support multiple types of activation functions. (#43721, #43827) - Optimize the data pre-fetching function of
paddle.io.DataLoader
, so that it can support the setting of theprefetch_factor
to set the cache size of pre-fetched data. This can avoid IO blocking when reading large blocks of data. (#43674)
New dynamic graph execution mechanism
- Modify the initialization method of optional type Tensor in the new dynamic graph API logic to prevent data exceptions caused by early destruction. (#42561)
New static graph executor
- Defer initialization of the thread pools in the executor, to avoid creating thread pools for
programs
that execute only once (e.g.,save, load, startup_program
, etc.). (#43768)
Mixed precision training
- Disabling
state_dict
hook inset_state_dict
inpaddle.nn.Layer
. (#43407)
Distributed training
- Enabling tensor parallelism in
paddle.incubate.nn.functional.fused_attention
andpaddle.incubate.nn.functional.fused_feedforward
. (#43505)
Others
- Adjust print format of the framework operator kernels to facilitate automated splitting and parsing. (#42931)
- Update the model quantization API to support the round-off in
rounding to nearest ties to even
, and support quantization in the range [-128, 127]. (#43829) - Support AMP mixed precision training in quantization-aware training. (#43689)
- Add the
progress bar
at the beginning of quantization-aware training, so that it is easy to check the progress of quantization initialization. Skip the scale op when counting out_threshold to speed up the initialization process. (#43454) - Support
conv
andbn
fusion in the dynamic graph quantization training. Support the settings of skip_tensor_list in the static graph offline quantization, to skip some layers without quantization. (#43301)
(2) Performance Optimization
- Optimize
paddle.incubate.nn.functional.fused_attention
andpaddle.incubate.nn.functional.fused_feedforward
operators. Addadd_residual
property to control whether to perform add-residual
operation in the last step. The performance of CAE model is improved by 7.7%. (#43719) - Optimize
linspace
operator. Initialize...
PaddlePaddle 2.3.0 Release Note
我们很高兴地发布飞桨框架 2.3.0 版本,本版本包含如下重要更新。
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.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
,支持是否显示日志。...