重要更新
飞桨框架3.2版本在大模型训练推理性能、硬件适配、主流大模型及高性能加速库的支持上进一步提升。
- 大模型训练方面,飞桨框架在计算、并行策略、容错能力三方面进行了升级:
- 从基础计算性能层面,提出了存算重叠的稀疏掩码注意力计算FlashMask V3,极致优化Attention的计算效率,同时还实现了高效的FP8混合精度效果无损训练技术。
- 在分布式并行策略层面,提出了动态自适应的显存卸载策略,实现存算最优均衡,再结合创新设计的显存友好的流水线并行调度,进一步降低显存开销。
- 增强了框架原生的容错能力,实现了大规模集群训练容错系统,可在不影响训练效率的前提下在线监测静默数据损坏等难以察觉的故障,并实现了高可用的检查点容灾方法,降低中断恢复损失。
- 在硬件适配方面,面向类CUDA芯片,全面升级插件式适配方案。
- 在设备资源的管理调度和高性能集合通讯库方面,针对类CUDA芯片做了管理接口升级和通信能力的增强,特别增强了分布式通信能力,使XCCL对齐NCCL的各结构体和功能。
- 新增了类CUDA算子注册机制。以沐曦适配为例,在复用GPU算子内核的基础上,仅需一行代码即可完成算子内核注册。经过统计计算,算子内核的复用率最高可以达到92%,可大幅降低硬件适配成本。
- 使用体验方面,重点提升了兼容能力,包括开发接口兼容业界用法、safetensors模型格式兼容、和第三方高性能加速库的兼容。
- 新增和修改开发接口兼容业界用法,新增系列API和别名,新增参数别名,新增专有和通用的参数。
- 全面兼容 Safetensors 模型格式。新增 FlexCheckpoint 机制,支持跨分布式策略、跨模型结构间自动实现参数重切分,可显著降低权重转换成本,进而提升大模型端到端的训练与推理研发效率。
- 系统性增强了接口兼容与算子注册能力,实现了高性能加速库一键导入,无需修改代码直接复用于飞桨的模型训练与推理加速过程中。
1. 用户体验
新特性
- 新增API:
paddle.msort
、paddle.ravel
、paddle.nn.functional.dropout1d
、paddle.Tensor.type_as
、paddle.Tensor.requires_grad
、paddle.view_as_complex
、paddle.view_as_real
、paddle.nn.Parameter
、paddle.broadcast_shapes
、paddle.range
、paddle.as_tensor
、paddle.scatter_reduce/scatter_reduce_
、paddle.scatter_add
、paddle.tensor
、paddle.softmax
、paddle.Tensor.softmax
、paddle.rand_like
、paddle.is_autocast_enabled
、paddle.get_autocast_gpu_dtype
、paddle.Tensor.repeat
、paddle.permute
。#74421,#74439,#74444,#74454,#74459,#74491、#74466,#74438,#74594,#74542,#74694,#74564,#74540,#74586,#74651,#74807,#74632,#74834,#74952,#74772,#74441,#74561,#74525 - 新增
paddle.compat.*
一系列API,支持业界的通用用法,便于迁移代码,包括paddle.compat.median
、paddle.compat.nanmedian
、paddle.compat.softmax
、paddle.compat.sort
、paddle.compat.split
、paddle.compat.min/max
、paddle.compat.Unfold
。#74865,#74874 - 新增初始化一系列API,支持业界通用的参数初始化方式,包括
paddle.nn.init.kaiming_uniform_
、paddle.nn.init.xavier_uniform_
、paddle.nn.init.uniform_
、paddle.nn.init.kaiming_normal_
、paddle.nn.init.xavier_normal_
、paddle.nn.init.normal_
、paddle.nn.init.calculate_gain
、paddle.nn.init.constant_
、paddle.nn.init.dirac_
、paddle.nn.init.eye_
、paddle.nn.init.ones_
、paddle.nn.init.orthogonal_
、paddle.nn.init.trunc_normal_
、paddle.nn.init.zeros_
。#74478 - API新增参数别名用法,例如既可以输入
x
,也可以输入input
,用法更为灵活。包括paddle.maximum
、paddle.minimum
、paddle.sqrt
、paddle.topk
、paddle.polar
、paddle.stack
、paddle.cos
、paddle.floor
、paddle.log
、paddle.pow
、paddle.rsqrt
、paddle.sign
、paddle.sin
、paddle.multiply
、paddle.where
等。#74683,#74795,#74887,#74592 paddle.Tensor
新增支持多种初始化方式,支持灵活的创建Tensor。#74619,#75022,#75065- API新增一些专有参数,增强原有功能。包括
paddle.nn.functional.gelu
、paddle.divide/div/div_
、paddle.add
、paddle.Tensor.copy_
、paddle.norm
、paddle.linalg.norm
、paddle.nn.functional.silu
、paddle.repeat_interleave
。#74485,#74562,#74420,#74768,#74855,#74903,#74788,#74631,#74947 - API新增一些通用参数:
out
、device
、dtype
、requires_grad
、pin_memory
、bias
,增强原有功能。包括paddle.zeros
、paddle.zeros_like
、paddle.ones
、paddle.ones_like
、paddle.arange
、paddle.eye
、paddle.empty
、paddle.empty_like
、paddle.full
、paddle.full_like
、paddle.randn
、paddle.Tensor.new_full
、paddle.Tensor.new_empty
、paddle.Tensor.new_ones
、paddle.Tensor.new_zeros
、paddle.tril/triu
、paddle.bmm
、paddle.nn.Conv1D/Conv2D/Conv3D/Embedding
、paddle.diff
、paddle.cumsum
、paddle.var
、paddle.multinomial
、paddle.mean
等。#74477,#74526,#74711,#74582,#74624,#74849,#74612,#74875,#74641,#74949,#74918,#74914,#74934,#74920,#74955,#74226,#74946 - API新增别名,支持更多调用方式。包括
paddle.Tensor.mul_/mul
、paddle.autograd.Function
、paddle.argwhere
、paddle.cat
、paddle.clamp
、paddle.ger
、paddle.take_along_dim
、paddle.linalg.matmul
、paddle.special.logsumexp
、paddle.concatenate
、paddle.eq/gt、
paddle.Tensor.take_along_dim、
paddle.nn.Conv1d/Conv2d/Conv3d`等。#74493,#74569,#74870
Bug修复
- 修复
paddle.nanmedian
精度问题。#74263 - 修复
paddle.distributed.fleet.utils.hybrid_parallel_util.fused_allreduce_gradients
在0-D下的问题。#74957 - 修复
paddle.matmul
在分布式下的问题。#74989
功能增强
文档
其他
- 代码风格相关的优化。#74654,#74655,#74665,#74660,#74667,#74664,#74662,#74661,#74658,#74657,#74666,#74659,#74663,#74656,#74673,#74672,#74671,#74674,#74675,#74670,#74669,#74677,#74709,#74714,#74712,#74713,#74704,#74746,#74748,#74743,#74742,#74744,#74745,#74747,#74794,#74789,#74793,#74786,#74791,#74787,#74827,#74608,#74288,#74287,#74385,#74395,#74475,#74647
- MKLDNN/ONEDNN相关的优化。#74299,#74244,#74230,#74314,#74327,#74325,#74326,#74315,#74399,#74398,#74393,#74392,#74367,#74391,#74423,#74424,#74436,#74417,#74410,#74473,#74458,#74501,#74487,#74502,#74513,#74518,#74516,#74507,#74504,#74505,#74509,#74535,#74536,#74517,#74503,#74557,#74550,#74575,#74587,#74576,#74588,#74549,#74581,#74583,#74628,#74630,#74635,#74679,#74648,#74127,#74636,#74552,#74551,#74678,#74680,#74730,#74751,#74895,#74821,#74897,#74734
- 代码实现相关的优化,变量与文件重命名。#74309,#74597,#74613,#74376,#74479,#74960,#74968,#74977
- 单测相关的优化,单测问题修复。#74595
- 编译相关的优化,CI问题修复。#74356,#74936
- 优化调试与打印信息,优化报错信息。#74765,#74381,#74384,#74386,#74387,#74383,#74519,#74520,#74468
- 自定义算子相关优化。#74402
- 分布式FlexCheckpoint支持。#74966,#74593,#74785,#74814
2. 基础执行架构
新功能
- 动态图支持。#74484
- 支持 safetensors。#74642, #74609, #75049
- 添加offloader优化计算效率。 #74837
- 为 conv_transpose 前向计算添加 API 支持。 #74431
- 添加offloader优化计算效率。 #74837
- 推理部署增加了w4afp8量化推理,支持w4afp8量化权重纯排及all2all通信#74270
Bug修复
- 核心框架与基础设施优化。#74336, #74554, #74634
- 计算精度与类型处理。 #74278, #74222, #74830
- 动态维度检查逻辑优化。 #74633, #74650
- 内存与非法访问修复。 #74347, #73443, #74953
- 修复报错/告警信息打印。 #74474, #74533, #74685, #74721, #74754
- 代码质量与文档修正。 #74378, #74828
- 修复 flashmask API 处理逻辑。 #74928
- 修复动转静模式下切分CudaGraph子图未生效的问题。 (#74749)
功能增强
废弃
其他
- 更改补丁版本。 #74940
3. 分布式&自动并行
并行策略
在3.2版本中,我们对流水线并行功能进行了多项增强,包括实现了字典参数传递的支持,并扩展了Pipeline Layer和SharedLayerDesc对非流水线并行的兼容性;同时修复了多个关键问题,包括大尺寸张量的IPC API异常、流水线并行中的评估批次和非计算损失问题、MoE模型的梯度释放错误、PP场景下NCCL通信重建导致的hang问题,以及双流水线并行的event管理错误;此外还进行了多项性能优化,改进了双流水线并行的计算重叠效率以提升训练性能,并升级了clear_param_storage方法使其支持sharding模式下多color集合的清除和重置操作。
功能新增
- 实现流水线并行(Pipeline Parallel)中字典参数传递的支持。#74574,#74867
- Pipeline Layer 和 SharedLayerDesc 支持非流水线并行(nonpp parallel)。#74573
Bug 修复
- 修复大尺寸张量的 IPC API 问题。#74472
- 修复流水线并行中的评估批次(eval batch)及非计算损失(non-compute_loss)问题。#74170
- 修复 MoE 模型上的梯度释放问题。#74972
- 修复在pp的场景下重建NCCL comm存在hang的问题。#73625
- 修复双流水线并行(dual pp)的event管理错误。#74158
优化改进
自动并行
功能改进
- 支持分布式张量的同一维度被多个mesh维度切分时的默认切分推导规则。#74396
- 改进
reshape
算子的切分推导规则,以支持分布式张量的同一维度被多个mesh维度切分的场景。#74352,#74579, #74565 - 支持在不改变分布式张量数据的情况下改变张量的mesh。#74248
Bug 修复
- 修复调用
ProcessMesh
的get_group
方法时重复创建通信组的bug。#73099 - 修复MoE场景下
get_local_slices
方法的bug。#74705 - 修复MoE场景下梯度裁剪的bug。#74916
- 修复流水线并行场景下不同stage间无法传递
stop_gradient
参数的bug。#73459 - 修复流水线并行场景下梯度裁剪的精度bug。#74409
- 修复动态图流水线并行场景下产生冗余输出的bug。#74913
- 修复算子
moe_combine
和moe_gate_dispatch
在MoE场景下跑不通的bug。#74645
其他
通信库
在3.2版本中,我们修复了DeepEP支持sm90编译的一个报错,同时对DeepEP申请的显存分配添加了预分配功能,并升级了其intranode和internode计算kernel,进一步优化了性能和稳定性。
Bug修复
- 修复DeepEP支持sm90 编译的一个报错。#74762
功能改进
4. 算子机制
新特性
- API 兼容性支持。 #74506, #74676, #74558, #74572, #74691, #74703, #74750, #74757, #74802, #74546, #74547, #74802, #74859, #74910, #74873, #74882, #74901, #74899, #74449
- 新增 fused_partial_rope 算子。 #74577
Bug修复
- 0-size Tensor 相关修复。 #74295, #74305, #74323, #74354
- 大 Tensor 相关修复。 #74242, #74293, #74289, #74279, #74330, #74329, #74342, #74369, #74370, #74404, #74537, #74451, #74172, #74324, #74964, #74360, #74379, #74377, #74380, #74362, #74197
- API 兼容性相关修复。 #74764, #74869, #74935
- 【开源任务】Paddle CPU/GPU Kernel 精度问题推全。 #74149, #74598, #74719, #74625, #74555
- 其他重要修复。 #74282, #74313, #74303, #74306, #74298, #74044, #74290, #74348, #74364, #74332, #74224, #74382, #74406, #74434, #74448, #74457, #74322, #74530, #74716, #74839, #74842, #74854, #74919, #74767, #75003
功能增强
- API 兼容能力提升。 #74456, #74480, #74523, #74490, #74548, #74596, #74568, #74559, #74629, #74623, #74700, #74643, #74602, #74783, #74781, #74735, #74725, #74815, #74856, #74925, #74545, #74932, #74784
- slice/stride 相关优化。 #74731, #74740, #74769, #74810, #74841, #74954, #74888, #74944, #74312, #74291, #74271, #74320, #74344, #74727, #74637
- 算子优化与 CUDA 支持。 #74693, #74922, #74967
- 改进调试信息、兼容性增强。 #74372, #74622
- 算子功能扩展与优化。 #74790, #74979
性能优化
- FP8 计算优化。 #74471, #74684, #74911
- 基础算子性能优化。 #74442, #74638
- 支持 fa3 变长序列反向计算并优化前向 API。 #73831
- 新增 FlashMask V2 功能。 #74729
文档
- 修复英文文档问题以及版权年份问题。 #74737
其他
- 在XPU硬件上默认开启 WITH_XPU_FFT 选项。 #74699
5. 硬件适配
类CUDA硬件接入方案完善
主仓单测支持多硬件
新增Custom Device API支持
6. 安装环境
Bug 修复
- 修复flashattent编译缓存的bug。#74388
- 修复site.USER_SITE为None的bug。 #74373
- 修复多架构 Linux 系统下gtest的编译bug。 #74723
- 修复在 WITH_GPU=ON 情况下 DEBUG 模式编译多个报错。 #74401
- 修复Windows下CUDA12.6编译bug。 #74990
- 修复api-benchmark基线流水线bug。 #74770
- 修复api-benchmark基线流水线bug。 #74778
- 修复api-benchmark基线流水线bug。 #74779
- 修复api-benchmark基线流水线bug。 #74780
- 修复api-benchmark基线流水线bug。 #74800
- 修复api-benchmark基线流水线bug。 #74803
其他
- 禁用test_custom_contiguous单测。 #74337
- 支持录取slice 流水线基线任务定时触发。 #74419
- 支持slice录基线添加手动指定pr。 #74445
- 检查代码中是否带有中问题。 #74460
- 支持CI PaddleX在XPU上的任务。 #74426
- 支持slice流水线豁免机制。 #74482
- 更新paddle基础镜像。 #73423
- windows 固定ninja版本1.11。 #74590
- 支持添加关闭pr取消CI。 #74604
- 支持快速跳过所有CI。 #74696
- 增加api-benchmark基线流水线。 #74690
- 更新nccl版本。 #74809
- 更新approve流水线RD名单。 #74838
- 更新approve流水线RD名单。 #74902
- 更新safetensor到镜像中。 #74904
- 添加flashatten的编译flag。 #74959
- 临时禁用win-inference流水线。 #74980
- 支持windows编译phi动态库。 #74950
7. 贡献者名单
AIbin, Ayakouji, baiyue, baoqiwen, Chang Lu, Chen Zhiyang, co63oc, cyberslack_lee, cyy536, datutu-L, Deng Haodong, Difer, Eddie-Wang, enzodechine, fangfangssj, feri, fxyfxy777, ggggxm, GoldPancake, gouzil, Gu Shiwei, Haze188 灏喆, hohdiy, hong, HU Shenwei, huangjiyi, HydrogenSulfate, kjagsdq, LCStayingdullCircuit, Leo Guo, lightbrother, liufengwei0103, liuruyan, LiYuRio, LLSGYN, Lucas, Luckycheng222, lzy, Nana, Nyakku Shigure, ooo oo, Qianyue He, risemeup1, Ruibiao Chen, Ryan, Shuhao Liang, sneaxiy, Starrysea996, SUN Dong, Tao Luo, Tian, tianhaodongbd, tianshuo78520a, umiswing, waliwali777, wanghuancoder, Wenhao.Dai, wyw, XiaoguangHu, xiaoguoguo626807, xingmingyyj, Yichen Zhang, Yohanna, yongqiangma, Yuan Xiaolan, YUNSHEN XIE, Yuntao Nie, Yuqiang Ge, Yutian Rao, Zero Rains, Zhan Rongrui, Zhang Ting, zhanghonggeng, Zhaowu Pan, zhengshengning, ZhenxingLi, Zhou Xin, zhupengyang, zhwesky2010, Zichao, zty-king, Zx, zyfncg, zzm, 周周周, 正在学习, 苍天荒