3.1 Release Note

飞桨框架 3.1 版本,针对核心功能自动并行进一步优化打磨,提升易用性和性能表现;同时提供 FP8 低精度训练支持,提升大模型训练速度提升 10-20%;完善硬件扩展机制,降低类 cuda 类硬件适配成本,用户仅需注册 kernel;同时对于框架基础能力进行增强,提升框架稳定性。重点更新功能如下:

  • 自动并行架构: 自动并行架构进一步打磨,以提高自动并行核心机制易用性和动态图性能。完善了自动并行核心机制,包括新增了多个算子的切分推导规则,支持分布式张量的同一维度被多个 mesh 维度切分,支持动态图并行策略(PP,CP,SEP,TP-CONV)等。同时,对动态图自动并行系统地做了性能优化,在 Llama2 Qwen Baichuan 等系列模型上性能基本持平手动并行的性能。

  • 低精度训练: 基于 blockwise 的 fp8 gemm 算子,支持低精度训练,训练精度媲美 BF16,大模型训练速度提速 10-20%。

  • 异构多芯适配: 提供类 cuda 算子复用机制,仅需注册即可使用对应 kernel。

  • 框架稳定性增强: 系统修复算子在 0-Size 和大维度情况计算结果错误。

1. 用户体验升级

API 功能增强、Bug 修复与改进,旨在提升用户体验和 API 的易用性。新增了paddle.randn_like API,修复了多个 API 的功能缺陷,并增强了对复数类型和 0-Size Tensor 的支持。文档和代码也进行了相应的更新和优化,以提升整体的准确性和专业性。

新特性

  • 新增paddle.randn_like API。#72492

Bug 修复

  • 修复tensordot API 输入输出类型不一致问题。#72139

  • 修复atleast API 输出是 Tensor 列表时的问题。#73102

  • 修复nonzer API 问题。#72003

  • 修复dualpipev中的内存泄漏问题。#72070

  • 修复softmax计算溢出问题。#71935

  • 修复take_along_axis中在broadcast=False时的形状检查问题。#72436

  • 修复maximumminimum对 Nan 输入的不正确问题。#71933

  • 修复visit_type 问题。#72782

  • 修复gather_scatter_functor中的 int32 越界问题。#72905

  • 修复Bernoulli的 inplace 实现。#73271

  • 修复moe_permutemoe_unpermute问题。#73365

  • 修复ast.parse对 pyi 文件语法检查问题。#71872

  • 修复复数除法问题。#73331

  • 修复与 TensorRT 集成相关的问题。#72302, #72278

功能增强

文档

  • 修正了文档中的错误,提高了文档的可用性和用户体验。#72549, #73036

开发者相关

废弃代码清理

2. 基础执行架构

支持 FP8 矩阵运算,提升模型训练效率,同时对多个模型进行增强,提升稳定性; 提供是 C_ops 的方式调用反向接口,方便显存优化和功能实验。

新特性

Bug 修复

功能增强

性能提升

废弃

开发者相关

其他

  • 其他:新增 CPU 部分 kernel 对 FP16/BF16 数据类型的内核支持,优化测试模块错误处理与容差配置等。 #71764, #71951, #72944

3. 编译器架构

优化编译器性能和增加稳定性

