飞桨框架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
功能增强
- 针对返回多个Tensor的情况,通过paddle数据结构来封装,优化体验。包括
paddle.topk。#74931
- 创建类API支持size为可变参数的用法。#74494
文档
其他
- 代码风格相关的优化。#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. 基础执行架构
新功能
Bug修复
- 核心框架与基础设施优化。#74336, #74554, #74634
- 计算精度与类型处理。 #74278, #74222, #74830
- 动态维度检查逻辑优化。 #74633, #74650
- 内存与非法访问修复。 #74347, #73443, #74953
- 修复报错/告警信息打印。 #74474, #74533, #74685, #74721, #74754
- 代码质量与文档修正。 #74378, #74828
- 修复 flashmask API 处理逻辑。 #74928
- 修复动转静模式下切分CudaGraph子图未生效的问题。 (#74749)
功能增强
废弃
其他
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
优化改进
- 优化双流水线并行的计算重叠(overlap)效率,提升训练性能。#74527
- 升级clear_param_storage方法,支持sharding下多个color集合清除和重置。#74741
自动并行
功能改进
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申请的显存分配添加预分配功能。#74465
- 升级DeepEP的intranode和internode计算kernel。#74284
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
性能优化
文档
其他
- 在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
其他
更新说明:https://github.com/PaddlePaddle/Paddle/releases/tag/v3.2.0