2.6.0 Release Note

1. 重要更新

  • 新一代中间表示 PIR:为了进一步提升飞桨框架的可扩展性,研制了新一代中间表示 PIR(Paddle Intermediate Representation)。实现系统性的抽象飞桨框架底层核心概念,如:Operation、Attribute 和 Type 等,为开发者提供了灵活、高效的基础组件。通过引入 Dialect 机制,可以全面、分层次地满足各模块对中间表示的需求,从而极大地提升了框架的扩展性。PIR 严格遵循 SSA(Static Single Assignment)原则,在实现了顶层结构的统一的同时,还确保了“算子顺序性”与“计算图语义”的和谐共存。此外,PIR 提供了更为简洁、低成本的 Pass 开发流程,内置了一系列丰富且功能完备的 Pass 优化策略,为大型模型的极致性能优化提供了技术支撑。

  • 动转静编译优化架构:为了进一步提升框架的模型开发性能,飞桨动转静训练能力全面升级,支持自适应的图构建能力,在 700 多个飞桨产业级模型上验证,一键动转静训练成功率达到 100%。同时,飞桨框架的神经网络编译器 CINN 整合入飞桨主 Repo,使得编译器与飞桨更加融为一体。CINN 完成了架构的梳理和扩展能力的完善,提升系统稳定性。基于 PIR 完成动转静、组合算子、执行器和编译器的紧密联动,为飞桨框架整体性能的提升提供了更大的空间。

  • 增强动态图分布式能力:大模型对框架的分布式训练性能提出了更高的需求。飞桨在通信库、图分析、分布式策略和任务启停等维度进行了全面优化,增强了飞桨动态图的分布式计算能力,为大型模型高效训练提供了支持。在性能方面,通过减少流水线 GPU 显存占用、采用 TensorFusion 技术、实现通信计算 overlap 以及减少非必要的数据同步拷贝等方式,进一步提升了训练性能。同时,通过环境变量控制 Optimizer 等方式提高了混合并行调试的灵活性。此外,通过相关 Bug 的修复,显著提升了系统的稳定性。

  • 动静统一自动并行架构:为了进一步降低大模型编程和优化难度,飞桨对动静统一的半自动并行(Auto Parallel)编程范式进行了全面的优化,简化了开发者的编程复杂度。开发者无需深入了解手动并行编程范式下的复杂概念和 API 接口,如行切分、列切分等,仅需通过少量的张量切分标注即可完成混合并行模型的构建,框架便能够自动推导出所有张量和算子的分布式切分状态,并添加合适的通信算子。同时支持一键动转静进行分布式训练,使开发者能够高效地实现任意混合并行策略,大幅简化了混合并行训练代码的开发过程。

  • 硬件适配方案(CustomDevice):大模型场景下新硬件并行训练需求增加,飞桨新增了对分布式高级策略、自定义算子和自定义融合策略的支持。升级了分布式通信库,新增了对 MP、GroupShared、PP、SP 和 MOE 等多项高级分布式策略的支持。同时,支持厂商灵活接入不同颗粒度的 Transformer 算子库并通过融合 Pass 修改计算图进行性能加速。

  • 安装和开发体验:采用模块化编译的方式优化了 CMake 代码的逻辑,提升了飞桨全量编译和增量编译的效率,提升了 RD 开发效率,同时支持了 Python3.12,CUDA12,Hopper 架构编译,并引入 Clang 等工具全面优化了代码格式。此外,将 C++单测从链接静态库的方式转变为链接动态库,减小编译体积。这些改进措施为用户提供更加流畅、高效的安装和开发体验。

2. 不兼容升级

  • 为了避免误用,去除了 0 维 Tensor 兼容态开关,实现 API 行为和业界主流习惯一致。在上一个版本中,我们已经支持 0 维 Tensor,但是考虑到尽量避免部分模型的报错,添加了兼容态开关。即在一些模型套件使用较多且没有修改完成的场景中还是默认使用只有 1 个元素的 1 维 Tensor 来替代 0 维 Tensor。这个版本去除了兼容态开关,在任何场景中都不会再使用只有 1 个元素的 1 维 Tensor 来替代 0 维 Tensor,应该支持 0 维 Tensor 的 376 个 API 的行为都完成了修正和统一,彻底完成对 0 维 Tensor 的支持。#57036, #54581, #54500

  • 为了提升 API 易用性,将 paddle.nn.functional.diag_embed 精简为 paddle.diag_embed,并支持 Tensor.diag_embed 方式使用。 #58223

  • 为了解决在静态图下 Tensor 索引写(如 tensor[0] = 10)导致的微分计算错误问题,并符合静态图的规范,本版本引入了 paddle.static.setitem API。在静态图环境中,更推荐使用此 API 来支持 tensor 的索引写操作,而非下标运算符。这一变化并不影响动态图环境,其中仍允许使用下标运算符进行索引写操作。#53682

  • 本版本中 paddle.fluid API 全面退出历史舞台。在本次更新中,我们彻底移除了所有 paddle.fluid API,并删除了 fluid 目录。同时,飞桨底层的少量公共组件已被整合至 paddle.base 目录中。使得飞桨用户无需再关注 fluid 相关概念和接口,进一步简化了飞桨 API 体系,提升可读性。#56576, #54424, #54829, #53992, #54806, #55754, #55986, #55345, #56099, #51717, #54152, #55522, #55757, #58521, #54936, #55007, #55661, #55970

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

Python API

升级 Tensor 索引机制

本版本全面优化了 Tensor 的基础索引、高级索引以及联合索引功能,以更好地符合业界标准与用户习惯。具体包括:在基础索引中增加了对 view 的支持,修正了高级索引中的一些错误行为,并实现了联合索引的读取功能。此外,我们还将索引解析下沉到 C++层面,改进了高级索引算子的性能,并移除了 bool 索引中的冗余计算。通过这些优化措施,Tensor 的基础索引、高级索引和联合索引性能得到了全面提升。#56893, #58643, #57986, #56272, #58856, #55211, #57023, #56613, #55602, #59281, #57737

升级 Inplace 机制

在之前的版本中,为了确保反向微分计算的正确性,当某个 API 的反向计算依赖于其前向输入数据时,飞桨会避免使用 Inplace 操作方式,因为这种方法可能会覆盖原始输入数据。虽然这种机制简化了实现过程,但也限制了许多 API 实现 Inplace 功能,从而影响了用户体验。 在本版本中,飞桨对 Inplace 机制进行了全面升级。实现自动检测反向计算对前向输入的依赖关系,并在需要时保存这些输入数据,从而支持更多的 Inplace 操作。这一改进不仅提升了内存使用效率,还增强了 API 的功能性。 此外,我们新增了 109 个支持 Inplace 操作的 API,包括 paddle.abs_、paddle.sin_/cos_/tan_、比较操作如 paddle.greater_than_/less_than_/equal_、逻辑操作如 paddle.logical_and_/logical_or_/logical_not_,以及 paddle.neg_和 paddle.log_等。在丰富飞桨的功能集同时,提升了用户在数值计算和深度学习任务中的效率与便捷性。#54683, #55078, #55576, #56888, #55509, #57093

其他新增 API

  • 新增 paddle.nn.functional.scaled_dot_product_attention,显著提升大模型中注意力(attention)机制的计算效率,更好地满足大规模深度学习模型对高性能计算的需求。。#55242

  • 新增了一系列科学计算相关 API,包括 paddle.cummax 和 paddle.cummin 用于累积最大值和最小值的计算,paddle.index_fill 和 paddle.masked_fill 用于按索引或掩码填充张量,paddle.linalg.pca_lowrank 用于低秩主成分分析,paddle.hypot 用于计算直角三角形的斜边长,以及 paddle.atleast_1d、paddle.atleast_2d 和 paddle.atleast_3d 用于确保张量至少有一维、二维或三维。同时,我们还提供了 paddle.select_scatter 和 paddle.diagonal_scatter 用于更灵活地选择和散列张量数据,以及 paddle.multigammaln 用于计算多伽马函数的自然对数。此外,本版本新增优化器相关 API,包括:paddle.optimizer.lr.LinearLR 和 paddle.optimizer.lr.CosineAnnealingWarmRestarts 学习率调度策略;引入了 paddle.io.SubsetRandomSampler 以支持从数据子集中进行随机采样。这些新增 API 将进一步提升飞桨在各类应用场景中的灵活性和高效性。。 #57416, #53546, #53743, #57295, #57726, #58764, #58323, #57720, #58209, #58214, #57792, #51395, #57724, #57355, #57744, #58244, #57599, #59343, #57879

新一代中间表示(PIR)

PIR(Paddle Intermediate Representation)对底层的核心概念如 Operation、Attribute 和 Type 等进行了系统性的抽象,为开发者构建了一套灵活且强大的基础组件。此外,通过引入 Dialect 这一概念,飞桨框架能够全面且分层次地管理各模块对中间表示(IR)的需求,并支持开发者根据特定需求定制化扩展 Dialect,从而显著提升了框架的扩展性和适应性。在设计上,PIR 严格遵循 SSA(Static Single Assignment)原则,统一了顶层结构,实现了“算子顺序性”与“计算图语义”的兼容表示,为复杂的计算流程提供了清晰且一致的视图。为了进一步优化大模型的性能,PIR 还提供了一套更加简洁、低成本的 Pass 开发流程,包括 DRR(Declarative Rewrite Rule)和模式重写器(Pattern Rewriter)。同时,内置了一系列丰富且功能完备的 Pass 优化策略,这些策略能够针对大模型的特点进行深度优化,从而为大模型的极致性能提供了强有力支撑。通过这些创新设计和优化手段,PIR 为飞桨框架的高效运行和持续扩展奠定了坚实基础。

新功能

功能优化

性能优化

  1. 新增 fused_attention,fused_dropout_add,fused_gemm_epilogue_pass,fused_linear_param_grad_add_pass,fused_weight_only_linear_pass,fused_softmax_mask_upper_triangle 等优化算子融合类 Pass,提升训练和推理性能。#57557,#58272,#58188,#58401,#59366,#57655,#57360,#56672,#58537,#56247,#59391,#58897,#54933

动转静能力增强

动态图到静态图的转换是深度学习框架中的一项关键技术,它允许开发者在灵活性和训练效率之间找到最佳平衡。本版本飞桨对动转静核心功能进行了全面升级,在飞桨产业级模型库的 700 多个模型中,动转静训练的成功率高达 100%。

新功能

  • 采用 Python Eval Frame 和虚拟机模拟执行技术,创新性地实现了自适应的 Graph Break 机制。这一机制特别针对控制流场景,通过引入 CallLayer 机制,充分利用飞桨动静统一的优势,支持 AST(抽象语法树)与字节码模拟的混合模式,有效捕获控制流算子,从而大幅度提高了计算图的静态化能力。在缓存优化层面,融合了公共子表达式消除等高级优化技术,显著提升了 Guard 的执行效率。这些优化措施不仅减少了冗余计算,还提高了整体系统的运行速度。为了增强系统的鲁棒性,设计了一个简洁高效的数据中间层结构。这一结构支持 SideEffects 的正确性恢复,确保了系统在复杂环境下的稳定性和可靠性。此外,广泛兼容 Python 3.8 至 3.11 的主流解释器版本,为用户提供了广泛的适用性。#57824,#55887,#58155,#56107,#57490,#58829,#57240,#57588,#58117,#59823,#56077,#58956,#57653,#59855,#59017,#58424,#58187,#57793,#59698,#59747,#59710,#59297,#58423,#56262,#58103,#58538,#58771,#59191,#57754,#59439,#59816,#59035

  • 新增对 PyLayer 功能的动转静语法转写解析,使得 PyLayer 在动态图与静态图之间的转换更加顺畅。现在,用户可以在 PyLayer 下无缝地进行动转静的训练,并轻松导出推理模型。#56108,#56531,#57066,#57633

Bug Fix

  • 修复了动转静在 is_test=True 模式部分场景下出现显存异常的问题。#58350

  • 修复了被@to_static 装饰的函数在类似 foo(x,x,y) 场景下 jit.save 模型导出的问题。#55963

  • 修复了部分 API 行为动静逻辑不统一问题,提升了动转静整图转换成功率和使用体验。#56092

漏洞修复

  • 修复了动转静语法转写模块使用 eval()存在的潜在安全漏洞问题。#60100

动态图分布式能力增强

为了满足大型模型的需求,本版本重点提升了飞桨动态图的分布式计算能力。在通信库、图分析、分布式策略和任务启停等方面进行了多方面的改进,为大型模型训练提供了全面的支持。在性能方面,我们通过减少流水并行 GPU 显存占用、采用 TensorFusion 技术、实现通信计算 overlap 以及减少非必要的数据同步拷贝等方式,进一步提升了训练性能。同时,通过环境变量控制 Optimizer 等方式提高了混合并行调试的灵活性。此外,通过修复相关 Bug,进一步提升了系统的稳定性。

新功能

  • 通信库新增 TraceHang 功能,当集群训练出现 Hang 的问题时,能够快速的定位到出现问题的节点。#59217

  • 为了提升训练效率和降低显存,动态图支持 stride 机制。#55156,#54762,#55850,#59190,#57005,#57005,#57331,#58033,#58033,#58303,#57835,#57189

  • 为了方便计算图的分析,增强 paddleviz 功能。#56837,#57626

  • 分布式 Sharding 策略(Stage1,2,3)新增 main_grad 功能,以支持更高精度的梯度累加,减少低精度累加带来的精度损失。#57972,#57934,#57473,#57537,#59611,#57960

  • Sharding Stage1 策略新增开关变量,可以控制是否对 Optimizer 进行 fusion 计算。#58790

  • Recompute 功能新增对 Tuple 输入参数的支持,增强了 Recompute 接口的调用能力。#56793

  • 增强 Launch 功能,动态图下无需指定 endpoints 也可以进行分布式训练。 #54636

功能优化

性能优化

  • 实现 PP 策略的最后一层及时释放 output,以节约显存。#54505

  • MP 策略 Tensor fusion 支持传入 params group,增强 Tensor fusion 功能;增加 allreduce 异步通信性能,通过计算和通信的 overlap 提升训练性能。#57690,#55662

  • Sharding 策略反向计算和梯度通信进行 overlap 以提升训练性能。Sharding stage1 新增 Tensor fusion 和 fuse grad clip,optimizer 等优化提高计算效率。支持 VPP 与 DP/Sharding Stage1 的 overlap,提升通信计算并行度。优化 Sharding Stage1 在 FP16 下的性能,在 check finite 阶段只对本 sharding rank 负责的梯度进行检查,降低计算开销;增加环境变量,控制是否进行 Optimize,以节约显存支持,实现使用更少的资源进行模型训练调试。#55598,#55427,#56063,#55766,#59848

  • 混合并行策略将 PP/VPP 下的 Tensor fusion 提到运行前,解决运行时 fuse 对显存额外开销的问题。通过减少非必需的同步 memcpy,以提升模型训练性能。#54403,#57215

Bug Fix

自动并行

本版本对动静统一自动并行(Auto Parallel)编程范式进行了全面的优化,简化了开发者的编程复杂度。开发者无需深入了解手动并行编程范式下的复杂概念和 API 接口,如行切分、列切分等。仅需通过少量的张量切分标注即可完成混合并行模型的构建。框架能够自动推导出所有张量和算子的分布式切分状态,并添加合适的通信算子。同时支持一键动转静进行分布式训练,使开发者能够高效轻松地实现任意混合并行策略,大幅降低了混合并行训练代码的开发成本。

完善了自动并行核心功能

增强动态图半自动并行能力

静态图半自动并行能力增强

  • 新增 Sequence Parallel 并行策略;流水线并行新增: FThenB、Interleaved 1F1B、Eager 1F1B、VPP 等调度模式,支持流水线调度的可视化,并支持上述策略与原有并行策略的混合并行;升级梯度同步机制,支持数据在任意 broadcast 维度后需要的梯度同步。#57605,#54727,#54409,#54787,#58313,#59179,#59416,#59719,#59822,#59057,#59522,#57061

  • 执行体系与 PIR 进一步适配,打通 PIR 的优化 Pass,分布式场景下支持了 fuse_linear fuse 优化,实现性能提升。#58459,#58528,#55555,#59757,#59102,#57917

  • 底层架构升级: 执行器升级支持图依赖信息复用和静态化 kernel 选择;整图切分补全机制升级,切换新切分推导规则并支持更多长尾 cases 的正确切分补全;优化了静态图分布式下对控制流的支持,适配更多场景;优化了整图编译速度、日志信息格式等提升用户体验。 #55389,#55650,#54938,#57447,#57751,#57742,#59524,#59526,#58669,#57616,#56511,#55727,#58906,#56016,#54897

  • 优化静态图显存管理,新增精细化重计算策略;优化混合精度适配,支持用户手动指定 cast 范围等场景;支持 Cross Entropy 的并行计算;支持 scaled_dot_product_attention、fuse_rope 等融合算子;执行调度优化,支持张量并行、流水线并行中通信计算间更好地 Overlap。#58421,#58533,#59498,#59498,#59187,#59188,#58172,#58628,#56185,#56696,#59497,#58304,#58977

AutoTuner

本版本实现基于 Profiling 的并行策略自动搜索和调优工具 AutoTuner,能够在给定模型和硬件资源的条件下,自动将并行策略和优化策略进行组合,并选取有效的组合配置运行实验,从而搜索出大模型训练和推理的最佳配置。此外,AutoTuner 实现了多种剪枝优化策略,包括显存建模等,能够大幅度减少搜索空间和搜索时间。#54460,#54668,#59794,#59727,#59782,#54834,#58127,#56968,#55466,#56939,#58183,#58314,#55499,#59748

算子库

不兼容升级

为了提升飞桨框架的可维护性,删除框架中部分废弃的算子(如 diag_v1, isfinite_v1, pad2d_v1 等),通过飞桨 1.x 版本训练所保存的使用到这些算子的模型将无法在飞桨新版本上进行推理。#57895,#57892,#57898,#57730,#57732,#57810,#57884,#57794,#57926,#57925,#57807,#57808

算子库功能增强

Bug 修复

CUDA