性能优化

  • 支持训练场景的 Layout 自动转换优化。(#71891

  • 后端新增了 argmin、argmax、arange 等算子的 Kernel 编译优化。(#71956, #72598))

  • 支持矩阵乘的融合优化。(#72846)

  • 优化部分算子 Kernel 计算性能。(#72871)

4. 自动并行架构

在 3.1 版本中,我们对自动并行架构进一步打磨,以提高自动并行易用性和动态图性能。具体地,我们完善了自动并行核心机制,包括新增了多个算子的切分推导规则,支持分布式张量的同一维度被多个 mesh 维度切分,支持动态图并行策略(PP,CP,SEP,TP-CONV)等。同时,对动态图自动并行系统地做了性能优化,在 Llama 等系列模型上性能基本持平手动并行的性能。

功能改进

  • 支持分布式张量的同一维度被多个 mesh 维度切分。 #73233

  • 支持自动并行通信拓扑描述 ProcessMesh 转换为手动并行通信组。 #72052

  • 支持任意可序列化 python object 的 send/recv。 #72098

  • 动态图并行策略补齐

  • 新增以下算子的切分推导规则

    • min, min_grad #72269

    • bitwise_or,atan2,fmax,fmin,reciprocal #72310

    • argmin, abs, cosh #72264

    • mean_all, mean_all_grad #72479

    • topk, topk_grad #72499

    • argsort #72388

    • round, mish, elu, selu, celu, stanh, softplus, softshrink, thresholded_relu, logit, nonzero #72312

    • unique ops #72824

    • put_along_axis #72766

    • round_grad, trunc_grad, ceil_grad, floor_grad, poisson_grad #72677

    • log_softmax, cummax, cummin #72720

    • unary #72177

    • unary_grad #72260

    • index_select, index_select_grad #72727

    • roll, roll_grad #72740

    • empty_like #73169

    • roi_align, roi_align_grad #72925

    • expand_as, expand_as_grad #73107

    • fused_gemm_epilogur #73126

    • label_smooth, label_smooth #72845

    • group_norm, group_norm_grad #72946

    • instance_norm, instance_norm_grad #72938

    • batch_norm, sync_batch_norm #72918

    • reduce_any #73175

    • fused_gemm_epilogue_rule #73494

性能优化

  • 支持分组切分并行的 tensor_fusion 优化策略和 overlap 优化策略。 #72551, #72902, #73142,#71785

  • 优化 reshard 模块,以降低通信开销。#71969, #73024,#71868

  • 优化 multiply 的切分推导规则,以降低通信开销。#73408

  • 优化分布式切分状态为 Partial 时反向通信,以降低通信开销。 #73236

  • 梯度更新时通信融合优化。 #72120#72745

  • 优化 gelu 切分推导,以降低通信开销。 #73279

  • 优化 fused_rms_norm 在输入有 Partial 状态时的切分推导规则,以减少通信和计算开销。 #73054

Bug 修复

  • 修复虚拟流水线并行策略在 H 卡上通信 hang 的 bug。#71104, #73470

  • 修复 save/load 的 bug。 #72023

  • 修复 linear_fused_grad_add 策略在动态图模式下跑不通的 bug。 #72708)

  • 修复 fused_rms_norm 算子跑不通和精度 bug。 #72663

  • 修复 expand 算子切分推导规则的 bug。#73154

其他

  • 清理废弃代码,以便于维护代码。 #71814,#72538

  • 新增 API local_map,将分布式张量传递给为普通张量编写的函数。 (#71804)

  • 为算子 fused_linear_param_grad_add 增加检查。(#72483)

5. 算子机制

新特性

  • 梯度与自动微分优化:初步支持 put_along_axis 及 repeat_interleave 操作的双重梯度计算,提升复杂算子在自动微分场景下的数值稳定性,实现 masked_fill 操作的算子分解。 #72789, #73056, #73225

  • 运算符机制扩展:新增对__radd__和__rmul__的自定义支持,增强框架对非对称运算符的重载能力。 #73119

  • FP8 模块支持及算子开发:新增 FP8 块量化 GEMM 支持,引入多个融合算子,为混合专家(MoE)模型提供高效算子级实现,提升训推性能。 #73228, #73285, #73133, #73364, #73520, #73531

Bug 修复

功能增强

  • 新增 int64_t 版本的快速除法取模实现,提升大整数场景下的计算性能与数值稳定性, #72530

  • 优化带步长张量拷贝 kernel,改进非连续内存布局下的数据拷贝效率。 #72662

-统一动态图与静态图模式下量化 API 的使用方式,简化量化模型开发流程, #73100

性能提升

  • 优化 gelu 算子分解性能,提升计算效率。 #72812

6. 框架性能优化

新特性

支持sharding_overlapacc_steps可配置。 #72395

Bug 修复

  • 修复算子c_softmax_with_cross_entropy_gradinplace问题。 #72366

功能增强

  • 性能优化与加速:启用深度卷积的 cuDNN 支持,提升卷积运算效率。更新池化操作策略并优化 permute 内存操作,减少 CUDA 内存占用。优化打印速度,加速调试与日志输出流程。 #71796, #73442, #73563

  • 功能增强与操作支持:新增 masked_fill 操作及布尔索引优化,增强张量掩码处理能力。实现 index_elementwise 操作,支持基于索引的元素级运算。添加池化与 reshape 执行策略,提升模型操作的灵活性。 #72788, #72942

  • 错误修复与稳定性提升:修复 fused_rms_norm 在 SPMD 并行模式下的部分状态支持问题。修正 slice 操作中输出维度计算及 IndexGetStride 的索引错误,确保计算正确性。 #72118, #72223, #73184, #73237, #73054

性能提升

功能增强与修复:- 优化算子索引和内核调度逻辑。 #72625, #72741, #73082, #73501

  • 模型与操作支持:支持 NHWC 格式的深度卷积,适配更多硬件内存布局。 #72121

7. 硬件适配

优化硬件机制,提供类 cuda 硬件 kernel 复用方案。

新特性

以 customdevice 接入方案为基础,增加低成本支持类 cuda 后端硬件的支持方案。类 cuda 后端可以以插件式方式接入 paddle,低成本复用 paddle 中多数 nv 生态中的 cuda kernel,且可以与 paddle 框架中的特性 feature 升级解耦,大大降低硬件后端接入与迭代成本,提升用户接入意愿,形成 paddle 与硬件厂商共建生态的良好合作关系。 #72604#72668)#72758#72865#72910#73033)#73145#73281#73079

补充 XPU 基础能力:XPU 环境下增加 kernel ,扩展数据类型,补充分支 #71424#71809#71594#71779#71756#71573#71883#71954#71931#72280#72361#72406#72528#72752#72852#72982#73357#73414#73464#73234#71776

DCU kernel 扩展数据类型 #73129

8. 安装环境适配

优化了框架的稳定性和跨平台兼容性,修复了不同平台上的编译安装失败问题;升级 CUDA 等关键依赖,进一步优化 CI/CD 流程,提升构建速度并增强系统整体稳定性;停止对 Python3.8 环境下的编译安装维护。

Bug 修复

  • 修复使用 clang17 编译第三方库时的编译错误。#72524

  • 修复使用 CUDA12.9 时的编译问题。 #72808, #72841, #72978, #73360

  • 修复使用 GCC13.3 时的编译问题。#73144

  • 修复 WITH_PIP_CUDA_LIBRARIES=ON 时的编译问题。#72907

  • 修复 WITH_NVSHMEM=ON 时的编译问题。#73368

功能增强

  • 避免自定义算子编译产生的临时文件的拷贝。#73196

  • Warning 信息优化。#72877

开发者相关

废弃

  • 停止支持 Python3.8 环境下的编译。#72827

9. 贡献者名单

0x3878f, A-nnonymous, AndSonder, ApricityXX, aquagull, author, baoqiwen, BeingGod, blacksheep-Aristotle, BoShen5, bukejiyu, cangtianhuang, carryyu, chang-wenbin, changeyoung98, chen2016013, ckl117, co63oc, cqulilujia, crashbussy, cszdrg, Cutelemon6, cyy536, DanielSun11, danleifeng, datutu-L, deepllz, Dmovic, DrRyanHuang, dynamicheart, Eddie-Wang1120, eggman-1024, emmanuel-ferdman, Enigmatisms, enkilee, fangfangssj, feixi21, FeixLiu, ForFishes, Function-Samuel, ggggxm, GITD245, Glencsa, GoldenStain, gongshaotian, gouzil, gzy19990617, hanlintang, Hongqing-work, houj04, huangjiyi, hxzd5568, HydrogenSulfate, jzhang533, LCStayingdullCircuit, leon062112, lifulll, linkk08, LittleHeroZZZX, liufengwei0103, Liujie0926, liuruyan, lixinqi, LiYuRio, lizexu123, lizhenyun01, lj970926, lshpku, megemini, mikethegoblin, ming1753, mzj104, NKNaN, ooooo-create, pesionzhao, phlrain, pkuzyc, PolaKuma, Qin-sx, RichardWooSJTU, risemeup1, runzhech, RuohengMa, sasaya123, shanjiang7, SigureMo, sneaxiy, swgu98, SylarTiaNII, tianhaodongbd, tianshuo78520a, timminator, tizhou86, umiswing, waliwali777, wanghuancoder, Waynezee, Wennie396, xiaoguoguo626807, XieYunshen, Xing-lil, xkkkkkk23, Xreki, xuxinyi389, Yeenyeong, yongqiangma, YqGe585, yuanlehome, YuanRisheng, yulangz, yuwu46, zeroRains, zhangbo9674, zhanghonggeng, zhangting2020, ZhangX-21, zhangyk0314, zhangyuqin1998, zhink, zhiqiu, zhouquan32, zhoutianzi666, zhupengyang, zrr1999, zty-king, zyfncg