新功能

  • 新增调试类 API paddle.amp.debugging.check_check_numerics,计算并返回这个 Tensor 数值中异常值(NaN、Inf)和零元素的数量。#54301

  • 新增 fused_rope 融合算子,加速 LLaMA 类大模型训练。#54351

  • 更新 CUDNN Frontend API 版本到 v0.9.1,并新增加速 ResNet 网络的 fused_scale_bias_add_relu 融合算子。注意该功能处于实验期,默认不开启。#58367, #54949, #58504

  • 基于 Flash-Attention v2,添加 Tensor 类似 Mask 功能支持,反向算子支持确定性计算,便于调试。#57276, #56363

  • 修改稀疏 conv3d 后端实现以支持 2d 形状,避免前端 reshape 的开销。#54707

  • 新增 matmul_int8 算子。(#55228)

功能优化

  • 优化 CUDA Graph 对随机数算子的支持。#58310

  • 自动混合精度训练默认功能加强,包括:

    • 优化自动混合精度训练接口的使用体验。#58152,#55364,#57903

    • 将 fused_attention、fused_feedforward、fused_gemm_epilogue 等矩阵计算类算子加入框架默认的白名单,并统一动静态图默认黑白名单设置。#55373, #55713

    • argsort、dist、erfinv、nanmedian、poisson 算子和 lamb 优化器算子支持 FP16、BF16 低精度计算。#51662, #55105, #55287, #55824, #56056, #56184, #55641

    • 修复 elementwise_max 算子低精度实现,改成使用 FP32 类型进行数值计算,减少精度损失。#54799

    • 将 Reduce 类算子计算需要的临时结果 Tensor 改成 FP32 类型,避免将中间结果转换成低精度带来的精度损失。#55709)

  • flip、roll & roll_grad、index_put & index_put_grad 等算子 GPU 代码实现优化,在性能不下降的前提下移除不必要的 C++模板,优化算子编译耗时并减少编译生成的二进制体积。#57309, #57525

  • bernoulli 算子增加对输入概率合法性的检查。#59174

性能优化

  • 优化 BroadcastKernel 对大 Tensor 的支持,改成对大 Tensor 切片多次调用 INT32 版本实现的方式,算子性能提升 7.27x。#57313, #57996

  • 优化 Tensor 保存接口的性能,通过先将 Tensor 拷贝到 CPU 再转 numpy,避免 Tensor 不连续时自动转换成连续 Tensor 的开销。#57040

Bug Fix

  • 修复 memmory_efficient_attention 算子对 sm_90 的支持。#58070

  • 修复 softmax 算子,当 axis=-1 且长度大于 100000 的实现出现的 NaN 问题。#57851

  • 修复 set_constant 算子在一些情况下出现 GPU 访存错误问题。#59905

  • 修复 layer_norm 算子快速实现版本中出现的 GPU 存储读写竞争问题。#56435

拓展神经网络编译器 CINN 架构能力

在本次更新中,飞桨神经网络编译器 CINN 的重点在于架构的梳理和能力的全面扩展。鉴于大模型对动态 Shape 的需求日益增长,初步探索并实现了在动态 shape 下编译器的有效运行和优化策略。 在架构层面,引入了 Python DSL,这一举措显著提升了 CINN 的开发便捷性和 Debug 能力,使得开发者能够更高效地编写和调试代码。同时,对 Schedule 的逻辑进行了重构,以 GroupSchedule 为主导,从而在算子 Group 层面实现更加通用且稳定的优化策略。为了增强 CINN 的稳定性,探索并引入了强约束组件,这一组件能够有效减少系统中的不确定性和潜在错误。此外,对 CINN 的历史工具类和软件结构进行了系统性的整理、优化和改进,进一步提升了代码的可读性和可维护性。在与飞桨其他组件的整合方面,进一步加强了 CINN 与 PIR、Paddle 的紧密结合,使得编译器与飞桨整体框架更加协调一致。这一改进不仅提升了编译器的性能,还为开发者提供了更加流畅和统一的开发体验。

兼容性升级

  • 更新存储读取接口至兼容 Paddle 2.0。 #55836

  • 更新 relu6 Op Mapper 的兼容性。 #55611

改造废弃

  • 删除旧的 Schedule 形式。 #55566,#55391

  • 删除一些过时测试。 #56245,#57987

  • 删除不再适用的 remove_nested_block Visitor 工具。 #56972

  • 删除其他无用代码。 #55413

新功能

功能优化

性能优化

  • 对 vit attention 进行融合。 #54139

  • 优化 block reduce。 #58196

文档

  • 增加 README 文件。 #58349

4. 部署方向(Paddle Inference)

通用推理优化

本版本升级提升了推理引擎在 GPU 和 CPU 上性能和易用性,降低了用户使用成本和线上推理的应用成本。在 GPU 上支持了高性能的多线程异步执行器,各模型推理性能提升 5%~10%;同时支持新版本 TensorRT 和 BF16 推理能力,TensorRT 推理性能和易用性进一步提升;在 CPU 上,支持最新版本的 OneDNN 高性能推理,在 SwinTransformer、FastRCNN 等系列模型上性能大幅提升。

大模型推理优化

实现了生成式大模型的细粒度融合推理优化,该优化方案既保证了高性能的推理能力,又具备良好的可拓展性。用户可以根据需要,灵活运用各种细粒度融合算子和飞桨原生算子,自由组合构建生成式大模型的网络结构,从而实现高效且低成本的推理。此外,我们的方案还支持主流的生成式大模型结构,显著降低了这类模型的推理部署成本,为生成式大模型的高效、低成本落地提供了有力支持。

Paddle-TensorRT 推理优化

改造废弃

  • OneDNN 中删除 fc_elementwise_add 融合。#55504

  • 删除 redunant op。 #54442

Bug Fix

5. 硬件适配

硬件适配方案 (Custom Device)

在本次更新中,新增了对分布式高级策略、自定义算子和自定义融合策略的支持。通过升级分布式通信库,新增了对 MP、GroupShared、PP、SP 和 MOE 等多项高级分布式策略的支持。同时支持厂商灵活接入不同颗粒度的 Transformer 算子库并通过融合 Pass 修改计算图进行性能加速。

新功能

  • CustomDevice 升级对 Paddle 最新分布式通信库 CommContext 的支持,并新增了多种高级分布式策略 GroupShared 和 MOE 等策略。#56301,#54671,#57957,#56669,#54384,#54572,#54573,#54676

  • 新增 CustomDevice 对 CustomOP 的支持,并可注册 Paddle PHI 算子库中尚未定义的算子,同时新增 CustomDevice 通过 CAPI 支持 CustomOP。#57038,#55532,#56755,#55532,#55533,#55659

  • 新增 CustomDevice 对 CustomPass 功能的功能,支持通过 Python API 修改计算图 IR。#55511,#55728

  • 新增 CustomDevice 对 Paddle run_check 健康功能检查的支持。#56318

  • 新增 CustomDevice 对 StreamSafeAllocator 的支持。#55393,#56380,#56536,#58035

  • 新增 CustomDevice 对 DataTransform 的支持。#56627

功能优化

  • 新增 CustomDevice,支持飞桨更多的接口,包括 Variable.set_value,adamw,share_external_data,mp_allreduce_sum,tensor.numpy,get_paddle_place, GeneratorState。#55272, #56386, #57253, #56927,#56189,#55225,#55247

  • 修改 CustomDevice 动态库加载方式,从 RTLD_NOW 改为 RTLD_LAZY,方便后续检查 Custom Device 相关软件栈版本的兼容性。 #57544

  • 新增 CustomDevice 在混合精度训练下对 FP16 算子的检测功能。#56053,#56176

Bug Fix

昆仑 XPU

新功能

  • 新增 XPTI (XPU Profiling Tool Interface) 支持运行时性能数据的采集和分析功能。#54685,#54690,#54800

  • 完成对 Paddle 最新分布式通信库 CommContext 的支持。#59418

  • 新增 XPU 融合算子包括 fast_where。#55628

  • 新增 XPU Plugin 功能支持,方便用户可通过 XTDK 编程方式开发 XPU 自定义算子。#55101,#59326

  • 新增 XPU 对 AutoGrowthAllocator 的支持。#54121

  • 新增昆仑 3 的算子支持列表。#57683

功能优化

  • 对 XPU Inference API 进行升级。#54342

  • 优化部分 XPU 算子性能和新增部分 XPU 算子对 bf16 的的支持,包括 unique/index_put,squeeze/unsqueeze kernels,swish/swish_grad,scatter_nd_add_grad/slice,rsqrt/bitwise_or/arange_tensor,where,collective 算子等。#56582,#58161,#58440,#58580,#58950,#58616,#59273

  • 优化 XPU 内存管理,避免内存泄漏。#59334,#54847

  • 支持 INT8 推理。#57258

  • 新增 FP16 系列推理算子支持。#55642,#54410

  • 支持 share_external_memory 接口传入输入输出。#55170

  • 开源量化模型 XPU 推理支持。#58568

  • 新增 context_gm_size 配置代替在 Pass 中分配 global memory。#54674

  • 新增 embedding、fast_gather_nd plugin。#56488,#56103

  • 支持 fast_layternorm + leaky_relu 融合。#57113

  • KL1 和 KL2 精度下 elementwise_min/max/floordiv/where 推理支持。#58422

  • 支持 fc 和 conv2d 算子 autotune 配置。#58801

  • 支持 conv 和 fc 动态量化。#59307

  • fc + act 融合支持 sigmoid, swish and relu6。#54486

  • elementwise_sub/elementwise_div 支持 int 数据类型。#55920

Bug Fix

海光 DCU

Bug Fix

6. 环境适配

采用模块化编译的方式优化了 CMake 代码的逻辑,提升了飞桨全量编译和增量编译的效率,提升了 RD 本地开发效率,同时支持了 Python3.12,CUDA12,Hopper 架构编译,并引入 Clang 等工具全面优化了代码格式。此外,将 C++单测从链接静态库的方式转变为链接动态库,减小编译体积。这些改进措施为用户提供更加流畅、高效地安装和开发体验。

Thanks to Our Contributors

Azure-Tang, zhaoyinglia, From00, JZ-LIANG, xysheng-baidu, SylarTiaNII, kuizhiqing, zhiqiu, FeixLiu, liuzhenhai93, GhostScreaming, pangengzheng, xiaoyewww, wanghuancoder, ForFishes, hitywt, danleifeng, tianshuo78520a, ykkk2333, houj04, lj970926, XiaociZhang, HarperCy, cqulilujia, runzhech, RuohengMa, Caozhou1995, kangguangli, heavyrain-lzy, zyfncg, SigureMo, YuanRisheng, lchdl, LiYuRio, AndSonder, Wennie396, zhangbo9674, liudongxue01, risemeup1, phlrain, winter-wang, yuanlehome, NALLEIN, Liujie0926, yuguo-Jack, gitliuyf, zh794390558, Aurelius84, 6clc, GGBond8488, xiaoguoguo626807, Wong4j, iosmers, xiaoxiaohehe001, LielinJiang, carryyu, Difers, yangxiaoyu14, xuxinyi389, cxxly, gongshaotian, jjyaoao, lijialin03, lxd-cumt, cyber-pioneer, HydrogenSulfate, MayYouBeProsperous, Charles-hit, Patrick-Star125, ScottWong98, huangjiyi, DrRyanHuang, jinyouzhi, BeingGod, Wanglongzhi2001, yangguohao, zyt1024, longranger2, 2742195759, megemini, thisjiang, kevincheng2, zhoutianzi666, Wangzheee, ming1753, tianhaodongbd, freeliuzc, zhenyun-li, MARD1NO, RichardWooSJTU, eee4017, leo0519, csy0225, wwbitejotunn, bukejiyu, jiweibo, iamsonderr, ckl117, ronny1996, zhanglirong1999, LLee233, ZHUI, wangxn12138, zhwesky2010, Courtesy-Xs, zoooo0820, llyyxx0413, Asthestarsfalll, zxcd, pkuzyc, idontkonwher, sneaxiy, hong19860320, ZibinGuo, leolishaohao, MuShangCC, zhupengyang, shentanyue, Travis-Lee, wz1qqx, frank-oops, newway, QingshuChen, zhangyk0314, HandSomeLEEw, Shixiaowei02, zhangyuqin1998, Xing-lil, zhhsplendid, jiahy0825, xinyu-intel, MarioLulab, 0x45f, Tom-Zheng, xingmingyyj, zhangbopd, gouzil, zeroRains, BiynXu, WintersMontagne10335, wuhuachaocoding, GreatV, chenwhql, deepllz, parap1uie-s, ozogxyz, FisherWY, changeyoung98, zhiboniu, YangQun1 dynamicheart, Xreki, liugddx, Lylinnnnn, YSF-A, zzjjay, YanhuiDua, lishicheng1996, USTCKAY, abenmao, cocoshe, HermitSun, ccsuzzh, sanbuphy, enkilee, RedContritio, Liyulingyue, zrr1999, chen2016013, Galaxy1458, chalsliu, mrcangye, XieYunshen, zhiheng-liu, haohongxiang, ZzSean, JamesLim-sy, yuehuayingxueluo, niuliling123, umiswing, sijunhe, littsk, SecretXV, zhurou603, zhangjun, caizejun, yangjianfengo1, vivienfanghuagood, Xinyu302, lizexu123, yghstill, Li-fAngyU, VigiZhang, co63oc, dhanush-2501, ooooo-create, PommesPeter, zeus2x7, akshatvishu, jzhang533, Sekiro-x, gumblex, BernieHuang2008, YibinLiu666, qiuwenbogdut, XavierZXY, MqLeet, zhangting2020, mingxu1067, Ainavo, SSKlearns, yuchen202, silverling, zade23, wenxiaohahaha, NKNaN, Tsaiyue, fsczz, Tomoko-hjf, rhmaaa, zbt78, Hhankyangg, wangzhen38, zhengqiwen1997, engineer1109, onepick, qili93, Rane2021, nemonameless, DesmonDay, RachelXu7, ceci3, lyuwenyu, liuruyan, LokeZhou, shiyutang, lanxianghit, feifei-111, Sahala08, sunzhongkai588, Kaedeharai, Candy2Tang, liyongchao911, whisky-12, InsaneOnion, yoyoIcy, KongAKun, linzeyang, MuhammadNizamani, eltociear, Ligoml, LUZY0726, Windfarer, FlyingQianMM, jeng1220, junelotus, zlsh80826, Vvsmile, Frida-a, TonibMw, guoshengCS, zhink, ZhangYulongg, AlbertVan, fengxin-hello, mjp9527, entired, DanGuge.

2.5.0 Release Note

1. 重要更新

  • 动静统一新架构:实现基础算子组合的动转静加编译器执行新模式,在 ResNet50&Bert 模型上完成动转静、组合算子、神经网络编译器优化加速全流程。动转静完成整图 fallback 核心功能开发,支持动转静失败时回退到动态图训练执行;组合算子设计一套包含 150 多个基础算子的基础算子体系,实现 python 层前向算子拆分机制和支持动、静态图的反向算子拆分机制,实现 70 多个常用前、反向算子的拆分;CINN 编译器修复正确性问题,开发关键 Pass,添加手工 Schedule 规则,实现内核代码自动生成,ResNet50 模型性能提升 12%,Bert 模型性能提升 10%。

  • PHI 算子库算子架构统一:将原算子体系下剩余的 350+算子内核全部统一到 PHI 算子库中,以及原算子体系中的算子定义方式也都统一为 PHI 算子库的算子定义形式(基于 YAML 配置定义算子),提升了架构统一性,降低了框架开发的理解成本;将 PHI 算子库依赖的 Fluid 头文件全部解耦,并独立编译为动态链接库,为框架的二次开发提供更轻量的算子库复用方式;继续对飞桨框架中不规范的算子以及算子内核进行规范化调整,便于开发者理解,降低了硬件的接入成本。

  • 静态图新执行器全面上线:静态图新执行器实现多项功能和性能优化,完成对原有多套旧执行器的统一和替换,成为静态图单卡和分布式训练 python 端入口以及动转静、控制流、CINN 等后端默认使用的执行引擎,大幅提升框架调度性能,功能架构更加清晰,二次开发能力显著增强。

  • Python API 支持 0 维 tensor:为形状为[1,] 及形状为 [] 的张量定义了清晰的语义。

  • 新的环境适配:适配了 CUDA 12,并支持使用 gcc12 进行编译。

2. 不兼容升级

  • 飞桨 API 支持 0 维 tensor。飞桨之前用 shape 为[1]的 1 维 tensor 来替代 0 维 tensor,这种替代方式和当前主流习惯有差异,增加模型的开发调试成本,有时还会导致非预期错误。本版本对需支持 0 维 tensor 的 376 个 API 进行了修正,和社区广泛使用的工具如 EinOps 等实现。例如,在之前的情况下,模型训练中输出的 loss 为 1 维 tensor,如果要取出或打印 loss,往往需要使用 loss.numpy()[0] 这样的代码。经过本次修改后,模型训练中输出的 loss 为 0 维 tensor,使用 loss.numpy() 即可取出或打印 loss,代码简短、易懂且符合业界使用习惯。

  • paddle.fluid API 全面退场。按照上个版本已预告的计划,本次退场了 1116 个paddle.fluidAPI 及相关内部接口,剩余少量相关内部接口会在下个版本全部清理完成。fluid API 属于飞桨 2.0 本计划移除但考虑到兼容性等因素延缓清理的历史 API,本次退场清理不会影响基于飞桨 2.0 开发的程序,飞桨 API 体系也会更加简洁易懂。

  • 旧版动态图 Python 端代码完成清理。至此,Python 端仅使用新版动态图调用 C++核心逻辑。

  • 为统一静态图模型数据并行的训练方式,废弃原有的单进程多卡训练方式,包括 paddle.static.ParallelExecutorpaddle.static.CompiledProgram().with_data_parallel() 两个接口,原因是这套接口只支持单机多卡,不支持多机多卡,且底层执行性能较差。推荐统一使用多进程多卡训练方式,即 paddle.distributed.launch 接口来进行数据并行的分布式训练。该升级只影响静态图,不影响动态图和动转静训练,如果使用了废弃接口,请参考 数据并行 的文档修改模型代码。#50351#50501#51240#51701#51616#51369#52671

  • 移除框架中原有的昇腾 NPU 和寒武纪 MLU 的适配代码,全部升级为 CustomDevice 插件式适配方式,并将昇腾 NPU 和寒武纪 MLU 的适配代码迁移至 PaddleCustomDevice 仓库。

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

Python API

API 支持 0 维 tensor

new API

  • 新增 jacobian 和 hessian API,用于科学计算。#53331

  • 新增稀疏计算 API。例如 paddle.sparse.reshapepaddle.sparse.sumpaddle.sparse.slice 等。#46694, #51513, #53794, #51406

  • 新增其它 API。例如 paddle.optimizer.LBFGSpaddle.index_putpaddle.logaddexp 等。#53314, #51912, #52886, #50843, #47282, #52284

动态图

新功能

  • 新增了 paddle.nn.utils.clip_grad_norm_用于支持梯度裁剪和 paddle.Tensor.data_ptr 用于获取 Tensor 数据的内存/显存的地址 PR49935, PR48235, PR49173

  • 新增了 saved_tensors_hooks 机制,用于临时存放和取回用于反向计算使用的前向 Tensor。 PR45763, PR46215, PR48124

  • Tensor 支持了 pickler,用于支持 Tensor 的序列化。 PR47025, PR48179

  • 新增了调试日志,反向出现 nan/inf 时打印前向 Python 堆栈 PR53217 PR52639 PR52729

  • 新增了对 expand_v2, tile, concat, assign, slice 高阶微分的支持。PR45941, PR45942, PR45940, PR45879, PR45960

功能优化

  • 优化了动态图的日志打印,包括日志内容优化、VLog 级别优化、报错内容优化等。PR45783, PR46349, PR46934, PR47724

  • 新增了 FLAGS_auto_growth_chunk_size_in_mb 用于 auto_growth_allocator 最小 chunk size 的设置 PR52204

bug fix

  • 修复了一些算子的 bug,包括:batch_norm, slice, set_value, scale, multinomial, adam, conv, transpose2_grad, conv2d_transpose_double_grad。PR47802, PR47634, PR47349, PR46124, PR46147, PR50388, PR48626, PR48519, PR50386, PR48432, PR51851

  • 修复了 PyLayer 的一些错误问题。PR51740, PR47154, PR47323, PR54041, PR48533

  • 确保 sync_batch_norm 在反向有序,防止错序导致 hang 或精度错误。PR52268, PR52860, PR52779

  • 修复了 linspace 在 AMP 下的 bug。PR46088

  • 修复了 Python C API 错误调用导致 Windows 崩溃的问题。PR46833

  • 修复了 DataLoader 可能遗漏删除/dev/shm 的问题。PR48511

  • 修复了 paddle.grad 的一些问题。PR47151

  • 为不支持高阶微分的算子添加报错信息。PR47231

  • 为 python 运算符添加 numpyarray 的支持。PR48229

  • 有两处 element_size 接口,删除其中之一。PR49631

  • 修复老动态图开 VLOG 崩溃问题。PR47115

  • XPU,d2d 时,改成 d2h+h2d,规避多线程问题 。PR48373

性能优化

静态图

静态图新执行器全面上线

静态图新执行器实现多项功能和性能优化,完成对原有多套旧执行器的统一和替换,成为静态图单卡和分布式训练 python 端入口以及动转静、控制流、CINN 等后端默认使用的执行引擎,大幅提升框架调度性能,功能架构更加清晰,二次开发能力显著增强。#45913#46025#48911#50239#45696#46092#48158,#51389#49708#49275,#48789#49939#51149#52652

算子库

自定义算子等功能增强

包括:全新支持了自定义扩展机制,实现将 C++ 扩展的运算函数绑定至 Python 端使用,进一步提升了框架的二次开发能力;扩展支持自定义硬件上使用自定义算子机制,以满足硬件厂商实现非 Paddle 已有算子的需求;扩展支持了在自定义算子中实现inplacevector<Tensor>输出、optional<Tnesor>输入等高阶机制;优化了自定义算子在动态图模式下的调度性能,多输入参数的算子性能提升 25.4%;为自定义算子 Tensor 扩展新增了常用运算符及 API,支持链式调用,简化代码写法。对算子内核选择机制进行了优化;对部分算子内核进行了逻辑完善、支持数据类型增强以及性能优化;新增以及完善 XPU 内核 100+;修复各项 Bug 累计 170+。 #49222, #51773, #51923, #53080, #50731, #50563, #50840, #50983, #51713, #48733, #50558, #50764, #51973, #52216, #51027, #50745, #50756, #50886, #50813, #50869, #51085, #51646, #51620, #51844, #52421, #52872, #52597, #50582, #52114, #52915, #50928, #48272, #48702, #52191, #52191, #47374, #47375, #47378, #54126, #47638, #47661, #50606, #53528, #50599, #51727, #50825, #50773, #50979, #53336, #53555, #53716, #53753, #53981, #53977, #53980, #54043, #54066, #52866, #53043, #53325, #54323, #54367, #51353, #53749, #50013, #47570, #50997, #51241, #49537

算子体系架构统一

具体包括:将原算子体系下剩余的 350+算子内核全部统一到 PHI 算子库中,以及原算子体系中的算子定义方式也都统一为 PHI 算子库的算子定义形式(基于 YAML 配置定义算子),提升了架构统一性,降低了框架开发的理解成本;将 PHI 算子库依赖的 Fluid 头文件全部解耦,并独立编译为动态链接库,为框架的二次开发提供更轻量的算子库复用方式;继续对飞桨框架中不规范的算子以及算子内核进行规范化调整,便于开发者理解,降低了硬件的接入成本。 #47856, #49328, #49138, #52014, #52044, #52116, #52486, #52101, #52882, #53003, #53034, #51914, #49116, #52626, #52878, #52879, #52880, #52875, #51600, #51601, #51590, #51887, #51891, #52036, #52130, #52134, #51951, #51886, #52274, #52263, #51913, #52145, #52347, #52370, #52437, #52424, #52231, #52522, #52529, #52802, #52799, #52855, #52711, #52940, #53309, #47817, #48001, #48063, #48049, #48168, #48415, #48696, #48970, #50183, #50407, #50498, #50419, #50282, #50870, #50911, #50865, #51288, #53735, #47248, #47787, #52202, #47579, #49444, #45772, #51264, #51634, #51631, #47385, #46342, #47510, #47532, #47702, #47860, #49470, #50358, #49121, #50190, #52374, #52372, #52375, #52371

动转静加组合算子

新功能

  • 组合算子添加 dropout, silu, stack, relu, expand, unsqueeze, pow, squeeze, meshgrid, batch_norm, layer_norm, group_norm, instance_norm, full_like, split, split_with_num, gelu, mean, flatten, rsqrt, hadswish 算子的组合规则 #50497, #50838, #50861, #50819, #50810, #51527, #51070, #51539, #51061, #49894, #50422, #51874, #51341, #50295, #50298, #50672, #51432, #51003

  • 组合算子添加 gather_nd, reduce_max, group_norm, relu, reduce_max, gather, topk, sqrt, elementwise_pow, softmax, batch_norm, prod, multiply, expand, div, relu, slice, cumsum, sigmoid, layer_norm, sin, cos, roll, instance_norm, abs, assign, tile, scatter_nd_add, erf, floor, log, silu, leaky_relu, pad 算子的 vjp 规则 #50966, #51653, #52663, #51742, #52203, #50794, #50305, #50786, #50679, #51045, #51230, #51474, #51283, #51238, #49831, #51838, #50771, #50565, #51768, #51750, #51748, #52532, #52935, #50963, #51430, #53141, #52469, #50436, #51059, #51296, #52533, #53374

  • 组合算子添加 matmul, tanh, elementwise 二阶微分规则 #50452, #52192, #53014

  • 组合算子添加 exp, reduce_mean, softmax, divide, cast, layer_norm, prod, meshgrid, expand_as, dropout, concat, gather_nd, elementwise_max, elementwise_pow, reduce_max 组合算子 bf16 数据类型支持 #54263#54236, #53865, #54175, #54399

  • 动转静新增控制流中的容器添加赋值语义支持 #51248

  • 动转静新增全图回退功能,当动转静转换失败时,可全图回退到动态图方式执行; 回退机制增加 set_eval_frame 接口 #50111, #52006

  • 动转静 to_static 支持算子组合机制;支持被 to_static 装饰下使用 register_hook 的场景; #49836, #52948, #53572

  • 动转静 to_static 接口增加 backend 参数, 可以指定为 CINN 或者 None,当该参数指定为 CINN 时,将会使用 CINN 编译器来加速训练和推理 #52596

  • 新增 primitive 接口代码自动生成功能,根据 ops.yaml 和 legacy_ops.yaml 中的算子定义;自动生成 primitive 接口的代码;自动生成 Tensor 运算接口 #50315, #49654, #50642

  • 新增算子前向组合功能,通过注册前向算子的组合规则,实现将前向算子拆分成基础算子 #49605

  • 新增组合算子开关,可以在 shell 中通过设置环境变量,实现算子按照不同方式进行拆分 #50309

  • 添加OpTest新增组合测试功能,对算子精度进行保障;添加 elementwise 类基础算子单测;添加 batch_norm 的 CINN 单测 #50509, #50807, #52815

功能优化

  • 添加组合算子支持 FP16 运算和 AMP O1 运算;添加 softmax 和 layer_norm 算子 AMP 逻辑 #52397, #52598, #51473

  • 简化组合算子 batch_norm 的组合规则和 vjp 规则 #54012, #51827, #51933,

  • 组合算子优化组合规则,提升含 scalar 组合规则的性能;优化组合算子日志打印 #51960, #50160

  • 组合算子支持 jit.save 接口;新增自定义 VJP 规则接口 #52344, #50885

  • 组合算子 gather_grad 删除 overwrite 参数。 #52707

  • 动转静代码风格清理,报错信息优化,规范日志 #48637, #46128, #52527, #46800,#46415

  • 动转静通过调用 append backward 的方式获取grad var name以修复高阶梯度计算时的错误 #53250

  • 动转静功能升级,清理 to_static 的临时目录以加速代码转换;增强 to_static 自动略过内部接口;支持在程序使用 to_static 装饰器 #47102, #50596, #45768

  • 动转静优化print函数转换以支持在组网阶段打印 Tensor 参数;升级参数收集机制 #48672, #50336

bug fix

性能优化

  • 动转静调用 run_program_op 的执行过程中,增加 scope 缓存和复用机制,避免每个 step 都会传入新的 scope #45813

分布式训练

动态图分布式

自动并行

  • 静态图半自动并行功能完善:

    • 新增多个算子的 FLOPs 计算函数,并新增基于 FLOPs 的计算 Cost 建模 #48083,#47978,#47595,#48083,#48084,#47816

    • 接口易用性提升,完善 DistAttr, Process Mesh, Engine API、信息打印、输入输出等模块;执行 Engine 新增 cost 接口,可用于理论分析模型运行的时间和显存开销 #47503,#46416,#46554, #46633,#49214,#53848,#46552, #47043, #49665, #52912, #45776, #47263

    • 优化 Pass 的通用性和易用性升级,支持更多场景、减少 Pass 预分析耗时 #46519,#47358,#46391, #51035

    • 调试能力增强,添加分布式随机性控制机制和混合并行精度对齐工具 #52903,#49865

    • 支持推理生成任务组网的自动切分, 适配生成模型中的控制流、conditional block 等特殊用法 #46771, #54067

    • 完善 grad_clip,支持了数据并行场景下的负载均衡。#49510, #49249

  • 静态图半自动并行性能提升:

    • 新增 Sharding Pass 自动化通信 Fuse 和 多流通信功能,GPT 6.7B 模型两机上吞吐性能提升 26% #48604, #47180,#46180

    • 新增 Recompute 优化策略调优功能,支持根据显存和模型大小选择最优 recompute checkpoint 设置 #48608,#47846,#49010

    • 流水线并行新增 1F1B 调度优化 Pass #54260, #45915

    • 数据并行优化,支持融合通信和通信计算 Overlap 等优化, GPT 1.3B 模型内性能提升 5% #48092,#45643,#49744, #47578

    • 优化 Reshard 模块 concate 性能,减少部分场景下 concate 次数。#47809

    • 混合精度优化 Pass 性能升级, 支持 BF16 低精度, 适配 while 循环控制流的自动混合并行等 #51285,#51147, #49219, #49079

  • 静态图全自动并行功能完善:

参数服务器

  • 清空 ps 目录下 all 列表,其中 API 不暴露 #51289

  • 清理 cvm 算子 #48989

  • GPUPS 新增对 AFS 支持。#46611

  • PGLBOX2.0 日志降级、修复 dense 参数卡住问题、修复 barrier 不生效的问题、增加 get_epoch_finish python 端接口#49946,#50166,#50349

  • GPUPs 运行切换到指定模式。#51115

  • GPUPS 加入 benchmark。#49587,#49649

  • GPUPS 优化器选择问题修复,修复 reader 读取问题,修复 RPC 编译问题。 #47026,#47192,#49878, #46356,#46575,#49389,#46258,#50136

  • 增加 rocksdb 编译方式。#46074

CUDA

新功能

  • 新增对 CUDA 12.0 的编译支持,并修复相关单测 (#49539, #54542)

  • 新增 CUDNN Frontend API 的编译支持及相关单测,可以使用WITH_CUDNN_FRONTEND=ON 的编译选项进行开启。(#47524, #47612)

功能优化

bug fix

  • 修复 trace、roll、dropout_nd、log_softmax 等多个算子计算出错、栈溢出,以及部分单测问题。(#50243, #52012, #53795, #53149, #53654, #51054, #49373, #53038)

  • 修复 conv 算子穷举搜索在部分场景不生效的问题。(#47065)

  • 修复 collective_reduce_scatter 等算子在 A100 上出现 timeout 的问题。(#54513)

  • 修复 FusedLinear 单测中属性错误的问题。 (#50359)

  • 修复在使用 Profiler 时可能出现的 OOM 等问题 (#46089)

性能提升

文档

  • 修复 index_put 文档中的错误 (#53727)

Intermediate Representation

为了飞桨 IR 体系存在的稳定性、降低研发成本问题,孵化了飞桨新的 IR 体系,完成了基础的数据结构定义、算子定义生成和执行体系适配。为了更好的支持科学计算场景的高阶需求,完成了 silu、cast 等算子的高阶适配。

CINN 编译器

新功能

  • 新增 CINN 对 0D-Tensor 的支持,目前为配合主框架升级,暂时采用增加 pass 的临时方案进行支持,后续会对该方案进行替换升级。 (#53382, #53955, #54064, #54118, #54216, #53454)

  • 新增 CINN 对 int8/uint8/int16/uint16/bf16 等数据类型的支持 (#50566, #53637)

  • 新增 CINN expand 算子的支持 (#46776)

  • 新增 CINN 对 PaddleInference 的支持. (#45009)

功能优化

  • CINN 编译器,传递 skip_gc_vars 属性到 CINN 子图;CINN 为 skip_gc_vars 添加 fetch 算子 #49471, #49553

  • CINN 编译器,conv2d 和 conv2d_grad 默认不使用 cinn 算子 #51645

  • 将 build_cinn_pass 添加到 BuildStrategy,以便于在动转静中使用 (#49496)

  • 增加 reshape 算子在组合算子机制下的单测 (#51276)

  • 主框架联编 CINN 的版本从固定 commit 改为 develop (#49775)

  • 为 CINN 设置默认 Target 参数 (#50182)

bug fix

  • 修复 CINN 符号化过程中拓扑排序后的出现的算子顺序不一致的问题。 (#52556)

  • 修复一些算子计算错误、精度下降,以及单测相关问题 (#53859, #54261, #46801, #53676, #53772)

  • 修复 CINN 对 float16 类型支持的问题。(#48249)

  • 修复 build_cinn_pass 中的问题。 (#46843)

  • 修复了组合算子+动转静 在开启 CINN 时,出现反向因误被 GC 而导致的无数据区的问题 (#50116)

  • 修复编译器 dropout amp 出错,组合算子跑 resnet 出错,inplace 变量未找到等问题 #51688, #52813, #51769

性能提升

  • 优化 reshape 相关融合策略 (#53066)

  • 优化 BuildCINNPass 的性能 (#49696)

  • 优化子图检测模块的性能 (#45040, #46937)

硬件接入

CustomDevice

  • 训练侧新增分布式策略 MP/Sharding/PP/MoE 以及 recompute 重计算功能的支持,推理侧新增分布式策略 MP 的支持,支持通过 CustomDevice 接入的硬件昇腾 NPU 和寒武纪 MLU 无需修改任何代码即可自动继承 CustomDevice 新增的所有分布式策略。 #52872, #54384, #53220, #54572, #54573, #54676, #53044, #53719, #53701, #53702, #53703

  • 新增 API paddle.device.is_compiled_with_custom_device,方便用户判断当前环境是否支持某硬件的插件式设备后端 #49271

  • 增加环境变量 CUSTOM_DEVICE_BLACK_LIST 设置,支持黑名单内的算子自动异构到 CPU 上运行 #50409, #50666

  • 优化 CustomDevice 性能,减少对 runtime 中 get_device_count 接口的调用次数 #46963

昆仑芯 XPU

4. 部署方向(Paddle Inference)

新功能

  • 支持 Paddle TensorRT 多个子图 TensorRT engine 或者不同 Predictor 的之间的 TensorRT engine 共享显存,以便节约显存。#45842 #47631

  • C++ API 增加获取输入 Tensor 的 Shape 和数据类型接口,增加获取输出 Tensor 的 Shape 和数据类型接口。C API 增加 SetExecStream、EnableMkldnnInt8 等 C++已有接口,用于服务化部署。 #49758

  • 新增 paddle.inference.Predictor.register_output_hook()接口,可支持调试时打印 GPU 推理下每层的输出,同时也支持在 While 等控制流模型中使用。注意此接口不支持 Paddle-TensorRT。#54433#47050#54254

  • Paddle Inference 推理的 Predictor 接口支持 paddle::Tensor 作为输入和输出,以便用户直接复用飞桨动态图做推理前、后处理。 (#50445)

  • 增强 Paddle TensorRT 动态 shape 运行能力,config.enable_tuned_tensorrt_dynamic_shape()接口,不传任何参数时,在运行时构建 TensorRT Engine。不再需要先收集 shape 信息再运行,但为了避免运行时的重新构建,需要在前几次运行时,覆盖最小及最大 Shape 的情况, #52162

  • Paddle-TensorRT 支持 NHWC 格式的模型输入,#49633

  • 扩展 config.Exp_DisableTensorRtOPs 接口通过指定 Tensor 变量的名字来禁止进入 TensorRT,#49497

功能优化

  • GPU 混合精度推理(非 Paddle TensorRT 场景)功能增强,Config.enable_use_gpu 增强可设置精度类型。 #47993

  • 支持 double 类型输入进行推理, #51786

  • 由于 TensorRT 算子不支持 INT64 类型导致模型中存在 INT64 数据类型式运行失败问题,Paddle-TensorRT 做了增强,当模型中包含 INT64 数据类型时,进行自动转换,降低到 INT32 类型运行。 #45547

  • Paddle-TensorRT 支持更多算子进入 TensorRT 推理,包含:

  • 增强 Paddle-TensorRT 映射算子 strided_slice,instance_norm,prelu,argmax,cast,nearest_interp_v2,elementwise,bilinear 实现,#46819#47998#48043#48998#49675 , #47495

  • Paddle-TensorRT 部分算子(scale, square, sum, swish, expand_as_v2, prelu, gelu, hard_swish, hard_sigmoid, leaky_relu,softmax, stack, clip, cast, flatten_contiguous_range,unary,equal, elementwise_op) 支持 0 维 Tensor,#53660#53627#53634#53714#53729#53769#53506#53704

  • 支持 GCC12 + CUDA 12.0 以下版本编译, #50106

  • Paddle-TensorRT 的 DeformableConv 插件支持动态 Shape 输入,#50698

  • Paddle-TensorRT 增加 lookup_table 算子的插件支持, #46613

  • 新增 config.enable_low_precision_io()接口支持 Paddle-TensorRT 场景下低精度类型输入, #52485

  • Paddle-TensorRT 的 LayerNorm 插件支持 FP16 计算, #45043

  • Predictor 的输入数据 paddle_infer::Tensor 支持 bool 类型,#49388

  • Paddle-TensorRT 增强 Convolution 实现采用 ConvolutionNd,#47653

  • conv2d_fusion 融合算子支持 NHWC 格式,#49047

  • 调整 C++推理库下 Phi 算子相关目录结构,#53091

  • 当 TensorRT 序列化和加载版本不匹配时,支持重新构建 TensorRT Engine,而不是报错,#50775

  • 优化 Paddle-TensorRT 运行时打印日志信息,#50181

  • 基于 oneDNN 的 CPU 推理支持 elementwise 的 0 维 Tensor 输入,#51656

  • 清理和规范化 Paddle-TensorRT 的 FC、matmul、matmul_v2 算子的支持,统一升级到使用 TensorRT 的 IMatrixMultiplyLayer 进行支持,#52222

性能提升

  • 支持多个 lookup_tables 进入 Paddle-TensorRT 的 Embedding+Eltwise+LayerNorm 的融合 #46243#46230

  • 增加 MoE 融合 Phi 算子,提升 MoE 模型性能推理性能, #48703

  • 在 INT8 量化推理的场景下,Paddle-TensorRT 插件 fallback 到 FP16 计算而不是 FP32 计算,#50554

  • 优化推理时内存、显存, #49051#49046#53930

  • Layout 排布优化 Pass 增强, #52997

  • 支持对算子 Shape 推断进行缓存,提升模型推理性能, #48312

  • 使用 half2 指令优化 bias+add+relu 融合,#49048

  • 使用向量化操作优化多个输入的 Concat Kernel,#49540

  • 基于 CUTLASS 实现 Convolution、Depthwise Convolution 及相关融合算子,提升推理速度。 #47989#50603#51792#50603

  • Paddle-TensorRT 支持 FlashAttention 的插件,提升 StableDiffusion 等模型的推理速度,#49438

  • 增加 Transpose+LayerNorm 的融合 PASS,提升 StableDiffusion 等模型的推理速度,#50082

  • 增加 Elementwise+Transpose 的融合,#50081

  • 优化 Paddle-TensorRT Group Norm 插件实现 ,#49160

  • Config.EnableTensorRtEngine()接口增加 use_cuda_graph 参数,可以支持开启 CUDA Graph,注意在使用时,需要保证模型输入 shape 不变,可以降低运行时耗时,#53406

  • 支持对 Reshape 的 inplace 操作减少模型运行时的拷贝耗时, #49146

  • 基于 oneDNN 优化 LayerNorm kernel 实现,#47782

  • 基于 oneDNN 支持 quantize+transpose 以及 transpose+dequantize 融合,#49509

  • CPU 推理下当开启 MKLDNN 时,默认开启 FC 相关的融合 Pass,提升性能,#45704

  • CPU 的 OneDNN 推理支持 suqeeze2 + transpose2 融合,#47592

XPU 推理提升和性能优化

  • 新增 ExpRunWithRuntimeConfig 接口与 XpuRuntimeConfig 允许推理期间设置外部流、L3 cache 等参数;GetExecStream 接口支持获得昆仑外部流对象;输入、输出支持昆仑设备内存减少 D2H 和 H2D 开销,#53334#52466#53240

  • 新增 multi-encoder, fused_multi_transformer 算子和融合 pass,提升 ERNIE 和 Transformer 类模型性能,#50570#51346#50499#53982#50759#51571#53144#53306

  • 优化 BeamSearch 性能,当 beam_size=1 时对 write_read_array, gather 等细粒度算子进行变换、去除和融合提升模型性能,#53130

  • 多个相同输入的 stack 算子变换为支持 broadcast 的 unsqueeze 算子,unsquee/squeeze 支持 inplace 计算, #52099

  • 新增支持导出适用于昆仑芯的多卡推理模型, #50490

  • 新增 embedding_with_eltwise_add 融合 pass 及算子 phi kernel,减小显存占用并提升推理性能, #50590

  • interpolate 类算子 phi kernel 支持 FP16, #52358

  • argmax 算子支持 INT32 类型输出, #51303

  • 修复开启混合精度推理模式后, 保存序列化模型时只有 model 文件时的报错, #52994

  • 修复 instance_norm 在 scale 和 bias 为空时出现的段错误, #52627

  • conv_transpose 算子支持 FP16,#53626

  • 添加 yolo_box_xpu 融合 pass 及算子 phi kernel,优化 YOLO 模型通用子结构, #54163

  • 添加 conv2d_xpu 融合 pass 以及算子 phi kernel,并支持 FP16 推理,优化卷积操作推理耗时,#52247#53626

  • 添加 sigmoid_elementmul 通用融合 pass,融合为 swish 算子以匹配 conv2d_fusion pass 提升 YOLO 模型推理性能, #53580

  • 添加 act_add 融合 pass 及算子 phi kernel 提升推理性能,#53965

  • 添加 fold_interp_outsize 融合 pass 提升推理性能, #54245

  • 解决当 FC 存在共享 weight 时因重复融合导致结果错误的问题。 #51108#51039

  • 删除算子仅用于训练的 op_device 属性,防止在推理期间错误的选择训练时的 place, #51029

  • 支持优化后模型的保存,允许再次推理时跳过 PASS 优化减少第一次推理时间, #53696

  • 解决算子 Kernel 的 CPUPlace 输入被强制拷贝到 XPU 而导致的计算错误问题, #51306

  • subblock 支持参数 H2D 提前拷贝以提升推理性能。#51876

  • 修复昆仑芯 2 代芯片输出激活的 scale 存储空间大小。 #53505

  • 新执行器昆仑芯 D2D 拷贝支持异步执行, #51876

  • 删除只有一个输入的 concat 算子,#52304

  • lookup_table_v2 支持 FP16 删除冗余 cast 算子, #52888

  • 控制流 While 算子支持缓存 scope,降低每次新建 scope 的开销, #52628

  • scatter 新增支持 FP16,删除冗余 cast 算子以及某一个输入为 1 的 elementwise_mul 算子。#52831

模型量化

  • 动态图量化功能全面升级

    • 新增动态图模型下量化训练的 API 为 paddle.quantization.QAT ,支持通过配置传入量化相关参数,简化量化训练使用流程和二次开发难度 (#49398)

    • 新增离线量化的 API 为 paddle.quantization.PTQ ,支持量化模型导出成推理支持的模型格式 (#50107)

    • 新增 STUB 算子,在训练过程中模拟实际的量化操作(#50510)

  • 支持量化训练模型加载离线量化模型的参数,支持更多算子量化,包含 matmul, scale,conv1d,#47892#45911#48912

  • 支持静态图量化训练的混合并行训练,#52219

  • 修复动态图量化过程中的问题:

    • 导出量化训练模型时候重复插入量化节点,#48751

    • 修复给模型输入插入量化节点的问题,#49926

5. 环境适配

为提升源码编译效率,完善和推广 setuptools + ninja 编译方式,提升开发效率,CPU 场景下,全量编译耗时减少 20min,编译速度提升 24.52%,GPU 场景下全量编译耗时减少 22min,编译速度提升 29.31%; 为了适配较为主流的开发环境,飞桨在源码编译支持了 gcc12 编译和 C++17 标准,适配了最新的 CUDA12; 代码质量完成了编译 warning 的清理,提升编译体验;第三方依赖层级,为减少依赖冲突,升级了底层的 protobuf 版本,并清理了一些低版本依赖库的废弃属性和老旧的代码格式,并移除了对于 python2.x 的支持。

Thanks to our Contributors

This release contains contributions from: 1want2sleep, 201716010711, 404988613, 5u13, 6clc, Ackeraa, Aganlengzi, ahahahahahaha, Ainavo, Allen Guo, andyj, Asthestarsfalll, Aurelius84, Ayuan, BellaZYL, Bjmw3, Bo Zhang, bukejiyu, caozhou, carryyu, Ccc, ccrrong, ceci3, chalsliu, Chang Xu, CHANGer, Charles-hit, Chen Weihang, chenjian, Chenxiao Niu, chenxiao120660, chenxujun, Chitsing KUI, cifar10, co63oc, CollaborativeFiltering, csy0225, cxxly, cyber-pioneer, cyberslack_lee, czr-gc, Dandelight, danleifeng, Danyang Zhang, dasen, denglianbin, Difer, dongfangshenzhu, DrowFish19, duanboqiang, duanyanhui, engineer, engineer1109, Epsilon Luoo, feifei-111, Feiyu Chan, Feng Ni, feng_shuai, Fisher, FlyingQianMM, Frank Lin, Galaxy1458, GaoYuYang, gaoziyuan, gem5, GGBond8488, Ghost Screaming, gongenlei, gouzil, Guanghua Yu, Guo Sheng, Guoxia Wang, Hamid Zare, Hanchiao, handiz, Haohongxiang, haosicheng, haozi, Happyd99, heliqi, hellockx, hellolllw, heyanru, hg-1099255210, hh-qiao, hjyp, hong, HongyuJia, houj04, hua-zi, Huang Jiyi, Huang Zhengjie, huangjiyi, huangjun12, Hui Zhang, Huihuang Zheng, Hulek, hwa, HydrogenSulfate, Ikko Eltociear Ashimine, iLeGend, Infinity_lee, Infrared1029, Jacek Czaja, jakpiase, james, jameszhang, Jiabin Yang, jiahongyu, jiangcheng, jiangfan06, Jianghai, jiaqianjing, jingsongliu, JingZhuangzhuang, jjyaoao, joanna.wozna.intel, junxiu777, Jx-qi, JYChen, JZ-LIANG, jzhang533, Kai Song, Kai Xing, Kaipeng Deng, Kang Zhao, kangguangli, Kevin 吴嘉文, Kim, Kim Yann, knamg, kuizhiqing, lanxianghit, Leding Li, Leo Chen, Leo Guo, levi131, Li Min, Li-fAngyU, Ligoml, lijialin03, lijin23, limingshu, Lin Manhui, LinearTemporalLogic, Linjie Chen, lishicheng1996, Little-chick, littleforest, liu zhengxi, liulinduo, liuruyan, liuzhenhai93, LiYuRio, lj970926, LokeZhou, LoneRanger, lubiu, Lucas, lugimzzz, Lux et Veritas, lxsbupt, LyndonKong, lzy, lzydev, Mahmoud Ashraf, Manan Goel, Maple Xie, Matsumoto Ruko, mayang002, MayYouBeProsperous, megemini, mengziheng, Meteor Liu, mhy, mhy-666, Ming-Xu Huang, ming1753, minghaoBD, mjxs, Moqim, Mountagha, Mr.Juice, mrcangye, NetPunk, Netpunk, nihao, niuliling123, Nyakku Shigure, OccupyMars2025, Ouyang Chao, pangengzheng, pangyoki, parap1uie-s, Paulina Gacek, Piotr Paturej, PommesPeter, PPGitub, PPPPzhang, PuQing, Qi Li, Qi Shao, QingshuChen, qipengh, qizhaoaoe, Rayman, RedContritio, RichardWooSJTU, risemeup1, Roc, ronnywang, Ruibiao Chen, Ruibin Cheung, RuohengMa, Ryan, SaltFish11, Sanbu, Scotty, scotty, seemingwang, Shaojie WANG, ShenLiang, shentanyue, Shijie, Shuangchi He, Siming Dai, Sing_chan, sneaxiy, Sonder, sprouteer, Sqhttwl, sunli, superwinner1, supplyout, SylarTiaNII, Sylwester Fraczek, Sławomir Siwek, taixiurong, Tao Luo, Taylor-Layrose, TeFeng Chen, Thomas Young, thunder95, Thunderbrook, Tian, Tian Zheng, tiancaishaonvjituizi, tianshuo78520a, tifa, Tinson Lai, Tomasz Socha, Tony Cao, ucsk, umiswing, ustiniankw, Vegetable dog, Vigi Zhang, Vvsmile, Wang Bojun, Wang Xin, Wang Xinyu, wangfengsheng1999, wangguanqun, wangguanzhong, wanghuancoder, wangna11BD, wangshengxiang, wangxiaoning, wangxinxin08, Wangzheee, WangZhen, wangzhen38, wasupandceacar, wawltor, Wei Shengyu, Weilong Wu, weishengying, Wen Sun, wenbin, wentao yu, wenzhe.wang, westfish, whisky-12, whs, Wilber, will-jl944, winter-wang, Winters Montagne, WJJ1995, wuhuachaocoding, wuyefeilin, wz1qqx, XiangGao, xiaoguoguo626807, xiaohemaikoo, xiaoluomi, xiaoting, xiaoxiaohehe001, Xiaoxu Chen, xiaoyuanzi914, Xinger, Xinyu Chen, xiongkun, xjmxyt, xu98bin, xysheng-baidu, yangguohao, yangjianfengo1, YangQun, YangZhou, yeliang2258, YepKong, Yichen Zhang, yikaikkk, Yiqun Liu, yjphhw, ykkk2333, Young-Flash, yu wentao, Yuang Liu, Yuanle Liu, YuanRisheng, yuchen202, yuehuayingxueluo, YuhangLi, Yulong Ao, YUNSHEN XIE, yunyaoXYY, YuRonan, zachary sun, ZeKai Zhou, Zenghui Yuan, zengshao0622, Zero Rains, Zhan Rongrui, Zhang Jun, Zhang Na, Zhang Ting, Zhang Zheng, zhangbo9674, ZhangDY-6483, zhangkaihuo, zhangxin81, zhangyikun02, zhangyingying520, zhangyuqin1998, zhaocaibei123, zhaoyingli, Zhen Wang, Zheng-Bicheng, Zhenghai Zhang, Zheng_Bicheng, zhenyun, Zhibao Li, zhiboniu, Zhong Hui, Zhou Wei, ZhouMengLei1999, zhoutianzi666, zhouzj, zhupengyang, zhurou603, zhuyipin, zhwesky2010, ziyoujiyi, zlsh80826, Zman, zmxdream, zqw_1997, Zuza Gawrysiak, zxcd, zyfncg, ZZK, zzk0, 丁一, 傅剑寒, 六个骨头, 卢林, 周周周, 姜永久, 学渣戊, 张春乔, 张正海, 柠檬味~, 王明冬, 石晓伟, 超级码牛, 陈沧夜, 骑马小猫

2.4.2 Release Note

版本修复了已知问题,并新增了少量功能。

训练框架(含分布式)

  • 修复 paddle.utils.dlpack.to_dlpack 在 for 循环里 API 多次创建 dlpack 对象的报错问题,修复引用对象计数错误导致 dlpack 实际指向内容被析构的问题。 #50138

  • 修复 paddle.multiplex API 在多维 Input Tensor 场景下访存越界的问题并添加 check 机制。 #49368

  • 引入 cutlass,实现 gemm+gather+scatter 的融合;优化 sparse conv 的训练和推理性能;优化 batch_norm 在 1D 输入数据下的推理性能。 #50118

  • 修复因使用 constexpr 导致 gcc54 环境下编译失败的问题。 #50421

  • 将 sum op 的 Kernel 迁移到 PHI 算子库,并且修复 infermeta 中 SelectedRows 无法获取正确 dim 的 bug。 #49342

  • 修复 eigen 头文件错误引用导致的偶发编译错误。 #48157

  • 修复 fold 算子在大 bs 输入下访存越界的问题。 #49491

  • 通过增加类型判别,解决发送张量时,维度不统一,造成流水线并行 hang 住的问题。 #50337

  • 修复了自定义算子输出梯度的参数顺序不连续时,反向算子的输出值可能为 None 的 bug。 #48656

  • 修复 paddle.queeze_ API 在 inplace 操作时 shape 重复修改导致结果错误 bug。 #49903

  • 修复动转静模式下无参数 Layer 无法调用 backward 的问题。 #49812

  • 修复 CUDA11.8 在 windows 的编译问题。 #50205

  • 修复 FusedDropoutActBiasGrad 在 H100 上不支持的错误。 #47285

  • 新增 debug_graphviz_path 选项至 build_strategy#46531

  • 修复未关闭的 popen 物件。 #47053

部署方向(Paddle Inference)

  • 完善混合精度推理功能,提高混合精度推理稳定性。重构二阶段式 convert_to_mixed_precision 接口底层实现, enable_use_gpu 新增 precision 参数支持一阶段式。 #49077#49239#49477

  • 支持 jetson ampere 架构下编译。 #49364

  • 修复 fc kernel 低精度模式下的精度问题。 #49781

  • 修复 CAPI 下, trt workspace 参数类型的错误。 #48350

  • 修复 Paddle 1.x 版本下 arg_max arg_min 没有 flatten dtype 参数,推理时会报错的问题。 #49771

  • 修复 split infermeta 重构后关于 lod 逻辑信息缺失问题。 #49745

  • 修复常量折叠 pass 不正确设置,导致 conv2d 权重经折叠后为非 persistable 而没有进入 TensorRT engine 问题。 #50105

2.4.1 Release Note

去除飞桨对 python.so 的依赖,修复在包括 conda 在内的特定的环境下,因无法找到 python.so 而造成运行失败的 Bug。

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

    • 新增 MFCC、Spectrogram、LogMelSpectrogram 等特征提取 API,支持 GPU 计算,相比 CPU 实现处理性能提升 15x 倍以上,可大幅提升语音模型训练 GPU 利用率。#45424

    • 新增窗函数、离散余弦变换等特征提取基础 API,方便用户自定义语音特征提取。#45424

    • 新增语音 IO 模块,提供 2 种 音频 I/O backend,支持 6 种编解码,便捷地实现语音数据的加载。 #45939

    • 新增 TESS,ESC50 语音分类数据集,方便用户完成经典语音分类模型。#45939

  • 新增图学习领域 API: paddle.geometric

    • 图学习逐渐成为机器学习领域的关键技术,飞桨新增 paddle.geometric 模块提供更好的图学习建模和训练开发体验。

      • 消息传递:图学习消息传递机制是图建模的基础,因此新增 7 个图学习消息传递 API,更方便完成进行图学习建模。其中,新增的 3 个消息传递融合算子可大幅减少图模型训练显存占用,稠密图场景下 GCN 系列模型可节省 50%+显存,训练速度可提升 20%+。#44848, #44580, #43174, #44970

      • 图采样:图采样是图模型训练的性能瓶颈,此次新增了高性能图采样算子,支持高并发图采样,GraphSage 的采样速度可提升 32 倍以上,模型训练速度可提升 12 倍以上。#44970

  • 新增视觉领域 API

    • paddle.vision 新增目标检测领域算子 paddle.vision.distribute_fpn_proposals(#43736), paddle.vision.generate_proposals(#43611), paddle.vision.matrix_nms(#44357), paddle.vision.prior_box 和 paddle.vision.box_coder(#47282)。

  • 增强 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

    • 高层 API 中视觉模型 ResNeXt 实现复用 ResNet 代码进行重构。 #40588

    • 高层 API 中视觉模型 Inceptionv3、MobileNetv1、MobileNetv2、ShuffleNetv2 实现改进。#40431

(2)新功能及重要功能升级

  • 新动态图架构正式上线:新动态图框架调度性能大幅提升,相比原有架构大幅提升了调度性能,超 90%API 的调度性能提升超过 50%,超 50%套件模型性能提升超过 5%; 新动态图架构清晰,耦合度低,基于新架构实现 Hook、PyLayer 等扩展模块的学习与开发成本显著降低。#37550#37574#37813#37926#39192#37599#37406#37466#37599#40945#39989

  • 高阶自动微分机制:为了更好支持科学计算等场景,飞桨框架针对高阶自动微分能力进一步完善优化。目前,已在paddle.incubate.autograd 目录下提供了支持前反向高阶自动微分相关试用功能及 API(当前处于孵化状态,相关功能及 API 签名可能会发生变化)。如果想自行实现相关模型、探索自动微分机制,请仔细阅读高阶自动微分使用方法及限制。具体的升级包括:

    1. 静态图高阶微分机制升级,通过基础算子体系和程序变换,支持高阶前向及反向微分,并打通编译器、分布式功能。#41919, #41201

    2. 新增前向和反向高阶自动微分 API, paddle.incubate.autograd.forward_grad, paddle.incubate.autograd.grad#43354

    3. 新增 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

    4. 修复现有elementwise_div, reduce_sum, p_norm等算子缺陷。#46514, #46184

  • 通用异构参数服务器架构

    • 参数服务器 GPUGraph 基础架构升级,满足大规模应用落地:针对传统 CPU 存储和训练大规模图神经网络的成本高,稳定性低,性能不足的问题打造了纯 GPU 图训练引擎(PGLBox),通过 SSD、内存、显存的异构层次化存储技术,支持超大规模图模型训练,同等成本下训练性能相对 CPU 图训练引擎提升 10+倍,任务失败率下降到极低。#44594

    • 大规模联邦参数服务器架构:针对大规模个性化推荐场景,基于异构 PS 基础架构,开发了大规模联邦参数服务器训练,支持千亿参数下的横向纵向联邦,它包括两个特性:用户私有参数本地更新,公共参数在远端更新,用户可灵活配置私有参数和公共参数的切分策略;新增中心调度节点 Coordinator,用户可从基类进行二次开发,自定义 Client 选择策略。#42682#44864#44327

  • 自适应并行

    • 设计并推出了完善的自动并行接口体系,支持自动动转静分布式训练、自动分布式数据加载、自动分布式保存与加载、自动参数转换、自定义切分标记和自定义执行过程等。用户只需要基于单机组网就可以非常容易获得自动分布式训练能力,支持数据并行、模型并行、流水线并行和混合并行。#45776#46552#44202#45840#45518#40528#42838#43093#43312#45053

    • 完善了自适应并行底层机制,包括升级分布式 cost model 设计和实现,为切分策略提供更好评价;为 Program IR 添加了原生分布式属性,丰富了 Cluster 功能。#40457#42601#42727#42874#43114#44095#44146#44701#44973#45002#45118#45237#42576#41722#44150#44989#44951#44963

    • 新增数据并行下 Sharding stage1/2/3 自动调优功能,在保证满足显存约束情况下,自动选择吞吐最高的 Sharding stage 策略。#43782

  • 训练硬件接入-插件式方案:新增了自定义 Runtime/Kernel/CCL/Graph/Pass 等方案,硬件厂商可以根据硬件特性按需选择实现哪些模块。

  • ONNX 格式导出

    • 支持量化模型导出,导出后的 ONNX 模型使用 TensorRT 或 ONNXRuntime 加载推理,可获得 1.5~4 倍的推理加速 #856#782

    • 新增大于 2GB 的大模型导出 #942

(3)功能优化

  • 动转静分析转换 & 扩展能力全面提升

    • 为了提升模型动转静转换成功率和使用体验,重构了控制流语法的转写逻辑,升级核心语法为 JIT (just-in-time)范式,实现与 Python 代码的等价转写,并完善了 break、return、continue 等语法功能。#43666#43846#43848#43880#43957#43328#43348#43998#44465#44504#43713#43864#43967#44155#44487#44527#45105#45900

    • 为了支撑语音等场景自定义解码灵活部署场景,扩展了 jit.save/load 接口功能,支持用户多函数合并导出,并新增了 JITLayer 组件,支持类函数式调用,同时配合 PHI 算子库 C++ API 实现了自定义推理部署功能。#44283#41783#43607#43754#43758#43798#44010#44351#44465#44504#44597#44738#44984#46249

    • 为了统一 API 动静行为,升级了 20 个算子,支持在静态图中 Op 的 attribute 信息可变,保证动静行为一致,提升模型的动转静转换成功率。包括pad2ddepthwise_conv2d_transposeconv2d_transposeadaptive_avg_pool2dreversebincountmultinomialreduce_sumreduce_meanreduce_prodreduce_minreduce_maxuniformsqueezemax_unpool2ddropoutcumsumeyeargminargmax#44737#45084#45189#45391#45417#45427#45514#45525#45543#45660#46352#46433#45078#45342#45372#45453#45522#45620

    • 为了解决用户动转静报错栈偶尔丢失问题,优化了报错模块的逻辑,提升了报错栈的可读性以及用户调试的使用体验。#44054#44083#44781#44996

    • 为了全面支持 Python 类型 Type Hint 语法,新增了 TypeHint 语法识别和转写模块。#47121

  • PHI 算子库覆盖全量运算类算子:继续建设高可复用算子库 PHI,将剩余的飞桨 2.x 运算类 PythonAPI 关联的算子以及相关内核均迁移到 PHI 算子库,并改写为函数式,新增了约 180 个前反向算子的 CPU&GPU 内核,以及 170 个 Kunlun 专用算子内核,进一步提升了新增算子时可复用的内核函数集。同时,新增了 100 余个 C++运算类 API,可支持在自定义算子中使用,进一步提升了基于飞桨进行外部扩展开发的易用性。#44577#44631#44434#44605#44676#44742#44436#45887#45851#45623#45397#45863

  • 规范化算子定义,大幅提升模型简洁度:针对飞桨 1.x 历史算子定义存在诸多冗余参数,理解适配成本高的问题,对约 150 个高频算子的冗余参数进行了集中清理,基本上将数学无关的参数清理完毕。这些冗余参数清理后,飞桨存储的推理模型中信息量明显减少,普遍裁减掉了约 40%的属性变量,显著提升了飞桨算子定义的清晰程度,提升了模型分析调试的体验;同时,也显著减小了飞桨存储推理模型的体积,普遍减小超过 70%,显著提升了飞桨模型的轻量化程度。#44310 , #45613 , #45684 , #45708 , #45758 , #45786 , #45772 , #45845 , #45984 , #46218 , #46553

(4)性能优化

  • AMP 性能及精度优化

    • 更多算子增加 FP16 数据类型支持,包括 elementwise 系列算子, compare 系列算子, strided_slice, set_value, uniform_ramdom 等。(#45504 #44405 #45496 #46641 #46906

    • 优化 hard_swish 算子 FP16 Kernel 实现方案,保证精度无损。( 35386

    • 更多算子增加 BF16 数据类型支持,包括 fused_linear、empty、selu、pow、adam、clip、embedding、gelu、pad3d、pixel_shuffle、tile、where 等。#46364#47177

  • 单机训练性能自动调优

    • Transpose OP 支持自动 Kernel 选择机制,可以针对不同模型配置自动搜索到性能最优的 Kernel 实现,提升模型性能。#43310 (Transpose Op 接入自动调优功能)

    • AMP Layout 自动切换支持新动态图模式,ResNet50、TSM、DeepLabV3 等模型在新动态图下通过 Layout 自动调整获得性能提升 9%~21%。(#45409, #45751, #45826, #46880)

  • GPU 单机训练通用性能优化

    • 优化 Conv 类算子 cuDNN 算法的 Cache 方案,并 Cache 所有算法获取方式下的结果,大幅减少算子的 CPU 开销。(#41891 #47197

    • 进一步优化多个算子的 GPU Kernel 和 Python 端性能,包括 dist, poisson, depthwise_conv2d、transpose, eigh, broadcast 类计算,reduce 类计算,layer_norm,cross_entropy 等,在更多配置场景下达到更优性能。(#44946, #45057, #45160, #42491, #42704, #42853, #46287, #46362, #46490, #46412, #46623, #40051

  • 集合通信分布式训练性能优化

    • 为提高流水线并行调度效率,支持动态图 Interleaving 1F1B 调度策略,在 GPT-3 模型上性能提升 3%~4%。#45797#45869#45922#46209#45402#45444#45497#45797#45869#45922#46209#46399#46483#46876#47242#47249#47497#47517

    • 为提升 MLPerf BERT 模型的分布式训练性能,DistributedFusedLamb 分布式优化器支持分层 AllReduce,在 DCU 1024 卡上 MLPerf BERT 性能提升 17%。#44821#44843

    • 为优化使用数据并行 Data Parallel 时的显存占用,支持 Tensor Fusion 时的 Buffer Lazy 初始化策略,可降低等于模型参数量的显存占用量。#45631

    • 分布式并行策略 Data Parallel 和 Sharding 支持 BF16 训练。#46846#47246

    • 为支持 Sequence Parallel 等策略,分布式流水线并行策略支持 enable_partial_send_recv 策略,支持传输 sequence parallel 切分后的 tensor。#46992#47083

    • 为提升 sharding stage 2 策略的性能,实现了 sharding stage 2 optimizer broadcast 参数与下一个 step forward 的 overlap,并使用多 CUDA Stream 进行通信,GPT 6.7B 模型 16 卡训练性能提升 11%。#46495#46656#47061

(5)问题修复

  • 动转静

    • 修复了模型在多卡训练时 Parameter 无梯度场景下,动转静会报错的问题。#44485

    • 修复了动转静时终端会有多余的框架日志误输出的问题。#45754#46800

    • 修复了模型中控制流中包含无需梯度的 Tensor 时,在动转静训练时会报错的问题。#43034

    • 修复了动转静训练在梯度聚合时计算值错误的问题。#44893

    • 修复了函数被@staticmethod 装饰时动转静会报错的问题。#44983#45268#45277

    • 修复了部分场景下模型包含控制动转静训练时,显存占用过多的问题。#45380

    • 修复了模型中包含复杂控制流时,动转静在组网阶段 shape 推导报错的问题。#45916#46020

  • 报错机制修复

    • 使用 np.testing.assert_allclose 替换 self.assertTrue(np.allclose(…)),获得更充分的报错信息 ([#44947)(https://github.com/PaddlePaddle/Paddle/pull/44947), #44988#45213)

  • 集合通信分布式训练

    • 修复了通信库初始化、通信过程中的若干 bug,增强了系统运行稳定性 #44964 #45100 #44758

    • 修复流水线并行容易 hang 的问题,增强策略的易用性 #47201;增强流水线功能支持不均衡的输入 #47199

    • 修复新动态图 MP/PP 策略下性能低于老动态图的问题 #47071

    • 修复 sharding stage2 策略错误维护参数 trainable 属性的 bug #47240

    • 修复一系列 OP 在 tensor numel 大于 INT32_MAX 时的 bug。#45711#45741#45897#46158#46767#47191#46045#46160

    • 修复 FusedAttention 和 FusedFeedForward OP 显存占用过大的 bug。#47236#47235

    • 修复 multi_tensor_adam 和 multi_tensor_momentum OP 在传入的 parameters 是 list of dict 时参数更新错误的 bug。#47352#47372

4. 部署方向(Paddle Inference)

(1)新增特性

  • 后端图引擎集成方案优化

    • 为了减少 Paddle-TensorRT 插件代码开发,以及减少 Paddle-TensorRT 子图数量从而降低资源占用率,开发了通用插件机制,可以自动对框架内丰富的 Phi 算子提供统一的 TensorRT 插件接口,在多数场景下可以有效减少显存占用。 #46970#46179#46580

    • 为了方便用户在框架定制算子且能使得 Paddle-TensorRT 高效推理,进行功能升级支持升级框架自定义 Paddle-TensorRT 插件。#46970

  • Inference 推理库构建系统优化,体积可按需裁剪

    • 预编译的安装包默认支持 TensorRT:训练用的预编译安装包与部署用的预编译安装包(Paddle Inference)统一为一个预编译安装包,且优化了构建系统,使得预编译的安装包默认支持 TensorRT,减少用户使用 PaddleTensorRT 时的切换成本。#46008#45824#46058

    • 体积可按需裁剪:可依据模型算子进行裁剪。#47033 , #47049 , #47047

  • Inference 支持原生 AMP

  • 压缩与推理引擎打通升级

    • 升级量化模型存储格式,新格式支持 Paddle Inference、PaddleLite 和 Paddle2ONNX 3 种部署方式,支持芯片类型包括 X86 CPU、NVIDIA GPU、Arm CPU。(#46305 #462832 #46022

    • 新增兼容 SoC/NPU 芯片的 INT8 全量化功能,可保证产出的 INT8 量化模型在 SoC/NPU 芯片上有最佳推理加速和精度。

  • 推理引擎与飞桨编译器(CINN)打通升级

    • 升级飞桨框架与编译器的接口模块,支持推理模型通过 Paddle Inference 接入编译器进行优化(#44499 #44708

(2)底层优化

  • GPU 性能优化

    • 新增 matmul_v2、LSTM、reshape、fill_constant、swish、mulitclass_nms3、bilinear_interp_v2、split、silu、shuffle_channel 算子的 TensorRT 映射及完善动态 shape 的支持。多类重点模型性能提升 7%~90% 。(#46177#44678#44314#44561#45166, #44411#43424, #44516)

    • 增加常量折叠 PASS 进行推理性能优化,提升 SwinTransformer、HifiGAN、FastSpeech2 等模型的性能。(#45494)

    • 增加 conv_fusion workspacesize 的 cache,提升 conv_fusion 计算性能。(#45902)

  • 视觉 ViT 模型优化

    • 新增 ViT 模型 Attention 结构融合 PASS,并支持 OSS Plugin 和自动 padding,ViT 推理速度提升 30%-40% #45019 #45506

  • 大模型推理性能优化

    • 为提高超大生成模型推理速度以及显存节省,对多层 Transformer 融合算子(fused_multi_transformer_op)增加 INT8 实现(fused_multi_transformer_int8_op),支持生成模型的量化推理。结合矩阵乘算法选择、量化反量化 kernel 融合进行性能优化。 #46169

    • 为了提升大模型推理使用 fused_multi_transformer 融合的易用性,增加 Pass 进行自动匹配融合。

  • CPU 性能优化

(3)问题修复

  • TensorRT workspace size 大小设置支持 int64。(#44469

  • Paddle-TRT 中,全面支持 Op 的输入为权重。(#45545

  • Paddle-TRT 中,支持 conv2d_transpose/conv3d_transpose 含 output_padding 属性。(#45004

  • Paddle-TRT 中,增强 strided_slice 对动态 shape 的支持。(#46819

  • Paddle-TRT 中,优化了在多线程场景下运行时 context 的显存占用。(#45468

  • Paddle-TRT 中,修复了多个模型在同一进程中运行时,当初始化顺序变动时,反复生成序列化文件的问题。(#43942

  • 修复了同一进程中,多次初始化 Predictor 并运行时,偶发崩溃的问题。(#45203

  • 修复 MobileNetV3_large、ERNIE 3.0-Medium 和 bert 等量化模型推理精度异常问题 (#45416 #46283 #45920 #47573)

5. 环境适配

  • 训练用的预编译安装包与部署用的预编译安装包(Paddle Inference)统一为一个预编译安装包,且优化了构建系统,使得预编译的安装包默认支持 TensorRT。

  • 取消了适配 CUDA10.1 版本的预编译安装包。

  • 新增了适配 CUDA11.7 版本的预编译安装包。

  • 源码编译时间缩短:减少模块间依赖,提升并行度,优化部分模块的编译速度,共同使的全量编译时间减少了约 20 分钟。

  • 支持在 windows 11、Centos 8、Ubuntu 22.04、Jetson 5.02 系统环境上运行飞桨,支持使用 WSL 2 工具在 windows 系统中运行飞桨 linux 安装包。

  • 修复飞桨在 glibc2.34+环境中运行错误的问题。

  • 优化了整个代码仓库中的 C++、Python、CMake 的代码风格,并引入或升级了以下的代码风格检查工具。

6. 硬件适配

海光 DCU

  • 增加在 DCU 上的 Profiler 功能,可以在 DCU 上对模型运行过程的性能数据进行收集、统计和展示,支持 kernel 层面的 DCU 占用率显示。

昆仑芯

  • 增加在昆仑芯 2 代芯片上的 Profiler 功能,可以在昆仑芯 2 代芯片上对模型运行过程的性能数据进行收集、统计和展示,支持 kernel 层面的昆仑芯 2 代芯片占用率显示。

  • 昆仑芯 2 代芯片(昆仑芯 AI 加速卡 R200、R300、R200-8F、R200-8FS、RG800)训练/推理支持,已验证 PPYOLOE、PP-OCR、ERNIE 3.0、PP-TSM、PP-TTS、DLRM、PPO 等总计 51 个模型,支持静态图+动态图训练,支持混合精度训练,支持单机单卡、单机多卡训练,覆盖了智能视觉、自然语言处理、智能语音、智能推荐、强化学习 5 个领域。

寒武纪

  • 寒武纪 MLU 芯片(MLU370 系列板卡)训练/推理支持,已验证 ResNet50、BERT、YoloV3、OCR-DB、Deeplabv3 等多个模型,支持静态图+动态图训练,支持混合精度训练,支持单机单卡、单机多卡训练。

Graphcore

  • Graphcore IPU 芯片(包括 IPU Mk2 GC200 和 Bow IPU)训练/推理支持,支持 ResNet50、BERT 等模型,支持静态图和动转静模式训练,支持单芯片、单机、多机分布式训练。

  • 增加更多算子支持

  • 升级到 Poplar SDK v3.0.0 版本 #46892

  • 支持使用动转静模式训练模型, 添加了一个新的 paddle.incubate.identity_loss op 用来辅助构图 #43770

  • 支持 Paddle 原生的分布式训练 API paddle.distributed.launch #43311

  • 支持使用混合精度训练模型 #41733

  • Paddle Inference 支持使用 PopART 自定义算子 #45235

Intel

Thanks to our Contributors

This release contains contributions from:

0x45f, Aganlengzi, Ainavo, Allen Guo, Asthestarsfalll, Aurelius84, Baibaifan, baoachun, BiynXu, Bo Zhang, BrilliantYuKaimin, cambriconhsq, caozhou, carryyu, ccrrong, ceci3, chalsliu, Chang Xu, Charles-hit, Chen Long, Chen Weihang, chenjian, chentianyu03, Chenxiao Niu, cifar10, crystal, csy0225, danleifeng, David Nicolas, dc-cheny, denglin-github, dongfangshenzhu, duanboqiang, duanyanhui, engineer, enzodechine, Fan Zhang, feifei-111, Feiyu Chan, Feng Ni, feng_shuai, FlyingQianMM, freeliuzc, furnace, fuyou765, fwenguang, Ghost Screaming, gongweibao, Guanghua Yu, guguguzi, Guoxia Wang, Haipeng Wang, handiz, Haohongxiang, haosicheng, helen88, heliqi, hong, HongyuJia, houj04, huangxu96, Hui Zhang, Huihuang Zheng, huzhiqiang, Jacek Czaja, Jack Zhou, jack603047588, Jackwaterveg, jakpiase, james, Jiabin Yang, jiangcheng, Jiaqi Liu, JingZhuangzhuang, joanna.wozna.intel, JYChen, JZ-LIANG, Kaipeng Deng, kangguangli, kuizhiqing, Leo Chen, Leo Guo, levi131, Li Min, Li-fAngyU, lidanqing, LielinJiang, Ligoml, Lijunhui, lilong12, limingshu, Lin Manhui, Linjie Chen, liqitong-a, littletomatodonkey, liu zhengxi, Liu-xiandong, liutiexing, Liyulingyue, LiYuRio, Lux et Veritas, lyq, Matsumoto Ruko, MayYouBeProsperous, mengqingchun02, Ming-Xu Huang, ming1753, minghaoBD, moyan, mrcangye, Netpunk, niuliling123, Nyakku Shigure, OccupyMars2025, onecatcn, pangyoki, parap1uie-s, peachlcy, piotrekobi, Qi Li, QingshuChen, qipengh, Rayman, Regan Yue, RichardWooSJTU, risemeup1, Roc, ronnywang, Rui Li, Ruibiao Chen, seemingwang, Shang Zhizhou, shangliang Xu, ShenLiang, shentanyue, Shijie, ShiningZhang, shixingbo, shiyutang, Shuangchi He, Siming Dai, Sing_chan, Skr Bang, SmirnovKol, sneaxiy, sprouteer, Sylwester Fraczek, Sławomir Siwek, taixiurong, Tao CHANG, TeFeng Chen, Thomas Young, thunder95, Thunderbrook, tiancaishaonvjituizi, tianshuo78520a, Tomasz Socha, TTerror, USTCKAY, Vigi Zhang, Walter, Wang Bojun, wangguanqun, wangguanzhong, wanghuancoder, wangna11BD, WangXi, wangxinxin08, Wangzheee, WangZhen, wangzhen38, wawltor, wbn, Wei Shengyu, Weilong Wu, weishengying, Wen Sun, wenbin, whs, Wilber, WJJ1995, wuhuachaocoding, wuhuanzhou, wuyefeilin, XiaoguangHu, xiaoguoguo626807, xiaohemaikoo, xiaoting, xiaoxiaohehe001, Xiaoxu Chen, xiayanming, Xingyuan Zhang, xiongkun, yang131313, yangguohao, YangZhou, Yanxing Shi, Yao Zihang, yaoxuefeng, yaozhixin, yeliang2258, Yilingyelu, Yiqun Liu, ykkk2333, Yuang Liu, Yuanle Liu, YuanRisheng, yuguo, Yulong Ao, Yulv-git, YUNSHEN XIE, Zhang Jun, Zhang Ting, Zhang Zheng, zhangbo9674, zhangbopd, zhangchunle, Zhangjingyu06, zhangkaihuo, zhangxiaoci, zhangyikun02, zhangzhenguo, Zhanlue Yang, zhaocaibei123, zhaoying9105, zhaoyingli, Zhen Wang, Zhengyang Song, zhiboniu, Zhong Hui, Zhou Wei, zhoutianzi666, zhupengyang, ziyoujiyi, zlsh80826, zmxdream, zn, Zuza Gawrysiak, zyfncg, 傅剑寒, 六个骨头, 津, 熊峻峰, 王明冬, 石晓伟

2.3.1 Release Note

1. 重要更新

  • 2.3.1 版本是在 2.3 版本的基础上修复了已知问题,并且发布了支持 CUDA 11.6 的安装包。

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

(1)功能优化

API

  • 修改 paddle.nn.initializer.KaimingUniformpaddle.nn.initializer.KaimingNormal 两种初始化方式,使其支持多种类型的激活函数。(#43721, #43827)

  • 优化 paddle.io.DataLoader 的数据预读取功能,使其支持设置了 prefetch_factor 设定的预读取数据的缓存数量,避免在读取大块数据时出现 IO 阻塞。(#43674)

新动态图执行机制

  • 修改新动态图 API 逻辑中 optional 类型 Tensor 的初始化方法,防止被提前析构导致数据异常。(#42561)

全新静态图执行器

  • 延迟初始化执行器中的线程池,避免只执行一轮的 program(如 save、load、startup_program 等)创建线程池。(#43768)

混合精度训练

  • 设置 paddle.nn.Layerset_state_dict 中禁用 state_dict hook。(#43407)

分布式训练

  • 使 paddle.incubate.nn.functional.fused_attentionpaddle.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)

  • 动态图量化训练支持 convbn 融合,静态图离线量化支持设置 skip_tensor_list 来跳过某些层不做量化。(#43301)

(2)性能优化

  • 优化 paddle.incubate.nn.functional.fused_attentionpaddle.incubate.nn.functional.fused_feedforward 算子,增加 add_residual 属性,用以控制最后一步是否进行加 residual 操作,CAE 模型性能提升 7.7%。(#43719)

  • 优化 linspace 算子,将 startstopnum 三个输入 Tensor 初始化在 CPU 上,避免在算子中进行 GPU -> CPU 拷贝,SOLOv2 模型性能提升 6%。(#43746)

(3)问题修复

API

  • 修复 paddle.io.DataLoaderreturn_list=True 时因多线程冲突小概率报错问题。(#43691)

  • 修复 paddle.nn.Layer 的参数存在 None 类型参数时 to 方法报 NoneType 不存在 device 属性的错误。(#43597)

  • 修复 cumsum op 在某些 shape下计算结果出错的问题。(#42500, #43777)

  • 修复静态图下 Tensor.__getitem__在使用 bool索引时组网阶段输出结果维度为 0 的问题。(#43246)

  • 修复 paddle.slicepaddle.strided_slice 处理参数为负数时出现异常的问题。(#43432)

  • 修复 set_value op 在处理切片 step为负数时赋值结果异常的问题。(#43694)

  • 修复 C++ 端 copy 接口不能在多卡设备间拷贝的问题。(#43728)

  • 修改 paddle.incubate.nn.functional.fused_attentionpaddle.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)新增特性

新增功能

  • CPU 上 ONNX Runtime 后端新增 PaddleSlim 量化模型支持。(#43774, #43796)

(2)底层优化

CPU 性能优化

  • EnableMkldnn 配置中移除 gpu_cpu_reshape2_matmul_fuse_pass,修复 ResNet50 性能下降的问题。(#43750)

GPU 性能优化

  • 添加 bilinear_interp_v2 TensorRT convert 支持。(#43618)

  • 添加 matmul_scale_fuse_passmultihead_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)

新硬件适配

  • 寒武纪 MLU 支持飞桨 Profiler。(#42115)

  • GraphCore IPU 支持显示编译进度。(#42078)

2.3.0 Release Note

1. 重要更新

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

API

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

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

  • 新增 11 个 稀疏张量计算 API,支持创建 COO、CSR 格式的 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 版本开始,飞桨对框架支持的 GPU 架构种类进行了调整和升级。

推理部署

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

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

硬件适配

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

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

框架架构

2. 不兼容升级

  • 预编译安装包中移除 CUDA sm35 ARCH: 受到包体积大小的影响,在预编译的安装包中移除了 CUDA sm35 架构。(#41754)

  • paddle.to_tensor 将一个 python int scalar 转换为 Tensor 时,在 Windows 上的默认数据类型由 int32 变为 int64,从而与 Linux/Mac 保持对齐。(#39662)

  • 为了与 python3 下的除法行为保持一致,除法符号 / 从 rounding divide 变成 true divide,计算输出结果的数据类型从 int 切换成 float。(#40890)

2.2 2.3.0
             
>>> import paddle
>>> a = paddle.to_tensor([327])
>>> b = paddle.to_tensor([80])
>>> a / b
Tensor(shape=[1], dtype=int64, place=CUDAPlace(0), stop_gradient=True,
      [4])
             
>>> import paddle
>>> a = paddle.to_tensor([327])
>>> b = paddle.to_tensor([80])
>>> a / b
Tensor(shape=[1], dtype=float32, place=Place(gpu:0), stop_gradient=True,
      [4.08750010])
  • 修正 ELU 的公式,alpha < 0 时的计算方式与原论文对齐,从而修复小部分情况下的计算结果错误。同时,由于在 alpha < 0 无法在数学上仅从输出计算反向梯度,因此 elu_ 在 alpha < 0 时将报错。(#37316)

2.2 2.3.0
             
# elu(x) = max(0, x) + min(0, α ∗ (e^x − 1))
>>> import paddle
>>> x = paddle.to_tensor([-1., 6.])
>>> m = paddle.nn.ELU(-0.2)
>>> out = m(x)
>>> out
Tensor(shape=[2], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
       [ 0.         , -74.48576355])
>>> out = paddle.nn.functional.elu_(x, alpha=-0.2, name=None)
>>> out
Tensor(shape=[2], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
       [ 0.         , -74.48576355])
             
# elu(x) = x, if x > 0
# elu(x) = α ∗ (e^x − 1), if x <= 0
>>> import paddle
>>> x = paddle.to_tensor([-1., 6.])
>>> m = paddle.nn.ELU(-0.2)
>>> out = m(x)
>>> out
Tensor(shape=[2], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
       [0.12642412,  6.        ])
>>> out = paddle.nn.functional.elu_(x, alpha=-0.2, name=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/dist-packages/decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
  File "/usr/local/lib/python3.7/dist-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/paddle/fluid/dygraph/inplace_utils.py", line 34, in __impl__
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/paddle/nn/functional/activation.py", line 89, in elu_
    assert alpha >= 0., "elu_ only support alpha >= 0, please use elu instead."
AssertionError: elu_ only support alpha >= 0, please use elu instead.

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

(1)新功能

API

  • 新增 4 个自动微分类 API,支持科学计算需求,具体列表如下:(#40692)

    • paddle.incubate.autograd.vjp,计算向量-雅可比矩阵乘积。

    • paddle.incubate.autograd.jvp,计算雅可比矩阵-向量乘积。

    • paddle.incubate.autograd.Jacobian,计算雅可比矩阵。

    • paddle.incubate.autograd.Hessian,计算海森矩阵。

  • 新增线性代数类 API

    • 新增 paddle.linalg.triangular_solve,计算具有唯一解的三角系数线性方程组。(#36714)

    • 新增 paddle.linalg.eig,计算一般方阵的特征分解。(#35764)

    • 新增 paddle.linalg.sovle,计算线性方程组的解。(#35715)

    • 新增 paddle.linalg.lstsq,计算线性方程组的最小二乘解。(#38585, #38621)

    • 新增 paddle.linalg.qr,计算矩阵的 QR 分解。(#35742, #38824)

    • 新增 paddle.inner,计算矩阵内积。(#37706)

    • 新增 paddle.outer,计算矩阵外积。(#37706)

    • 新增 paddle.linalg.cov,计算向量间协方差。(#38392)

    • 新增 paddle.linalg.cholesky_sovle,计算方程 cholesky 解。(#38167)

    • 新增 paddle.linalg.lupaddle.linalg.lu_unpack,计算矩阵 lu 分解、解压缩 lu 矩阵。(#38617, #38559, #38616)

  • 新增 21 个概率分布类 API,包括 6 个随机变量分布,13 个随机变量变换,2 个 KL 散度计算,用于强化学习、变分推断、科学计算等场景,具体列表如下:(#40536, #38820, #38558, #38445, #38244, #38047)

    • paddle.distribution.ExponentialFamily,指数分布族基类。

    • paddle.distribution.BetaBeta 分布。

    • paddle.distribution.DirichletDirichlet 分布。

    • paddle.distribution.Independent,独立分布,用于创建高阶分布。

    • paddle.distribution.TransformedDistribution,变换分布,用于通过基础分布及一系列变换生成高阶分布。

    • paddle.distribution.Multionmial,多项分布。

    • paddle.distribution.Transform,随机变量变换的基类。

    • paddle.distribution.AbsTransform,取绝对值变换。

    • paddle.distribution.AffineTransform,仿射变换。

    • paddle.distribution.ChainTransform,变换的链式组合。

    • paddle.distribution.ExpTransform,指数变换。

    • paddle.distribution.IndependentTransform,独立变换,用于扩展变换定义域的 event_dim

    • paddle.distribution.PowerTransform,幂变换。

    • paddle.distribution.ReshapeTransformreshape 变换。

    • paddle.distribution.SigmoidTransformsigmoid 变换。

    • paddle.distribution.SoftmaxTransformsoftmax 变换。

    • paddle.distribution.StackTransformstack 变换,用于以 stack 方式组合多个变换。

    • paddle.distribution.StickBreakingTransform, stickbreaking 变换。

    • paddle.distribution.TanhTransformtanh 变换。

    • paddle.distribution.kl_divergence,计算 KL 散度。

    • paddle.distribution.register_kl,注册用户自定义 KL 散度计算函数。

  • 新增高层 API

    • 新增 paddle.vision.models.AlexNetpaddle.vision.models.alexnet,支持直接使用 AlexNet 模型。(#36058)

    • 新增 paddle.vision.models.DenseNetpaddle.vision.models.densenet121paddle.vision.models.densenet161paddle.vision.models.densenet169paddle.vision.models.densenet201paddle.vision.models.densenet264,支持直接使用 DenseNet 模型。(#36069)

    • 新增 paddle.vision.models.GoogLeNetpaddle.vision.models.googlenet,支持直接使用 GoogLeNet 模型。(#36034)

    • 新增 paddle.vision.models.InceptionV3paddle.vision.models.inception_v3,支持直接使用 InceptionV3 模型。(#36064)

    • 新增 paddle.vision.models.MobileNetV3Smallpaddle.vision.models.MobileNetV3Largepaddle.vision.models.mobilenet_v3_smallpaddle.vision.models.mobilenet_v3_large,支持直接使用 MobileNetV3 模型。(#38653)

    • 新增 paddle.vision.models.resnext50_32x4dpaddle.vision.models.resnext50_64x4dpaddle.vision.models.resnext101_32x4dpaddle.vision.models.resnext101_64x4dpaddle.vision.models.resnext152_32x4dpaddle.vision.models.resnext152_64x4d,支持直接使用 ResNeXt 模型。(#36070)

    • 新增 paddle.vision.models.ShuffleNetV2paddle.vision.models.shufflenet_v2_x0_25paddle.vision.models.shufflenet_v2_x0_33paddle.vision.models.shufflenet_v2_x0_5paddle.vision.models.shufflenet_v2_x1_0paddle.vision.models.shufflenet_v2_x1_5paddle.vision.models.shufflenet_v2_x2_0paddle.vision.models.shufflenet_v2_swish,支持直接使用 ShuffleNetV2 模型。(#36067)

    • 新增 paddle.vision.models.SqueezeNetpaddle.vision.models.squeezenet1_0paddle.vision.models.squeezenet1_1,支持直接使用 SqueezeNet 模型。(#36066)

    • 新增 paddle.vision.models.wide_resnet50_2paddle.vision.models.wide_resnet101_2,支持直接使用 WideResNet 模型。(#36952)

    • 新增paddle.vision.ops.nms API,支持单类别和多类别非极大抑制(non-maximum supression, nms)算法,用于目标检测预测任务加速。(#40962)

    • 新增paddle.vision.ops.roi_poolpaddle.vision.ops.RoIPool,支持检测任务中 RoI 区域池化操作。(#36154)

    • 新增paddle.vision.ops.roi_alignpaddle.vision.ops.RoIAlign,支持检测任务中 RoI Align 操作。(#35102)

    • 新增 paddle.text.ViterbiDecoderpaddle.text.viterbi_decode Viterbi 解码 API,主要用于序列标注模型的预测。(#35778)

  • 新增 11 个 Sparse 类 API,支持创建 COO、CSR 格式的 Sparse Tensor,与 Tensor 互相转换等基础功能:

    • paddle.sparse.sparse_coo_tensor,创建 COO 格式的 Sparse Tensor。(#40780)

    • paddle.sparse.sparse_csr_tensor,创建 CSR 格式的 Sparse Tensor。(#40780)

    • paddle.sparse.ReLU,支持 SparseCooTensor 的 ReLU 激活层。(#40959)

    • paddle.sparse.functional.relu,支持 SparseCooTensor 的 ReLU 函数。(#40959)

    • Tensor.values(),获取 SparseCooTensor 或者 SparseCsrTensor 的非零元素方法。(#40608)

    • Tensor.indices(),获取 SparseCooTensor 的坐标信息的方法。(#40608)

    • Tensor.crows(),获取 SparseCsrTensor 的压缩行信息的方法。(#40608)

    • Tensor.cols(),获取 SparseCsrTensor 的列信息的方法。(#40608)

    • Tensor.to_sparse_coo(),将 DenseTensor 或者 SparseCsrTensor 转换为 SparseCooTensor。(#40780)

    • Tensor.to_sparse_csr(),将 DenseTensor 或者 SparseCooTensor 转换为 SparseCsrTensor。(#40780)

    • Tensor.to_dense(),将 SparseCooTensor 或者 SparseCsrTensor 转换为 DenseTensor。(#40780)

  • 新增硬件相关 API

    • 新增 paddle.device.cuda.max_memory_allocatedpaddle.device.cuda.max_memory_reservedpaddle.device.cuda.memory_allocatedpaddle.device.cuda.memory_reserved 四个 GPU 显存监测相关 API,方便实时查看和分析模型显存占用指标。(#38657)

    • 新增 paddle.device.cuda.get_device_properties,支持返回 CUDA 设备属性信息。(#35661)

    • 新增 paddle.device.cuda.get_device_namepaddle.device.cuda.get_device_capability,支持返回 GPU 设备名称信息和计算能力的主要和次要修订号。(#35672)

  • 新增 Tensor 操作 API

    • 新增 paddle.nansum,沿 axis 对输入 Tensor 求和,且忽略掉 NaNs 值。(#38137)

    • 新增 paddle.nanmean,沿 axis对输入 Tensor 求平均,且忽略掉 NaNs 值。(#40472)

    • 新增 paddle.clone,返回输入 Tensor 的拷贝,并且提供梯度计算。(#38020)

    • 新增 paddle.Tensor.element_size,返回 Tensor 中的单个元素在计算机中所分配的 bytes 数量。(#38020)

    • 新增 paddle.Tensor.to_uva_tensor,支持将 numpy 对象转换为实际存储在 CPU,但可作为 CUDA 对象进行虚拟地址访问的功能。(#39146, #38950)

    • 新增paddle.rot90,沿 axes 指定的平面将 n 维 Tensor 旋转 90 度。(#37634)

    • 新增paddle.logitpaddle.Tensor.logit,计算输入 Tensor 的 logit 函数值。(#37844)

    • 新增 paddle.repeat_interleave,沿着指定轴对输入进行复制,创建并返回到一个新的 Tensor。(#37981)

    • 新增 paddle.renorm,把 Tensor 在指定的 axis 切分成多块后分别进行 p norm 操作。(#38130, #38459)

    • 新增 paddle.modepaddle.Tensor.mode,沿指定轴查找输入 Tensor 的众数及对应的索引。(#38446)

    • 新增 paddle.quantilepaddle.Tensor.quantile,沿指定轴计算 Tensor 的 q 分位数。(#38567)

    • 新增 paddle.kthvaluepaddle.Tensor.kthvalue,查找 Tensor 中指定轴上第 k 小的数及对应的索引。(#38386)

    • 新增 paddle.is_floating_pointpaddle.Tensor.is_floating_point,判断输入 Tensor 是否为浮点类型。(#37885)

    • 新增 paddle.erfinvpaddle.Tensor.erfinv,计算输入 Tensor 的逆误差函数。(#38295)

    • 新增 paddle.lerppaddle.Tensor.lerp,根据给定权重计算输入 Tensor 间的线性插值。(#37253)

    • 新增 paddle.angle,用于计算复数 Tensor 的相位角。(#37689)

    • 新增paddle.rad2degpaddle.Tensor.rad2deg,将元素从弧度的角度转换为度。(#37598)

    • 新增paddle.deg2radpaddle.Tensor.deg2rad,将元素从度的角度转换为弧度。(#37598)

    • 新增paddle.gcdpaddle.Tensor.gcd,计算两个输入的按元素绝对值的最大公约数。(#37819)

    • 新增paddle.lcmpaddle.Tensor.lcm,计算两个输入的按元素绝对值的最小公倍数。(#37819)

    • 新增paddle.amaxpaddle.Tensor.amax,对指定维度上的 Tensor 元素求最大值,正向结果和 max 一样,有多个相等的最大值时,反向的梯度平均分到这多个值的位置上。(#38417)

    • 新增paddle.aminpaddle.Tensor.amin,对指定维度上的 Tensor 元素求最小值,正向结果和 min 一样,有多个相等的最小值时,反向的梯度平均分到这多个值的位置上。(#38417)

    • 新增paddle.isclose,用于判断两个 Tensor 的每个元素是否接近。(#37135)

    • 新增paddle.put_along_axispaddle.take_along_axis,用于提取或放置指定索引下标的元素。(#38608)

    • 新增 paddle.bincountpaddle.Tensor.bincount,用于统计 Tensor 中每个元素出现的次数。(#36317)

    • 新增 paddle.fmaxpaddle.fmin,扩展了 max/min 的功能,支持比较的两个 Tensor 中有 NaN 值的情况,即如果对应位置上有 1 个 NaN 值,则返回那个非 NaN 值;如果对应位置上有 2 个 NaN 值,则返回 NaN 值。(#37826)

    • 新增 paddle.diff,用于计算沿给定维度的第 n 个前向差值,目前支持 n=1。(#37441)

    • 新增 paddle.asinhpaddle.acoshpaddle.atanh 反双曲函数类 API。(#37076)

    • 新增 paddle.as_realpaddle.as_complex 用于实数 Tensor 和复数 Tensor 之间的转换。(#37784)

    • 新增 paddle.complex 用于给定实部和虚部构造复数 Tensor。(#37918, #38272)

    • 新增 paddle.detpaddle.slogdet,用于计算矩阵的行列式和行列式的自然对数。(#34992)

    • 新增paddle.nn.utils.parameters_to_vector,可以将输入的多个 parameter 展平并连接为 1 个 1-D Tensor。(#38020)

    • 新增paddle.nn.utils.vector_to_parameters,将 1 个 1-D Tensor 按顺序切分给输入的多个 parameter。(#38020)

  • 新增组网类 API

    • 新增 paddle.nn.Foldpaddle.nn.functional.fold,支持将提取出的滑动局部区域块还原成 batch 的 Tensor。(#38613)

    • 新增 paddle.nn.CELUpaddle.nn.functional.celu,支持 CELU 激活层。(#36088)

    • 新增 paddle.nn.HingeEmbeddingLoss,增加计算 hinge embedding 损失的方式,通常用于学习 nonlinear embedding 或半监督学习。(#37540)

    • 新增 paddle.nn.ZeroPad2D API,按照 padding 属性对输入进行零填充。(#37151)

    • 新增 paddle.nn.MaxUnPool3Dpaddle.nn.MaxUnPool1D,用于计算 3D 最大反池化和 1D 最大反池化。(#38716)

    • 新增 paddle.incubate.graph_khop_samplerpaddle.incubate.graph_sample_neighborspaddle.incubate.graph_reindex API,支持图多阶邻居采样和图编号重索引操作,主要用于图神经网络模型训练。(#39146, #40809)

  • 新增随机数类 API

    • 新增 paddle.poisson,以输入 Tensor 为泊松分布的 lambda 参数,生成一个泊松分布的随机数 Tensor。(#38117)

    • 新增 paddle.randint_like API,支持新建服从均匀分布的、范围在[low, high) 的随机 Tensor,输出的形状与输入的形状一致。(#36169)

    • 新增 paddle.Tensor.exponential_,为 inplace 式 API,通过指数分布随机数来填充输入 Tensor。(#38256)

  • 新增参数初始化类 API

    • 新增paddle.nn.initializer.Dirac,通过迪拉克 delta 函数来初始化 3D/4D/5D 参数,其常用于卷积层 Conv1D/Conv2D/Conv3D 的参数初始化。(#37389)

    • 新增paddle.nn.initializer.Orthogonal,正交矩阵初始化,被初始化后的参数是(半)正交向量。(#37163)

    • 新增paddle.nn.initializer.calculate_gain,获取激活函数的推荐增益值,增益值可用于设置某些初始化 API,以调整初始化范围。(#37163)

  • 新增学习率类 API

    • 新增 paddle.optimizer.lr.MultiplicativeDecay,提供 lambda 函数设置学习率的策略。(#38250)

  • 新增分布式相关 API

  • 新增优化器相关 API(#40710)

    • paddle.incubate.optimizer.functional.minimize_bfgs,增加二阶优化器 BFGS。

    • paddle.incubate.optimizer.functional.minimize_lbfgs,增加二阶优化器 L-BFGS。

  • 新增 paddle.incubate.multiprocessing模块,支持 Tensor(CPU/GPU)在 python 进程间传输。(#37302, #41339)

  • 新增 paddle.incubate.autotune.set_config API,支持多版本 Kernel 自动选择、混合精度数据布局自动转换、DataLoader 的 num_workers 自动选择,以自动提升模型性能。(#42301)

  • 新增 paddle.incubate.nn.FusedMultiTransformerpaddle.incubate.nn.functional.fused_multi_transformer API,可将多层 transformer 融合到一个 op 中,提升模型推理性能,注意:仅支持前向推理。(#42311)

  • 新增动静统一的 einsum_v2 op,兼容原有 python 端 paddle.einsum 实现的同时支持动转静导出和更加完备的 Infershape 推导。(#42495, #42327, #42397, #42105)

IR(Intermediate Representation)

  • 动态图转静态图

    • 变量类型 StaticAnalysis 模块新增支持类似 a, b = paddle.shape(x) 的类型标记。(#39245)

    • 新增支持 InputSpec.name 作为 Program 缓存 hash key 的计算字段。(#38273)

    • 新增支持 dict['key'] = x.shape 语法。(#40611)

    • 新增支持 Pure FP16 训练。(#36944)

    • 新增支持 for i in [x,y,z] 语法。(#37259)

    • 新增支持 python3 的 type hint 语法。(#36544)

  • Pass 开发

    • 新增基于 NVIDIA cuBlasLt Epilogue 的 FC + [relu|gelu] 的前向与反向融合。(#39437)

  • Kernel Primitive API

    • 新增 GPU 平台 KP 算子,包括 cast、scale、clip、bce_loss、abs_grad、reduce_sum_grad、reduce_mean_grad、clip、bce_loss、full、full_like、distribution、 random、masked_select_kernel、where_index、masked_select_grad、dropout、sigmoid、where、abs_grad。(#36203, #36423, #39390, #39734, #38500, #38959, #39197, #39563, #39666, #40517, #40617, #40766, #39898, #39609)

    • 新增支持 XPU2 源码编译模式。(#37254, #40397, #38455)

    • 新增支持 KP 算子在 XPU2 和 GPU 中复用,包括 reduce、broadcast、elementwise_add、exp、log、relu、sigmoid、leaky_relu、softplus、hard_swish、reciprocal。(#36904, #37226, #38918, #40560, #39787, #39917, #40002, #40364)

    • 新增 XPU2 平台 KP 算子单测,包括 brelu、ceil、celu、elu、floor、hard_shrink、hard_sigmoid、log1p、logsigmoid、relu6、silu、soft_relu、softsign、sqrt、square、swish、thresholded_relu、softshrink。(#40448, #40524)

    • 新增 XPU2 KP 模型支持,包括 resnet50、deepfm、wide_deep、yolov3-darknet53、det_mv3_db、bert、transformer、mobilenet_v3、GPT2。

混合精度训练

  • 从混合精度训练 paddle.amp.GradScalerminimize 中拆分出 paddle.amp.Gradscaler.unscale_ 方法,提供恢复 loss 的独立接口。(#35825)

  • paddle.nn.ClipByGlobalNorm 动态图模式添加 FP16 支持,为 clip op 添加 FP16 Kernel,使clip相关操作支持 FP16。(#36198, #36577)

  • 支持 paddle.amp.decorate 传入的optimizer参数为 None。(#37541)

  • 为 merged_momentum op 添加支持输入多学习率、支持 use_nesterov 策略的计算、支持 regularization 计算。(#37527)

  • paddle.optimizer.Momentum优化器添加 multi_tensor 策略、为Optimzizer类的clear_grad添加set_to_zero分支。(#37564)

  • paddle.optimizer.Adam优化器添加 multi_tensor 策略。(#38010)

  • paddle.optimizer.SGD优化器添加 multi_precision 策略。(#38231)

  • 为优化器 state_dict 方法添加存储 master weight 参数。(#39121)

  • 添加支持 op CUDA bfloat16 混合精度训练,支持 O1、O2 模式,通过 paddle.amp.auto_cast 可开启上述训练模式。(#39029, #39815)

  • 为如下 ops 添加 bfloat16 CUDA Kernel:matmul、concat、split、dropout、reshape、slice、squeeze、stack、transpose、unbind、elementwize_max、elementwize_add、elementwize_mul、elementwize_sub、scale、sum、layer_norm、p_norm、reduce_sum、softmax、log_softmax、sigmoid、sqrt、softplus、square、gaussian_random、fill_constant、fill_any_like。(#39485, #39380, #39395, #39402, #39457, #39461, #39602, #39716, #39683, #39843, #39999, #40004, #40027)

  • 为如下 ops 添加 bfloat16 CPU Kernel:dropout、reshape、slice、squeeze、unsqueeze、stack、transpose、unbind、elementwize_max、elementwise_mul、elementwise_sub、gather。(#39380, #39395, #39402, #39457, #39461, #39602, #39716, #39683)

  • 支持打印 bfloat16 类型的 Tensor。(#39375, #39370)

  • p_normelementwise_maxfill_constant_batch_size_like``scatter增加 FP16 计算支持。(#35888, #39907, #38136, #38499)

  • 为如下 ops 增加 int16_t 支持:cumsum、less_than、less_equal、greater_than、greater_equal、equal、not_equal、fill_any_like、grather_nd、reduce_sum、where_index、reshape、unsqueeze。(#39636)

  • 为 cross_entropy op 增加 int16_t label 类型的支持。(#39409)

  • 为 embedding op 增加 int16_t id 类型的支持。(#39381)

  • 为 reduce_mean op 增加 FP16 类型的支持。(#38289)

  • 为 elementwise_min op 增加 FP16 类型的支持。(#38123)

  • 更新 bfloat16 AMP oneDNN 默认支持列表。(#39304)

飞桨高可复用算子库 PHI

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

新动态图执行机制

针对飞桨原动态图执行机制的调度性能、二次开发能力差的问题,我们重构了动态图的底层执行机制。通过全新的调用执行方式,配合 Phi 算子库进行高效的运行时执行,对于 Phi 算子库支持的算子,切换到新动态图模式能体验到调度性能有较大幅度的提升。但是由于整体框架执行机制升级的工作量巨大,且该部分工作耦合了大量 Phi 算子库的工作, 因此在这个版本下我们仍未默认使用该执行方式。如果想要试用可以通过设置环境变量 FLAGS_enable_eager_mode=1 来切换使用。具体包括如下内容:

  • 新动态图执行机制基础架构、核心组件与机制实现:静态化动态图相关执行代码,将原本的同质化的算子构建变成针对不同 Phi API 的特异化调用从而极大的优化了调度开销。(#36059, #37323, #37556, #37555, #37478, #37458, #37479, #37599, #37659, #37654, #39200, #39309, #39319, #39414, #39504, #39526, #39878, #39963)

  • 新动态图执行机制子功能开发、适配:支持了更加灵活,更加完备的动态图子功能例如 hook,pylayer,double_grad, inplace,amp 等等。(#41396, #40400, #40695, #41043, #40915, #41104, #41350, #41209, #40830, #40891, #36814, #37377, #37193, #36965, #37810, #36837, #38488, #39282, #39449, #39531, #39638, #39674, #39893, #40170, #40693, #40937, #41016, #41051, #41121, #41198, #41287, #41380, #41306, #41387, #40623, #40945, #39282, #39449, #38488)

  • 新动态图执行的自动代码生成机制:当我们为了将大量的同质化算子的计算和调度逻辑分化成不同的特异化的调度逻辑时,我们发现这是一个非常庞大的工作,因此我们引入了全新的自动代码生成逻辑来生成代码从而简化动态图的运行时逻辑。同时,为了能够适配之前框架中的各类运行时逻辑,我们也利用了一些复杂的编译手段来运行时的获取信息从而生成更加准确的调度代码。(#37574, #37575, #37639, #37723, #37753, #37812, #37837, #37910, #37943, #37992, #37959, #38017, #37969, #38160, #38085, #38562, #38573, #39192, #39215, #39355, #39358, #39328, #39233, #39628, #39767, #39743, #39897, #39797, #39997, #40058, #40080, #40107, #39962, #40132, #40276, #40266, #40480, #40482, #40368, #40650, #40815, #40907, #40935, #41089)

  • 新动态图执行机制接入主框架,联合调试:我们目前利用一些环境变量区分静态图模式和动态图模式(含新动态图和老动态图模式),这些模式下我们已经适配了大部分的动态图的逻辑,但是仍有大量问题正在修复中。(#37638, #37643, #37653, #38314, #38337, #38338, #39164, #39326, #40391, #40201, #40854, #40887)

  • 更新了动态图下的一些判断逻辑,支持兼容形态下的动态图快速执行路径:(#40786)

    • 非静态图模式(目前的过渡方案):_non_static_mode()

    • 在动态图模式下且判断在新动态图(推荐的判断逻辑):_in_dygrah_mode()

    • 在动态图模式下且判断在老动态图(不推荐的判断逻辑,在将来的版本中将废弃):_in_legacy_dygraph()

    • 在动态图模式下开启老动态图并关闭新动态图:_enable_legacy_dygraph() 或者退出 _test_eager_guard()

    • 在动态图模式下开启新动态图并关闭老动态图:_disable_legacy_dygraph() 或者 with _test_eager_guard()

    • 在静态图或者动态图模式下判断在新动态图:_in_eager_without_dygraph_check()

  • 动态图重构后支持 inplace 策略:输入与输出为同一个 Tensor。

    • 为动态图重构中间态适配 inplace 策略。(#40400)

    • 为动态图重构最终态适配 inplace 策略。(#40695)

    • 动态图重构后,为 PyLayer 功能添加 inplace 策略。(#41043)

    • 动态图重构后,为 Tensor 的 setitem 功能添加 inplace 策略。(#40915)

    • 动态图重构后添加_reset_grad_inplace_version接口,将 Tensor 的梯度的 inplace version 置为 0。(#41101)

    • 反向计算过程中如果不需要前向 Tensor 的值(no need buffer 属性),则不需要对该 Tensor 进行 inplace version 的检测操作。 为 no_need_buffer 的 Tensor 跳过 inplace version 的检查。(#41350)

    • 统一动态图重构后与重构前对 inplace version 检查的报错信息。(#41209)

  • 动态图重构后支持 view 策略:输入与输出 Tensor 共享底层数据。

    • 为动态图重构中间态适配 view 机制。包括reshapesqueezeunsqueezeflatten API。(#40830)

    • 为动态图重构最终态适配 view 机制。包括reshape API。(#40891)

  • 添加支持新动态图 eager Tensor 在 python 端的 weakref。(#41797)

  • 增强新动态图 DoubleGrad 功能,支持基础的 DoubleGrad 功能。(#41893, #41894, #41895)

  • 新增 core.eager.StringTensor 接口,支持在 python 端构造 StringTensor 以及使用 StringTensor 相关 API。(#41039)

  • core.eager.Tensor 新增 *grad_name_grad_value API,返回梯度的名称和值。(#41990)

  • 为动态图中间态添加对 no_need_buffer 属性的处理。在 inplace 反向检查操作中,会跳过具有 no_need_buffer 属性的 Tensor 的检查。(#41720)

全新静态图执行器

为了解决飞桨原静态图执行器在部分场景下调度性能不够理想,不便于扩展多 stream 等问题,我们实现了全新的性能优越,易于扩展的静态图执行器,充分利用了多 stream、多线程的异步调度能力。新执行器相当于原执行器是兼容升级,目前已在单机单卡场景下默认使用,用户不需要在训练代码中做任何修改即可自动使用。当然,我们也提供了接口来切换回原执行器,用户可以通过设置环境变量 FLAGS_USE_STANDALONE_EXECUTOR=false 来切换回原执行器。(#41179) 主要内容如下:

  • 基础组件:用于执行器中多线程算子调度的高性能线程池 (#35470, #35930, #36030, #36480, #36688, #36740, #38335, #40770) 及线程协同组件 (#38779, #40876, #40912),算子执行后及时地显存回收 (#37642, #39617, #40859),并行执行器新依赖分析算法 (#37231) 等。

  • 调度逻辑:优化执行器中算子的调度方法,支持多 stream 的多线程异步调度机制,将数据类型、设备、布局等转换改为算子调度以提升性能,支持缓存算子 Kernel 选择,支持选择全新 Phi 算子等。(#35024, #34922, #35711, #35928, #39458#36899)。

  • 接口兼容:兼容原执行器的用户接口和功能,如对齐 python 端 Executor.run()、支持 Scope 中管理 Tensor 等,确保用户可以无感知地切换新执行器。(#37278, #37379, #37445, #37510, #40955, #41778, #41058, #38584, #37957, #37672, #37474, #37085, #37061, #36945)

  • 增强多线程场景下调试和报错功能,将子线程的报错捕获到主线程中统一抛出,以提升用户体验。(#36692#36802)

  • 修复新执行器通信流重置 Allocator 中 stream 缓存信息的问题,减少跨 stream 场景下的 RecordStream 开销,优化后 DeepFM 模型性能提升约 8%。(#42046)

  • 优化新执行器算子间的依赖分析方法,提升运行性能;为 send/recv 通信算子建立正确依赖以支持流水线并行。(#42009)

分布式训练

Profiler

  • Python 层新增性能分析模块 paddle.profiler:提供对训推过程中性能数据的收集,导出和统计的功能。(#40065, #40357, #40888)

    • paddle.profiler.Profiler,性能分析器,用户交互的接口。(#41029, #41524, #41157, #40249, #40111, #39964, #40133)

    • paddle.profiler.RecordEvent,提供自定义打点来记录时间的功能。(#39693, #39694, #39695, #39675,#41445, #41132)

    • paddle.profiler.ProfilerTarget,指定性能分析的目标设备。

    • paddle.profiler.ProfilerState,表示性能分析器的状态。

    • paddle.profiler.SortedKeys,指定统计表单内数据的排序方式。

    • paddle.profiler.make_scheduler,生成性能分析器状态的调度器,实现采集范围的周期性控制。

    • paddle.profiler.export_chrome_tracing,将性能数据保存到可供 chrome://tracing 插件查看的 google chrome tracing 文件。(#39316, #39984, #41029)

    • paddle.profiler.export_protobuf,将性能数据保存到内部结构表示的 protobuf 文件。(#39519, #39109, #39474)

    • paddle.profiler.load_profiler_result,载入所保存到 protobuf 文件的性能数据。

    • paddle.profiler.Profiler通过指定 timer_only 参数,对模型进行数据读取、step 开销和吞吐量的统计。(#40386)

  • C++层重构 Profiler 底层基础设施

  • 修改新动态图下 op 的打点名称和类型。(#41771

  • 添加 Kernel 表单,以及优化表单内容的展示方式。(#41989)

  • 消除 Profiler 关闭情况下对模型前向计算造成性能下降的影响。(#42142)

CINN 编译器接入

飞桨的编译器功能在逐步丰富中,针对 CINN (GitHub - PaddlePaddle/CINN: Compiler Infrastructure for Neural Networks) 的变更,Paddle 侧接入也进行了相对应的更改,以适配编译器 CINN 的功能。其中主要包括增加 Paddle-CINN 运行流程的子图管理相关功能,显存和速度性能的优化、开发过程发现的 bug 修复。

  • 功能开发:

    • 子图 op 相关:

      • 添加从计算图中找到并生成 CINN 子图的功能。(#36345)

      • 新增 cinn_launch op 作为运行时接入 CINN 的入口,负责调度 CINN 对子图进行编译、初始化数据空间、调度生成 Kernel 的执行。(#36600)

      • 为 cinn_launch op 的 Kernel 实现添加辅助类 CinnLaunchContext 管理子图编译、运行的中间数据,提升可扩展性和代码可读性。(#37938)

      • 为 CINN 子图添加额外的 fetch 结点,从而保证 CINN 外部结点能取到待 fetch 变量的值。(#37172, #37190)

      • 添加对 CINN 子图符号化的功能,符号化用于拓扑排序子图并返回 CINN 执行序列。(#36417)

      • 新增 CinnCompiler 类,用于调用 CINN 编译模型中可使用 CINN 算子替换的子图。(#36562, #36975)

      • 为 CINN 符号化类新增获取子图 fetch 变量名的接口,防止编译优化中将 fetch 变量融合消除。(#37218)

    • 程序开发检查、debug、API 变更相关:

      • 同步更新 CINN 中 NetBuilder API 名称的变化。(#40392)

      • 为 Paddle-CINN 添加必要的用于 debug 的日志信息。(#36867)

      • 添加 Paddle desc 与 CINN desc 互转函数。(#36100)

      • 相比 Paddle,CINN 中实现的算子可能存在未使用到某些输入变量,因此在 cinn_launch op 中去除对输入变量必须被使用的检查。(#37119)

      • 新增 cinn_instruction_run op 用于调用 CINN 执行单个生成指令,便于 Paddle 侧构建 Graph 调度运行子图。(#39435, #39576)

      • 在 Paddle 中添加编译 CINN 所需的 CUDA/CUBLAS/MKL/CINN pass 应用等控制宏。(#37066, #36660)

      • 增加 FLAGS_allow_cinn_ops 和 FLAGS_deny_cinn_ops 两个控制标记,用于控制 Paddle 训练中使用 CINN 算子代替原生算子的种类。(#36842)

  • 性能优化:

    • 速度优化

      • 优化 CinnCacheKey 的计算耗时。(#37786, #37317)

      • 缓存 CINN 编译子图的变量 scope,降低运行参数构造开销。(#37983)

      • 子图编译时接入 CINN 自动调优,支持通过 flag 启用,便于后续进一步调优训练性能。(#41795)

      • 重构子图编译时对编译结果的正确性校验,避免运行时重复检查,降低调度开销。(#41777)

      • 在 Paddle-CINN 训练功能中默认启用 TransposeFolding 和 GemmRewriter 优化 pass。(#41084)

      • 将 Paddle 中创建的 cuda stream 传入 CINN,使得 Paddle 和 CINN 执行计算时共用同一个 CUDA stream。(#37337)

      • 将 CINN 优化 pass 应用逻辑从 Paddle 中移动到 CINN 中。(#42047, #42070)

    • 显存优化

      • 为 cinn_launch op 添加 NoNeedBufferVars 声明无须 buffer 的输入变量列表,以便显存优化提前释放无效空间。(#38367)

      • 传入子图外部变量的引用计数信息,便于 cinn_launch 内子图复用显存优化 pass,降低使用 CINN 的显存开销。(#39209, #39622)

      • 添加 CINN 编译生成的可执行指令集合转换为 Paddle Graph 的功能,支持复用 Paddle 调度器及显存优化 pass,进一步降低使用 CINN 的显存开销。(#39724, #39911)

      • 添加 cinn_instruction_run op 的 Kernel 支持根据编译结果推断的数据类型动态申请空间。(#40920)

  • 问题修复:

    • 修复并优化 CINN 子图的生成逻辑。(#36503)

    • 修复 Paddle-CINN 不支持无输入子图的问题。(#40814)

    • 修复由于 CINN 无法处理 batch_norm 等算子中存在的无用输出而报错的问题。(#36996)

    • 修复若干 CINN 子图划分以及符号化中存在的 bug,解决 Paddle 训练接入 CINN 全流程打通过程中遇到的问题。(#36739, #36698 )

    • CINN 尚不支持控制流,添加遇控制流跳过的逻辑。(#40812)

其他

  • 模型量化

    • 升级量化存储格式,并统一动、静态图量化格式。(#41041)

    • 新增离线量化方法:EMD、Adaround。(#40421, #38460)

    • 支持更多 op 适配模 op 量化。(#40083)

    • 支持控制流中的 OP 量化。(#37498)

    • 新增支持 matmul_v2 OP 的量化。(#36469)

    • 新增支持量化后的 matmul_v2 在 TensorRT 上的推理。(#36594)

  • 显存优化

    • 实现多 stream 安全 Allocator,支持在多 stream 异步计算场景下安全高效地使用显存。(#37290)

    • 新增运行时显存监控模块(paddle.device.cuda.max_memory_allocated, paddle.device.cuda.max_memory_reserved, paddle.device.cuda.memory_allocated and paddle.device.cuda.memory_reserved),支持高性能地实时统计显存数据。(#38657)

    • 实现 CPU-GPU 统一内存寻址(CUDA Managed Memory),支持在显存受限场景下训练超大模型。(#39075)

    • C++底层新增 GetBasePtr 接口,用来获取设备接口 CUDAMalloc 创建的设备地址。(#37978)

    • 减少 AutoGrowth Allocator 中 free blocks 的数量,提升显存分配性能。(#35732)

    • 对于 initializer.Normalinitializer.Constant 数据类型是 FP16 的 Tensor 去除多余的 float32 临时 Tensor 以及 cast,节省 2 倍显存。(#38818)

  • 动态图高阶导数组网测试

    • 为动态图增加三阶导数组网测试,以及 Broadcast 情况的测试。(#36814, #37377)

  • 自定义 op:支持 ROCm(HIP) 平台进行自定义 op 注册。(#36771)

  • Cost Model:增加基于运行 Profile 的 Cost Model。(#35774)

  • 提供定制化层 (nn.Layer)的自动稀疏训练支持,让用戶可根据自定义的 Prune 函数来对其设计的层进行稀疏剪枝。(#40253)

  • 新增字符串张量底层数据结构表示,使框架具备字符串张量表示和计算的能力。(#39830, #40992)

  • 新增或者升级 oneDNN FP32/int8/bfloat16 Kernel,包括:

  • 增加基于 SSD-内存-GPU 显存 的 3 级存储图检索引擎,支持大规模图神经网络训练。(#42472, #42321, #42027)

  • 增加异构多云训练通信模块 switch,实现 Send/Recv 接口,支持多云异构通信。(#40965 40911)

(2)功能优化

API

  • paddle.Model新增支持混合精度训练 O2 模式,即支持原来动/静态图的 Pure FP16 训练模式。(#36441)

  • paddle.nn.Layer 支持 self chain 调用。(#36609)

  • paddle.nn.Layerto方法添加is_distributed属性的设置,保证网络参数转换前后分布式属性保持一致。(#36221)

  • 完善 paddle.nn.Layerto 方法的参数转换逻辑,降低转换过程占用的峰值显存,提高转换成功率。(#36862)

  • paddle.incubate.graph_send_recv支持设置输出 Tensor 的 shape,有利于减少实际计算过程的显存占用。(#40509)

  • paddle.incubate.segment_sumsegment_meansegment_maxsegment_min 新增 int32、int64 数据类型支持。(#40577)

  • 为 transpose op 新增 bool 类型支持。(#35886)

  • paddle.mm 底层算子从 matmul 切换到 matmul_v2。(#35770)

  • paddle.einsum 支持静态图模式调用,支持未知 shape。(#40360)

  • paddle.nn.functional.margin_cross_entropypaddle.nn.functional.class_center_sample 支持数据并行。(#39852)

  • paddle.nn.functional.grid_sample支持形状为[1]的输入。(#36183)

  • paddle.nn.PRelu 支持 NHWC 数据格式。(#37019)

  • paddle.nn.functional.class_center_sample 支持使用 paddle.seed 固定随机状态。(#38248)

  • paddle.fft 下所有 API 新增 ROCM 后端支持,并优化 CUFFT 后端报错信息。(#36415, #36114)

  • Tensor.getitem 增加对切片部分维度为 0 的功能支持,即允许切片索引结果为空。(#37313)

  • Tensor.setitem 支持 int 和 bool 类型 Tensor 使用 bool 索引。(#37761)

  • paddle.nn.functional.interpolate 支持 nearest 模式时输入 shape 为 5D。(#38868)

  • paddle.nn.Embeddingpaddle.gather 增加 int16 支持。(#40964, #40052)

  • paddle.distributed.spawn添加 CPU 单机数据并行。(#35745, #36758, #36637)

  • 新增depthwise_conv2dMKLDNN 算子。(#38484)

  • paddle.abspaddle.transposepaddle.squeezepaddle.unsqueezepaddle.matmulpaddle.full 静态图数据类型检测中增加复数类型。(#40113)

  • paddle.autograd.PyLayer 支持 tuple/list 类型的参数。(#38146)

  • paddle.autograd.PyLayer 增加检查 inplace 策略下,输入叶子节点的 Tensor 的检查报错机制。(#37931)

  • paddle.autograd.PyLayer 支持 HIP 库。(#38184)

  • paddle.take_along_axispaddle.put_along_axis 支持更多 size 的输入,允许 index 矩阵的 shape size 大于 arr 矩阵的 shape size。(#39072)

  • 优化 API paddle.nn.Pad2D在 replicate 为 0 时的报错信息。(#36510)

  • 支持 API paddle.nn.Pad2D在 tuple 格式的 pad 输入。(#35985)

  • 新增 paddle.distributed.InMemoryDataset 中 tdm_sample API 以支持 TDM 算法中的采样操作。(#37044)

  • 新增对于paddle.jit.save的 Pre-saving Hooks 机制。(#38186)

  • 新增高阶微分相关 API:

    • elementwise_add 增加三阶 Kernel,支持三阶微分的计算。(#36508, #36618)

    • matmul_v2 增加三阶 Kernel,支持三阶微分的计算。(#36459)

    • elementwise_mul 增加三阶 Kernel,支持三阶微分的计算。(#37152)

  • 完善paddle.amp.GradScaler调用 check_finite_and_unscale op 的逻辑,消除该处创建 bool 变量所引入的 cudaMemcpy。(#37770)

  • 新增对 unstack 和 unique op 元素个数为 0 的 Tensor 增加检查。(#36021)

  • 新增支持昆仑 2 的多层、双向 LSTM 功能,完善 RNN 前反向 op,支持时序类模型训练使用。(#42076)

  • 新增支持昆仑 2 的 bce_loss 前反向 op。(#41610)

  • 添加 paddle.linalg.det 的反向实现。(#36013)

IR(Intermediate Representation)

  • 动态图转静态图

    • 优化动转静下 ProgramCache.last 接口行为,使其返回最近使用的 Program,而非最后生成的 Program。(#39541)

    • 优化动转静下 paddle.reshape API 的报错信息,新增推荐用法提示。(#40599)

    • 优化动转静代码转写时 is_api_in_module 函数中异常捕获类型。(#40243)

    • 优化动转静模块报错提示,默认隐藏 warning 信息。(#39730)

    • 增加动转静对于 type hint 语法的支持,提高变量类型分析的准确性。(#39572)

    • 优化 paddle.cond 功能,允许 bool、int 等基本类型支持值相等。(#37888)

    • 优化动转静@to_static 装饰普通函数时,允许切换 train/eval 模式。(#37383)

    • 优化动转静报错栈,突出用户相关代码,减少框架冗余报错栈。(#36741)

    • 移除paddle.cond 返回值中 no_value 占位符。(#36513#36826)

    • 为动转静 run_program op 适配新动态图模式。(#40198, #40355)

    • 新增对于 zip 语法的检查。(#37846)

    • 修复 paddle.signal.framepaddle.signal.stftpaddle.signal.istft 因维度和类型判断错误导致的动转静失败问题。(#40113)

    • 为 mean、pad3d ops 新增注册复数类型 Kernel。(#40113)

混合精度训练

  • 为 amp 添加 GPU Compute Capability 环境检查,对无法产生训练加速效果的 GPU 环境添加使用警告。(#38086)

  • 添加paddle.amp.decoratepaddle.DataParallel同时使用时调用顺序的检查。(#38785)

分布式训练

  • 分布式训练基础功能

    • 优化 Fleet API 和 DistributedStrategy 配置以使用动态图并行功能,提升动态图易用性。(#40408)

    • 优化动态图混合并行 HybridParallelClipGrad 策略,支持 4D 混合并行 + Pure FP16 训练。(#36237, #36555)

    • 重构动态图数据并行策略,以支持新动态图和新通信库功能。(#40389, #40593, #40836, #41119, #41413, #39987)

    • 为 fused_attention op 支持分布式张量模型并行。(#40101)

    • 为 fused_feedforward op 支持分布式张量模型并行。(#40160)

  • 图检索引擎

    • 优化图引擎的图采样接口返回的数据格式,采样速度提升 3 倍。(#37315)

    • 减少图引擎线程量以提升性能。(#37098)

    • 优化图引擎数据传输以提升性能。(#37341)

    • 利用模型中 embedding op 的拓扑关系,优化 embedding op 的合并逻辑以提升性能。(#35942)

  • 通信库:重构通信库,提升通信库的易扩展性和二次开发性,支持异构通信。(#41398, #39720, #40911, #40579, #40629, #40437, #40430, #40228, #40181, #40100, #40097, #39892, #39384, #39737, #40040)

  • 支持 paddle.incubate.distributed.models.moe中 MoE 相关接口(moe.GShardGate, moe.BaseGate, moe.SwitchGate, moe.MoELayer, moe.ClipGradForMOEByGlobalNorm )的公开。(#42300)

  • 修复 paddle.incubate.distributed.models.moe.MoELayer 中使用 recomputing 可能报错的问题。(#42128)

  • 修复新动态图流水线并行因为数据类型不同导致的报错 (#41937 #42053)

  • 修复新动态图张量模型并行因为数据类型不同导致的报错 (#41960)

自定义算子

  • 增强 C++自定义算子机制对二阶反向算子编写功能,支持为二阶反向算子的梯度输入变量添加后缀作为输出使用。(#41781)

  • 移除 Tensor API 成员方法中对废弃的枚举类型 PlaceType 的使用,进行相应兼容处理,并添加 deprecated warning 提示。(#41882)

  • 为原 Tensor API 的一系列废弃接口,包括不完整构造函数、reshape、mutable_data、copy_to 方法添加 deprecated warning 提示。(#41882)

其他

  • 报错调试优化

    • 优化 cross_entropy op 对 label 的边界检查报错信息。(#40001)

    • 为动态图添加 op 执行时infer_shapecompute方法的 profile record,用于在 timeline 中展示其开销。(#39023)

    • 替换了 Windows 下容易出现未知异常的 pybind::index_error 报错提示。(#40538)

    • 添加用户 scatter op 越界检查的报错信息。(#37429)

  • 下载工具:针对paddle.utils.download.get_path_from_url中解压含多文件目录速度慢的问题,将原先循环遍历目录下文件逐一解压的方式替换为在目录上调用 extractall 一次解压的方式,解压速度大幅提升。(#37311)

  • 加速 fake_quantize_range_abs_maxfake_quantize_abs_maxfake_quantize_dequantize_abs_maxfake_quantize_moving_average_abs_max 等量化训练。(#40491)

(3)性能优化

分布式训练

算子优化

  • 优化 FasterTokenizer 性能,性能与优化前相比提升 10%。(#36701)

  • 优化 index_select 反向计算,性能较优化前有 3.7~25.2 倍提升。(#37055)

  • 优化 paddle.nn.ClipByGlobalNorm 的性能,以 10*10 的 paddle.nn.Linear 为例,性能与优化前相比提升 30%左右。(#38209)

  • 优化 pnormaxis 维度极大或极小情况下的性能,前向速度提升 31~96 倍,反向速度提升 1.1~19 倍。(#37685, #38215, #39011)

  • 优化 softmax 前、反向性能,对于 axis!=-1 的配置加速比为 2 倍左右。(#38602, #38609, #32387, #37927)

  • 优化 log_softmax 前、反向性能,对于 axis!=-1的配置加速比为 6~20 倍左右。(#38992, #40612)

  • 优化 softmax_with_cross_entropy 前、反向性能,对于 hard_label 的配置加速比为 1.3 倍左右。(#39553, #40424, #40643)

  • 优化 top_k 性能,对于一维且 k 较大时(k=5000)的配置加速比为 22 倍以上。(#40941)

  • 优化 elementwise_mul 反向计算,较优化前有 1.85~12.16 倍性能提升。(#37728)

  • 优化 elementwise_min 反向和 elementwise_max 反向,较优化前打平或有 1.05~18.75 倍性能提升。(#38236, #37906)

  • 优化 nearest_interp 前向和反向计算,前向较优化前性能有 1.5~2.3 倍提升;反向性能较优化前有 60%~1.8 倍提升。(#38528, #39067)

  • 优化 bilinear_interp 前向和反向计算,前向较优化前性能有 0.4~2.3 倍提升;反向性能较优化前有 10%~30%提升。(#39243, #39423)

  • 优化 dropout 前向和反向计算,性能提升约 20%。(#39795, #38859, #38279, #40053)

  • 优化 grid_sampler前向和反向计算,前向较优化前性能有 10%~30%提升;反向性能较优化前有 10%~60%提升。(#39751)

  • 优化 group_norm 前向和反向计算,前向性能提升 1.04~2.35 倍,反向性能提升 1.12~1.18 倍。(#39944, #40657, #39596)

  • 优化 conv1d 前向和反向计算,前向性能提升 1.00~2.01 倍,反向性能提升 1.01~474.56 倍。(#38425)

  • 优化 elementwise_div 反向计算,反向性能提升 1.02~29.25 倍。(#38044)

  • 优化 gelu 前向和反向计算,前向性能提升 1.13~1.43 倍,反向性能提升 1.10~1.55 倍。(#38188, #38263)

  • 优化 elementwise_sub 反向计算,反向性能提升 1.04~15.64 倍。(#37754)

  • 优化 flip 在输入一维数据时前向性能,性能提升 100%。(#37825)

  • 优化 layer_norm 前向和反向计算,前向较优化前提升 2-5 倍,反向较优化前提升 20%~50%。(#39167, #39247)

  • 优化 embedding 前向和反向计算,前向较优化前最大提升 1.51 倍,反向较优化前提升 1.03~7.79 倍。(#39856, #39886)

  • 优化 gelu FP16 前向和反向计算,前向较优化前提升 9%~12%,反向较优化前提升 2%~9%。(#38980)

  • 移除 gather_nd前反向算子中的 CPU -> GPU 显式数据传输操作,移除 index_select 前反向算子中的显式同步操作,将 scatter_nd 中的 GPU -> GPU 数据传输由同步操作改成异步操作。(#40933)

  • 优化 Lars optimzier 计算,优化后 Resnet50 PF16 模型训练性能较优化前提升 5.1%。(#35652, #35476)

  • 优化 AvgPool2dGrad 计算,优化后性能较优化前提升 2.6 倍。(#35389)

  • 优化 Elementwise 类计算对于多元输出的功能支持,优化后计算性能较优化前提升最多可达 15%。(#38329, #38410)

  • 优化 Categoricalprobs计算,简化计算逻辑,性能提升 4 ~ 5 倍。(#42178)

  • paddle.sum 性能优化,性能相比优化前提升约 20%。(#42309)

自动调优

新增训练全流程硬件感知性能自动调优功能,在图像分类、分割、检测和图像生成任务上与模型默认参数配置下的性能相比提升约 3%~50%以上。通过 paddle.incubate.autotune.set_config API 设置自动调优状态,当前默认关闭。自动调优具体包括三个层次:

  • paddle.io.DataLoader 新增自动调优功能,根据训练数据和设备资源选择最佳的模型 num_workers。(#42004)

  • 新增混合精度训练数据布局自动调优功能,根据设备类型和数据类型选择最佳数据布局,并在运行时自动转换。(#41964)

  • 新增 Conv 运行时所需 workspace size 阈值自动调整功能,根据 GPU 当前可申请显存资源情况来自动设置;基于通用的 AlgorithmCache 设计和 Kernel 计时组件,新增 Conv cuDNN 算法自动选择功能,支持数据变长模型。(#41833)

调度优化

  • 移除 paddle.nn.ClipGradByGlobalNorm 中的 CudaStreamSync 隐藏操作,减少执行时的调度开销,在 ptb 模型上有 5%的性能提升。(#42170)

  • 优化一系列底层数据结构及原动态图执行体系中的细节实现,提升原动态图的调度性能。(#42010, #42171, #42224, #42256, #42306, #42329, #42340, #42368, #42425)

  • 简化 paddle.distribution.Categorical的 probs 计算逻辑,提升性能 4 到 5 倍。(#42178)

(4)问题修复

API

  • 修复 paddle.sum 输入参数类型和输出参数类型不一致且 axis 轴对应的 reduce 元素个数为 1 时,输出类型错误问题。(#36123)

  • 修复 paddle.flops 在 layer 输出类型为 tuple 时的 AttributeError。(#38850)

  • 修复 paddle.diag 因为没有反向 Kernel 而无法传播梯度的问题。(#40447)

  • 修复 paddle.sort 输入存在 NaN 值排序错误。(#41070)

  • 修复 paddle.full_like 输入存在 Inf 值构建 Tensor 错误。(#40232)

  • 修复 paddle.strided_slice 在输入 starts 中数据小于 -rank 时,strided_slice 结果与 slice 不一致的 bug。(#39066)

  • 修复 max_pool 系列算子在返回 index 时 infer_shape 计算错误的问题,受影响的 API 有 paddle.nn.functional.max_pool1d/2d/3d, paddle.nn.functional.adaptive_max_pool1d/2d/3d, paddle.nn.MaxPool1D/2D/3D, paddle.nn.AdaptiveMaxPool1D/2D/3D。(#40139)

  • 修复 max_pool 系列算子返回的 pooling_mask 的 dtype 错误的问题,现在 pooling_mask 的 dtype 为 int32,受影响的 API 有 paddle.nn.functional.max_pool1d/2d/3d, paddle.nn.functional.adaptive_max_pool1d/2d/3d, paddle.nn.MaxPool1D/2D/3D, paddle.nn.AdaptiveMaxPool1D/2D/3D。(#39314)

  • 修复 paddle.shape 默认存在反向梯度导致计算错误的问题。(#37340)

  • 修复 paddle.nn.Layerto 方法同时转换 dtype 和 place 存在的 bug。(#37007)

  • 修复 paddle.amp.decorate 无法对非叶子网络层的参数改写为 FP16 的 bug。(#38402)

  • 修复 paddle.amp.decoratepaddle.nn.BatchNorm1Dpaddle.nn.BatchNorm2Dpaddle.nn.BatchNorm3D 非输入参数改写为 FP16 的 bug。(#38541)

  • 修复 paddle.amp.decoratepaddle.nn.SyncBatchNorm 非输入参数改写为 FP16 的 bug。(#40943)

  • 修复 paddle.nn.Layer.to 当中多余的 warning。(#36700)

  • 修复 paddle.nn.RNN 在控制流下使用报错的问题。(#41162)

  • 修复 paddle.to_tensor 无法指定 Tensor 的 CUDA Place 的问题。(#39662)

  • 修复 paddle.nn.Identity 没有公开的问题。(#39615)

  • 修复动态图重构后,fill_zero_ inplace API 的输入在 CUDAPinned Place 上时,输出值不正确的 bug。(#41229)

  • 动态图重构后,修复使用 append op 的方式调用 assign op 导致输出 Tensor 的 inplace version 值不正确的 bug,修改为使用 _C_ops 的方式调用 assign op。(#41118)

  • 移除 elementwise_add 三阶 Kernel 中不合理的代码,修复组网过程未初始化问题。(#36618)

  • 修复 conv2d 执行 cuDNN Kernel 时属性缺失的问题。(#38827)

  • 修复 multiclass_nms3 输出 shape 不正确的问题。(#40059)

  • 修复 yolo_box 输出 shape 不正确的问题。(#40056)

  • 修复高阶微分 gradients 接口在指定 target_grad 时未按预期生效的问题。(#40940)

  • 修复动态图 op_BatchNormBase 基类中修改了 default_dtype,导致后续组网参数类型错误的问题,受影响的 API 有 paddle.nn.BatchNorm1Dpaddle.nn.BatchNorm2Dpaddle.nn.BatchNorm3Dpaddle.nn.SyncBatchNorm。具体原因是当 get_default_dtype() == 'float16' 时,通过 set_default_dtype('float32')修改默认参数数据类型,动态图组网的参数类型是通过 default_dtype 来创建的,因此当默认参数类型被修改后导致后续的组网参数类型错误。(#36376)

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

  • 修复静态图模式下,paddle.static.nn.prelu 对于 NHWC 输入格式且 mode==channel 权重的 shape 错误问题。(#38310)

  • 修复多机情况下,paddle.nn.functional.class_center_sample CUDA 种子设置 bug。(#38815)

  • 修复 paddle.nn.functional.one_hot 在输入不正确参数时,CUDA 版本无法正确报错的问题。(#41335)

  • 修复 DCU 设备上回收显存的 callback 未及时触发导致显存 OOM 的问题。(#40445)

  • 修复 setitem 索引赋值反向梯度传递异常以及动态图部分场景下 inplace 逻辑处理异常的问题。(#37023, #38298)

  • 修复动转静下 Tensor array 使用 Slice 索引异常的问题。(#39251)

  • 修复 paddle.Tensor.register_hook 接口使用时临时变量未析构,从而导致内存或显存泄漏的问题。(#40716)

  • 修复 Tensor.getitem 当索引是全为 False 的 bool Tensor 时无法取值的问题。(#41297)

  • 修复 Tensor.getitem 当索引是 bool scalar Tensor 时无法取值的问题。(#40829)

  • 修复 paddle.index_select 在 index 为 0-shape Tensor 时报错的问题。(#41383)

  • 修复 paddle.index_selectpaddle.index_sample 申请的 GPU 线程数超过有限机器资源时报错的问题。(#41127, #37816, #39736, #41563)

  • 修复 ReduceConfig、elemwise_grad、gather、gather_nd、scatter ops 申请 GPU 线程数超过有限机器资源时报错的问题。(#40813, #41127)

  • 修复 Kernel Primitive API 中 ReadData,ReadDataBc,ReadDataReduce 在 NX != 1 时访存越界的问题。(#36373)

  • 修复 IndexRandom 数据类型错误导致数据溢出计算结果异常的问题。(#39867, #39891)

  • 修复 reduce op 在 reduce_num = 1 计算结果返回错误的问题。(#38771)

  • 修复 reduce op 在 HIP 环境下 reduce 中间维度出现访存越界的问题。(#41273)

  • 修复 matmul op 两个 FP16 一维向量计算时 Kernel 无法正常释放的问题。

  • 修复部分算子在 CUDA 上因整型计算溢出导致的问题,包括:bernoulli、gaussian_random、gumbel_softmax、multinomial、truncated_gaussian_random、uniform_random_inplace、uniform_random ops。(#37670)

  • 修复 paddle.nn.Sequential 在 for 循环遍历 sublayers 时会报 KeyError 错误的 bug。(#39372)

  • 修复 paddle.nn.functional.unfold 在静态图下编译时检查 shape 错误的 bug。(#38907, #38819)

  • 修复静态图使用 dropout 时如果指定了 axis 后会报错的问题。(#37223)

  • 迁移 paddle.nn.MultiHeadAttention中 matmul 算子到 matmul_v2 算子。(#36222)

  • 修复 paddle.nn.functional.label_smooth在输入为空 Tensor 时抛出 FPE 的问题。(#35861)

  • 修复 reshape op 空 Tensor 形变问题, 支持将空 Tensor rehape 成[-1]。(#36087)

  • 修复 fill_diagonal参数 offset 非零时会造成修改值跨行问题。(#36212)

  • 修改动态图模式下 range op 返回 stop gradient 设置成 True。(#37486)

  • 修复 Lamb 优化器当 Beta1Pow 和 Beta2Pow 在 GPU 上时更新错误的 bug。(#38518)

  • 修复 conv2d 算子 FLAGS_cudnn_deterministic 设置不生效的问题。(#37173)

  • 修复因早期版本的 cufft 没有定义 CUFFT_VERSION 引发的问题。(#37312)

  • 修复 paddle.ifftshit, paddle.fftshift 计算错误问题。(#36834, #36748)

  • 修复 paddle.fft 系列 API 中的 axis 计算错误。(#36321)

  • 修复 batch_norm_grad op 在 FP16 数据类型时输出数据类型注册的 bug,该 bug 会导致部分场景下编译失败,并且对 FP16 计算精度会有一定影响。(#42461)

  • 修复 paddle.nn.functional.pad API 在模型动转静时,padding 为 Tensor 条件下的 Infershape 信息错误问题。(#42414)

  • 修复 paddle.distribution.StickBreakingTransform 输入维度超过 2 时异常的问题。(#41762)

  • 修复 fused_attention op 中 QK^T 计算出 nan/inf 的问题。(#42032)

  • 修复 fused_attention op 中 FusedResidualDropoutBias 在 V100 上计算出 nan/inf 问题。(#42398)

  • 修复 full_like op 在执行时引入的多余的 data transform 问题。(#41973)

  • 修复 p_norm op 在 GPU 环境上计算 nan 的问题。(#41804)

  • 修复 split op 在参数 sections 存在为 0 的 size 情况下,段错误的问题。(#41755)

  • 修复 6 个 elementwise op(pow、complex、divide_double、multiply_double、fmax、fmin)在需要 broadcast 的情况下,多卡训练时报 Place(gpu:0) 不支持的问题。(#42332)

  • 修复 import paddle 时由于 PIL 版本升级导致的废弃接口报 warning 的问题。(#42307)

  • 修复静态图下 paddle.linalg.matrix_rank不支持 tol 为 FP64 Tensor 的问题。(#42085)

IR(Intermediate Representation)

  • 动态图转静态图

    • 修复 tensor_array 搭配控制流使用时,在反向梯度累加时存在的类型推导错误问题。(#39585, #39689)

    • 修复动转静 AMP 训练时参数梯度类型未被正确设置的问题。(#40938)

    • 修复代码中存在错位注释时,动转静代码解析报错的问题。(#39035, #38003)

    • 修复动转静代码中调用非 forward 函数时,Tensor 未被正确转化为 Variable 的问题。(#37296, #38540)

    • 修复动转静代码转写时 paddle 被错误地作为变量传递的问题。(#37999)

    • 修复模型动转静后调用 paddle.flops 时模型参数统计错误的问题。(#36852)

    • 修复使用 paddle.jit.save/load 接口加载模型后,在 train 模式和 no_grad 上下文中,显存会一直增长的问题。(#36434)

    • 添加在 convert_call 对 generator function 转换时的警告。(#35369)

    • 修复 run_program op 依赖分析的问题。(#38470)

    • 修复控制流 For 中返回单值时代码转换的问题。(#40683)

    • 修复控制流 cond 的输入包含 LoDTensorArray 时,生成反向 op 会报错的问题。(#39585)

    • 修复 padddle.jit.save在导出动转静模型时丢失顶层 Layer 的 forward_pre_hook 和 forward_post_hook 的问题。(#42273)

    • 修复 paddle.expand中 shape 参数包含 Tensor 在动转静时会转换报错的问题。(#41973)

分布式训练

  • 分布式训练基础功能

    • 修复分布式多机训练时,端口报错的问题。(#37274)

    • 修复 brpc 编译依赖问题。(#37064)

    • 修复 Fleet 启动时,由于 tcp 自连接产生的端口被占用的问题。(#38174)

    • 修复数据并行下,由于 FP16 参数在多卡下初始化不一致,导致精度下降的问题。(#38838, #38563, #38405)

    • 修复数据并行下,由于 FP16 梯度同步时,没有除以卡数,导致精度下降的问题。(#38378)

  • 动态图混合并行

    • 修复在混合并行下,通过使用新 update 接口,FP16 模式不更新参数的问题。(#36017)

  • 静态图混合并行

    • 修复分布式 dp 模式下 grad merge 与 ClipGradientByGlobalNorm 不兼容的问题。(#36334)

    • 修复混合并行下,张量模型并行的非分布式参数在初始化阶段未被广播,导致各卡非分布式参数不一致的问题。(#36186)

    • 修复 sharding 开启 offload 时,sharding 的 save_persistables 接口未保存 FP16 参数和 offload 持久化变量的问题。(#40477)

    • 修复开启 sharding 训练时,ema 参数在非 0 号卡上无法保存的问题。(#39860)

    • 修复 FC 按照列切分梯度计算错误的问题。(#38724)

    • 修复 DistributedStrategy 设置为 without_graph_optimizer 时和 rnn 一起使用报错的问题。(#36176)

  • GPUPS 参数服务器训练

    • 修复 GPUPS 宏定义触发 CPU 分支编译问题。(#37248)

    • 修复 GPUPS 流水线训练时在保存 delta 和 pullsparse 并发时引发的偶发报错问题。(#37233)

    • 修复 HDFSClient 查询目录未返回全路径,引发下载报错问题。(#36590)

    • 修复 GPUPS 流水线训练时拉取老参数问题。(#36512)

    • 修复 GPUPS 多流 allocation 问题。(#37476)

    • 修复 GPUPS pybind 出 core 的问题。(#37287)

其他

  • 修复动态图量化训练保存模型时 clip_extra 的问题。(#38323)

  • 修复动态图量化训练 abs_max scale 初始化的问题。(#39307)

  • 修复动态图量化训练保存模型节点异常的问题。(#38102, #38012)

  • 修复离线量化 flatten op 输出错误问题。(#37722)

  • 修复了反量化 matmul op 时,维度对不上的问题。(#36982)

  • 修复了量化无权重的 matmul_v2 时,错误添加量化 op 的问题。(#36593)

  • 修复 conv op channel wise 量化在保存模型时 quant_axis 属性保存错误。(#39054)

  • 修复 ChannelWise 量化训练速度慢的问题。(#40772)

  • 修复量化训练初始化为 0 的 Tensor 出 NAN 的问题。(#36762)

  • 修复多线程场景下混合精度 amp_level 设置错误问题。(#39198)

  • 修复混合精度训练与 PyLayer,Recompute 等一起使用时,PyLayer 和 Recompute 中未正确设置混合精度的问题。(#39950, #40042)

  • 修复了 Mac 下编译自定义算子时 D_GLIBCXX_USE_CXX11_ABI 未生效的问题。(#37878)

  • 修复 initializer 相关 API 在 block=None 时动静行为不统一的问题。(#37827)

  • 修复 python3.6 环境下没有 fluid 模块的 bug。(#35862)

  • 修复优化器 paddle.optimizer.Adamw 错误调用 adam op 的 bug。(#36028)

  • 修复 multi tensor 策略下 paddle.optimizer.Momentum 优化器参数 regularizer 属性为 None 时的逻辑错误。(#38344)

  • 修复 multi tensor 策略下 paddle.optimizer.Momentumpaddle.optimizer.Adam 优化器会对 multi_precision 属性进行修改的错误。(#38991)

  • 修复最终态 API amp 与 optional 类型 Tensor 组合使用的代码编译错误。(#40980)

  • 修复 paddle+lite+xpu 预测库调用 lite CPU 预测时会报错的 bug,修复 paddle+lite(without NNAdapter) 编译时会报错的 bug。(#37449)

  • 修复 Debug 编译模式下 LoDTensorArray 因 Pybind11 绑定不一致导致 crash 的 bug。(#37954)

  • 修复 shape 参数为 Tensor 和 int 构成列表的极端情况下,无法正确构建 Tensor 的 bug。(#38284)

  • 修复 paddle.optimizer.AdamW API 兼容性问题。(#37905)

  • 修复 _InstanceNormBase 中 extra_repr 的返回错误。(#38537)

  • 修复联编开启 -DWITH_DISTRIBUTED 生成 Paddle Inference 缺少符号 paddle::distributed::TensorTable 的问题。(#41128)

  • matmul_v2 op 新增 shape check,在 shape 中存在 0 值进行信息报错。(#35791)

  • 修复动态图 recompute 对于没有梯度输入提示信息反复打印,改成用 warning 只打印一次的方式。(#38293)

  • 修复 gelu op 在视觉模型中训练后期在验证集上精度低的问题。(#38450)

  • 修复 adamw op 在数值计算上误差问题。(#37746)

  • 补充 sparse_momentum _C_ops 接口 MasterParam 和 MasterParamOut 参数。(#39969)

  • 修复 python3.6 环境下没有 distributed 模块的 bug。(#35848)

  • 修复 eigh 单元测试数据初始化问题。(#39568)

  • 修复 eigvalsh 单元测试数据初始化问题。(#39841)

  • 修复 segment op 在 V100 上寄存器使用过多导致不能正常运行的问题。(#38113)

  • 修复 conv 相关算子稀疏化维度错误的问题。(#36054)

  • 提供自动稀疏训练(Automatic SParsity)静态图相关功能 Alias 至 Paddle.static.sparsity。(#36525)

  • 修复 divide op 整数除法还是整数的 bug。(#40890)

  • 修复 paddle.multiplex 候选 Tensor 大小为 0 崩溃问题。(#34972)

  • 修复 paddle.kl_div 参数 reduction 给定情况下速度异常的问题。(#37283)

  • 修复 Cifar 数据集加载 data source 无序的问题。(#37272)

  • 修复 ProgressBar 类中 loss 从 uint16 到 float 的转换。(#39231)

  • 修复 ShareBufferWith 共享数据类型的问题。(#37464, #37247)

  • 修复 paddle.io.DataLoader 使用 IterableDataset 并且 num_workers>0 时的性能问题。(#40541)

  • 修复 paddle.vision.ops.yolo_loss 动态图返回值不全的问题。(#40185)

  • 移出 paddle.io.BatchSampler 对输入参数 dataset 需要是 paddle.io.Dataset 类型的限制,扩大对用户自定义数据集的支持。(#40184)

  • 修复 paddle.summary 报错 op_flops 不存在的问题。(#36489)

  • 修复 lars_momentum op 在 lars_weight_decay=0 时公式错误的问题。(#40892)

  • 修复 optimize-offload 无法保存 presistable var 的问题。(#36433)

  • 修复 optimizer-offload 不支持 adamw op type 的问题。(#36432)

  • 修复多线程场景下,Tracer 中 enable_program_desc_tracing_数据不安全的问题。(#39776)

  • 修复模型读取时模型档案大小未初始化的问题。(#40518)

  • 修复 Expand op 逻辑 bug,当输入 Tensor X 的维度,小于要拓展的 shape 时,可能导致取得 Out.Shape 是错误的。(#38677)

  • 修复 Expand_As op 只取 y.shape,而没有 Y 变量输入时,导致的动转静报错。(#38677)

  • 修复 Expand_As op 计算输出 shape 时逻辑的错误。(#38677)

  • 修复 core.VarDesc.VarType.STRINGS 类型的变量获取 lod_level 属性报错的问题,并且设置其 lod_level 为 None。(#39077)

  • 修复框架功能 PyLayer 不支持不同 dtype 的问题。(#37974)

  • 修复了学习率衰减 API paddle.optimizer.lr.PolynomialDecay 的零除问题。(#38782)

  • 修复调用 DisableGlogInfo() 接口后依旧残留部分日志的问题。(#36356)

  • 修复 SimpleRNN、GRU 和 LSTM API CPU 训练时多层 RNN(dropout 设置为 0 时)反向计算出错的问题。(#37080)

  • 为 cufft 和 hipfft 后端的 fft 添加了 cache。(#36646)

  • 使 paddle.roll 的 shifts 参数支持传入 Tensor。(#36727)

  • 为 fft 添加 onemkl 作为可选的计算后端。(#36414)

  • 修复 mamtul_v2 和 elementwise_div 两个 op 在 bfloat16 类型下的精度问题。(#42479)

  • 修复显存回收时 LoDTensorArray 只清理内部 Tensor 而未清空 Array 导致的下个 step 可能出错的问题。(#42398)

4. 部署方向(Paddle Inference)

(1)新增特性

新增 API

  • 增加 Java API,Java 开发者可以通过简单灵活的接口实现在服务端和云端的高性能推理。(#37162)

  • 增加 GetTrtCompileVersionGetTrtRuntimeVersion 接口,用于获取 TensorRT 版本信息。(#36429)

  • 增加 ShareExternalData 接口,避免推理时对输入数据进行内存拷贝。(#39809)

新增功能

  • 新增 ONNX Runtime 后端支持,当前集成版本只支持 CPU。(#39988, #40561)

  • 基于 Paddle Lite 子图方式,新增昇腾 310 推理支持。(#35226)

  • 新增原生 GPU FP16 推理功能。(#40531)

  • switch_ir_debug 接口增加 dump 模型的功能。(#36581)

  • 新增 TensorRT config 的配置接口:void UpdateConfigInterleaved(paddle_infer::Config* c, bool with_interleaved),用于 int8 量化推理中特殊的数据排布。(#38884)

  • log 中增加 TensorRT inspector 输出信息,仅在 TensorRT 8.2 及以上版本有效。(#38362#38200))

  • 增加 TensorRT ASP 稀疏推理支持。(#36413)

(2)底层优化

CPU 性能优化

  • 优化 MKLDNN 的缓存机制。(#38336, #36980, #36695)

  • 新增 matmul_scale_fuse pass。(#37962)

  • 新增 MKLDNN reshape_transpose_matmul_v2_mkldnn_fuse_pass。(#37847, #40948)

  • 新增 MKLDNN conv_hard_sigmoid_mkldnn_fuse_pass。(#36869)

  • 新增 MKLDNN matmul_v2_transpose_reshape_fuse_pass。(#36481)

  • 新增 MKLDNN softplus_activation_mkldnn_fuse_pass。(#36657)

  • 新增 MKLDNN elt_act_mkldnn_fuse_pass。(#36541)

  • 新增 MKLDNN mish 算子及 conv_mish_mkldnn_fuse_pass。(#38623)

GPU 性能优化

  • 将推理默认的显存分配策略由 naive_best_fit 变更为 auto_growth,解决部分模型占满 GPU 显存问题。(#41491)

  • 支持 gelu、FC+gelu ops 使用 TensorRT 推理。(#38399)合作团队

  • 支持 deformable_conv 在静态 shape 下使用 TensorRT 推理。(#36612 #36850 #37345)

  • 支持 nearest_interp_v2 op 使用 TensorRT 推理。(#34126)

  • 增加 yolo_boxTensorRT plugin,支持输入参数 iou_awareiou_aware_factor,使推理计算得到的 IoU 作为置信度的因子。(#34128)

  • 支持 elementwise_subelementwise_div 调用 TensorRT 推理。(#40806 #41253)

  • 支持 multiclass_nms3 使用 TensorRT 推理。(#41181 #41344)

  • 支持 flatten_contiguous_rang op 使用 TensorRT 推理。(#38922)

  • 支持 pool2d 属性 padding 的维度为 4、global_poolingceil_mode 为 True 情况下使用 TensorRT 推理。(#39545)

  • 支持 batch_norm 和 elementwise_add 为 5 维时使用 TensorRT 推理。(#36446)

  • 新增 pool3d 使用 TensorRT 推理。(#36545, #36783)

  • 增加 reduce int32 和 float 类型使用 TensorRT 推理,增加 reduce_mean GPU 算子 int32、int64 注册。(#39088)

  • 修改 MatmulV2ToMul pass,修改限定条件(不支持广播)和 op_teller 映射条件。(#36652)

  • 增加 TenorRT plugin 接口 AddPluginV2IOExt 的支持。(#36493)

  • 增加 roi_align op 中 aligned 属性并支持 TensorRT 推理。(#38905)

  • 增加 concat 属性 axis = -1 时支持 TensorRT 推理。(#39096)

  • 新增 TensorRT plugin :preln_emb_eltwise_layernorm、 preln_skip_la、rnorm ops, 用于 ERNIE 类模型性能优化。(#39570)

  • 新增 TensorRT fuse pass:preln_embedding_eltwise_layernorm_fuse_pass, preln_skip_layernorm_fuse_pass,用于 ERNIE 类模型性能优化。(#39508)

  • 将 matmul 融合相关的 pass 基于不同的后端(GPU、CPU、TensorRT)拆开,支持 FC 权重的转置功能。(#39369)

  • 新增 roll、strided_slice、slice op 在动态 shape 的情况下对 TensorRT 的支持。(#41913, #41573, #41467)

  • 新增 div op 对 TensorRT 的支持。(#41243)

  • 量化支持

    • PostTrainingQuantization API 新增支持paddle.io.DataLoader 对象或者 Python Generator的输入。(#38686)

    • ERNIE 全量化模型推理支持 interleaved 数据排布。(#39424)

    • 支持 PaddleSlim 新量化模型格式推理。(#41049)

    • 新增 matmul int8 量化的推理 op converter 和 plugin。(#37285)

    • 新增判断模型所有 op 能否支持 int8 量化的 pass。(#36042)

    • 支持 multihead attention 非变长分支中 FC 部分的量化推理。(#39660)

昇腾 NPU 相关功能

    • 重构 shape 算子前向计算逻辑,支持在 NPU 上执行。(#39613)

    • 重构 reshape 算子前向计算逻辑,支持 ShapeTensor 输入。(#38748)

    • 模型权重加载时精度类型统一。(#39160)

(3)问题修复

框架及 API 修复

  • 修复保存静态图时模型剪裁的问题。(#37579)

  • C API 增加对的字符串的封装 PD_Cstr,并提供构造和析构的方式,避免用户直接使用 C 运行时库来析构字符串。(#38667)

  • 修复预测时内存复用的逻辑问题。(#37324)

  • 修复多线程下内存复用报错问题。(#37894)

  • 在没有权重文件时,允许传递空字符串进行推理。(#38579)

  • 修复开启 TensorRT dynamic shape 后不支持 clone 问题。(#38520)

  • 修复开启 TensorRT dynamic shape 后多线程 clone 报错问题。(#40067)

  • 修复 TensorRT engine 析构问题。(#35842, #35938)

  • lite xpu 接口修复无法选择 xpu 卡的问题。(#36610)

  • TensorRT 动态 shape 参数自动生成接口增加文件存在性检查。(#36628)

  • 修复 MKLDNN 不支持 conv3d 的问题。(#42055)

后端能力修复

  • 修复预测时 cuDNN 默认算法选择配置,使用非 deterministic 策略。(#41491)

  • 修复 deformable_conv op 在 TensorRT plugin 资源回收处理错误的问题。(#38374)

  • 修复 deformable_conv op 在 TensorRT plugin 序列化错误问题。(#38057)

  • 适配 TensorRT 8.0 新的构建引擎和系列化 API。(#36769)

  • 修复 Flatten2MatmulFusePass、Squeeze2MatmulFusePass、Reshape2MatmulFusePass 没有生效问题。(#37644)

  • 修复 TensorRT 输入数据在上时报错的问题。(#37427)

  • 增加输入维度错误时的报错信息。(#38962)

  • 修复 EmbEltwiseLayernorm 输出类型错误的问题。(#40015)

  • 删除 conv_affine_channel_fuse_pass 以及对应的单元测试。(#39817)

  • 修复 adaptive_pool2d pass 错误替换 pool 属性的问题。(#39600)

  • 修复 shuffle_channel_detect_pass 错误生成 shuffle_channel op 的问题。(#39242)

  • 修复 transpose 参数错误。(#39006)

  • 修复 nearest_interp_v2 输入 scale 维度小于 1 时崩溃的问题。(#38725)

  • 修复 prelu 在 dynamic shape 时不支持一维输入的问题。(#39389)

  • 修复 slice 的 special_slice_plugin 的核函数计算错误的问题。(#39875)

  • 暂时禁用 skip_layernorm 变长下的 int8 分支,防止精度下降。(#39991)

  • 修复关于支持 preln_ernie 模型的一些 bug。(#39733)

  • 修复 slice 在 ERNIE 中 threads 可能超过限制的 bug,修复 spacial_slice 误触的 bug。(#39096)

  • 修复 elementwise 在维度相同时不支持广播的问题。(#37908)

  • 修复 nearest_interp op 当 align_corners 为 True 时,TensorRT layer 的结果和原生 op 的结果有 diff,底层实现不一样。(#37525)

  • 修复 qkv_plugin:核函数计算错误。(#37096)

  • 修复动态量化的推理 pass 的问题。(#35879)

  • 当 Tensor 请求的内存容量低于已分配的 size 时直接复用。(#37880)

  • 修复 ERNIE 定长模型开启 TensorRT 出现的 hang 问题。(#37839)

  • 修复 TensorRT int8 时缺失 dynamic range 信息崩溃问题。(#36900)

  • 修复 slice 反序列化代码问题。(#36588)

  • 修复 yolo box 计算公式错误问题。(#36240)

  • 修复老版本模型在使用新版本 roi_align 时崩溃问题。(#38788) 外部开发者

  • 修复 softmax 在 python 和 C++上性能差异较大的问题。(#37130)

  • 修复 matmul 在静态 shape 2 维输入和动态 shape 3 维输入情况下推理失败问题。(#36849)

  • 修复 reshape_transpose_matmul_mkldnn_fuse_pass 对 shape 处理不当问题。(#36731)

  • 修复输入为 2 维,但 TensorRT 获取到 4 维的问题。(#36614)

  • 修复 interpolate_v2 MKLDNN 算子在 scale 属性为空时报错问题。(#36623)

  • 修复 recurrent 算子在多线程场景性能差问题。(#36052)

  • 移除 relu、sigmoid、tanh、relu6、batch_norm、clip、concat、gelu、hard_sigmoid、prelu、softmax、split、swish 对 TensorRT 2 维输入的限制。(#37097)

  • 修复 reshape op 使用 TensorRT 推理。(#41090)

  • 修复 matmul 相关 pass,兼容 matmul_v2。(#36424)

  • 开启 TensorRT 时,conv2d 算子中 padding 方式支持 VALID 及 SAME 属性。(#38999)

  • 修复 MKLDNN 多输入算子量化问题。(#39593, #39346, #40717)

  • 修复 MKLDNN 量化场景下 conv+activation 的 scale 错误问题。(#38331)

  • 修复 MKLDNN 无参数算子量化中,根据后续算子量化情况不同需做不同处理的问题。(#39342)

  • 修复 MKLDNN cpu_bfloat16_placement_pass 中的数据类型相关问题。(#38702)

  • 修复 MKLDNN bfloat16 推理中 split 算子执行问题。(#39548)

  • 修复 MKLDNN matmul_v2 算子不支持 6 维问题。(#36342, #38665)

  • 修复 MKLDNN matmul_v2_transpose_reshape 中的 MKLDNN DeviceContext 错误问题。(#38554)

  • 修复分割模型在 MKLDNN 推理场景计算结果错误问题。(#37310)

  • 修复 MKLDNN bfloat16 placement 算子列表并添加缺失算子。(#36291)

  • 修复 MKLDNN 算子的格式问题,包括:FC、conv_transpose、6 维 Tensor 报错问题、conv 对 NHWC 输入的输出 format 错误问题。(#38890, #37344, #37175, #38553, #40049, #39097)

  • 修复 MKLDNN 多线程推理场景因 cache 机制报错问题。(#36290, #35884)

  • 修复 MKLDNN 因 matmul 及 FC 引起的量化模型精度异常问题。(#38023, #37618)

  • 修复 MKLDNN 量化转换脚本因 pass 缺少引起的量化模型精度异常问题。(#37619, #40542, #38912)

  • 修复 MKLDNN 开启量 op 因为数据类型不匹配崩溃的问题。(#38133)

  • 修复 MKLDNN 某些 op 修改 layout 后需要改回原 layout 的问题。(#39422)

  • 修复针对昇腾 910 推理场景下,由于未释放 GIL 锁,导致与昇腾软件栈冲突,python API 下报错的问题。(#38605)

5. 环境适配

编译安装

  • 从 2.3.0 版本开始,飞桨对框架支持的 GPU 架构种类进行了调整和升级。(更多请参考:飞桨支持的 GPU 架构)

备注:

  • PIP 源安装是指用 pip install paddlepaddlepip install paddlepaddle-gpu从 PIP 官网下载安装包及依赖库的安装方式,支持架构种类少,安装包更轻量,下载源来自国外(相比 bos 源支持架构种类精简,安装包更轻量,只提供一种 CUDA 版本的安装包)。

    • 2.3 版本之前,飞桨 PIP 源安装包(CUDA10.2)支持的 GPU 架构为:3.5, 5.0, 5.2, 6.0, 6.1, 7.0, 7.5。

    • 2.3 版本之后,飞桨 PIP 源安装包(CUDA11.0)支持的 GPU 架构为:6.0, 6.1, 7.0, 7.5, 8.0

  • 飞桨官网 bos 源是指从飞桨官网下载安装包及依赖库的安装方式,支持的 GPU 架构更多,下载源来自国内,速度较快。(相比 PIP 源支持架构种类多,提供多个 CUDA 版本的安装包):

    • 2.3 版本之前,飞桨官网 bos 源安装包支持的 GPU 架构:

      • CUDA10:3.5, 5.0, 5.2, 6.0, 6.1, 7.0, 7.5;

      • CUDA11:5.2,6.0,6.1,7.0,7.5,8.0。

    • 2.3 版本之后,飞桨官网 bos 源安装包支持的 GPU 架构

      • CUDA10:3.5, 5.0, 5.2, 6.0, 6.1, 7.0, 7.5;

      • CUDA11:3.5, 5.0, 6.0, 6.1, 7.0, 7.5, 8.0。

  • 支持 Python 3.10,修复 Windows 下某些 PythonC API 变化导致的编译 bug。(#41180)

  • Windows 平台支持 Visual Studio 2019 编译。(#38719)

  • 消除 Windows 平台编译时出现的各种 warning。(#38034, #37890, #37442, #37439, #36857)

  • 修复底层数据结构升级引入的 jetson 编译问题。(#39669, #39441)

新硬件适配

  • 自定义新硬件接入:提供一种插件式扩展 PaddlePaddle 硬件后端的方式。通过该功能,开发者无需为特定硬件修改 PaddlePaddle 代码,只需实现标准接口,并编译成动态链接库,则可作为插件供 PaddlePaddle 调用。降低为 PaddlePaddle 添加新硬件后端的开发难度。当前支持自定义 Runtime 接入和自定义 Kernel 接入。

  • 华为 NPU 芯片(Ascend910)训练/推理支持,支持 ResNet50、YoloV3、BERT、Transformer 等多个模型,支持静态图与混合精度训练,支持单卡、单机、多机分布式训练。

  • Graphcore IPU 芯片(包括 IPU Mk2 GC200 和 Bow IPU)训练/推理支持,支持 ResNet50、BERT 等模型,支持静态图训练,支持单芯片、单机、多机分布式训练。

  • 寒武纪 MLU 芯片(MLU370x4)训练/推理支持,支持 ResNet50 等模型,支持静态图+动态图训练,支持混合精度训练,支持单卡、单机、多机分布式训练。

  • 昆仑芯 2 代芯片(昆仑芯 AI 加速卡 R200、R300)训练/推理支持,支持 ResNet50、YoloV3、OCR-DB、SSD、MobilnetV3、UNet、BERT、Transformer、GPT-2、Wide&Deep、DeepFM,支持静态图+动态图训练,支持混合精度训练,支持单机单卡、单机多卡训练。

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.