3.0 Beta Release Note¶
本版本的核心特性主要包括动静统一自动并行技术和神经网络编译器自动优化等新技术,旨在应对当前深度学习领域的新挑战。飞桨框架 3.0 Beta 版本延续了 2.x 版本动静统一、训推一体的设计理念,其开发接口全面兼容 2.x 版本。这意味着,使用 2.x 版本开发的代码,在绝大多数情况下无需修改,即可直接在 3.x 版本上运行。几个重点特性具体展开说明如下:
动静统一自动并行:为了降低大模型的编程难度,飞桨还优化了动静统一的半自动并行编程范式,显著简化了编程的复杂度。开发者无需深入研究手动并行编程的复杂概念和 API,只需进行少量的张量切分标注,即可完成混合并行模型的构建。框架能够自动推导分布式切分状态并添加通信算子,同时还支持一键动转静分布式训练,从而大幅简化了混合并行训练代码的开发过程。动静统一方面,飞桨通过采用基于字节码的动静转换技术,全面升级了其动转静训练能力,支持自适应的图构建功能。在 700 多个飞桨产业级模型上进行了验证,实现了一键动转静训练 100%的成功率。
神经网络编译器自动优化:飞桨神经网络编译器 CINN(Compiler Infrastructure for Neural Networks)采用与框架一体化的设计,能够支持生成式模型、科学计算模型等多种模型的高效训练与可变形状推理,为计算灵活性与高性能之间提供了一个良好的平衡点。通过算子的自动融合和代码生成技术,Llama2 和 Stable Diffusion 模型的性能提升了 30%。
高阶自动微分:为了更好支持科学计算等场景,飞桨框架设计并实现了基于组合算子机制的高阶自动微分技术,结合神经网络编译器自动优化技术,我们测试了超过 40 多个科学计算场景的微分方程,其求解速度领先业界同类产品 70%。
高扩展中间表示 :为了提升飞桨框架的可扩展性,我们研发了高扩展中间表示 PIR(Paddle Intermediate Representation)。这一表示系统性地抽象了底层核心概念,提供了灵活且高效的组件。PIR 作为基础设施,支撑着动转静、自动微分、自动并行、组合算子、图优化等多项技术,并广泛应用于分布式训练、模型压缩、推理部署等场景。通过 PIR 提供的 DRR(Declarative Rewrite Rule)机制,Pass 的开发成本可以降低 60%。我们对超过 900 个模型配置进行了测试,结果显示,在使用 PIR 后,推理的整体性能提升了超过 10%。
多硬件适配:飞桨为大模型硬件适配提供了功能完善且低成本的方案。新硬件仅需适配 30 余个接口,即可支持大模型的训练、压缩与推理。同时,飞桨提供了基于编译器的硬件接入方式,硬件厂商只需以插件的形式实现编译器的代码生成后端,便能实现与飞桨框架的高效适配。飞桨硬件接入本次新增了对 4 款硬件昆仑 XPU、昇腾 NPU、海光 DCU 和寒武纪 MLU 的日常发版支持。
此版本包含了对框架 2.x 版本部分已有功能的持续改进,同时本版本的新特性在使用体验、性能、二次开发便利度以及硬件适配能力等方面带来了显著提升。除了上述核心特性外,此版本在用户体验层面持续丰富并增强了满足更多场景的 API 功能,针对大模型场景优化完善了分布式并行策略优化和推理功能增强,在编译安装方面做了比较彻底的易用性改进,对依赖包的安装方式和版本进行了全新同步升级,对系统安全进行了全面加固,对产品文档也进行了全面的纠错检查,同时也对一些废弃代码做了大量的清理以保证架构的简洁性。飞桨 3.0 Beta 版本在不使用新特性的情况下,表现仍然是成熟稳定的,每个新特性都提供了可灵活进行控制的开关,方便用户快速了解相关产品功能和体验对比。
1.用户体验升级¶
不兼容升级¶
飞桨 API 支持隐式类型提升。在加减乘除等最常用的计算中,如果两个输入的数据类型不一样,就需要确定输出的数据类型问题。飞桨历史上的现状是部分支持且实际规则并不清楚,客观上表现为动静不一致、API 和运算符重载不一致 及 不符合交换率,特别是在大模型广泛使用 bf16/fp16 与 fp32 进行混合计算时容易出现非预期问题且难以定位。飞桨从 3.0 beta 版本开始,明确了隐式数据类型提升规则,其中详细定义了 Tensor 与 Tensor 和 Tensor 与 1 个数(Scalar)计算结果的类型,保证了计算符合交换律,运算符重载与二元 API 结果一致,动态图与静态图结果一致。更符合用户理解和业界习惯。#60638, #63842, #60011
废弃功能¶
支持 0 维 Tensor 已经稳定了 2 个版本,本版本取消了在一些情况下将 0 维 Tensor 转成只含 1 个元素的 1 维 Tensor 的开关
FLAGS_set_to_1d
,这个开关是为了兼容一些套件中用 1 个元素的 1 维 Tensor 表示 0 维 Tensor 的不正确写法。即当前飞桨完全区分 0 维 Tensor 和只含 1 个元素的 1 维 Tensor 的语义,两者不等价。#61227
新增 API 功能¶
此版本相比上一个版本新增 126 个 API,API 功能更加丰富,以更好支持大模型、科学计算等需求,包括:
新增 Tensor 计算类 API。
paddle.gammaln
,paddle.gammainc
,paddle.gammaincc
,paddle.sinc
,paddle.pdist
,paddle.histogramdd
,paddle.signbit
,paddle.copysign
,paddle.bitwise_right_shift/bitwise_left_shift
,paddle.isposinf/isneginf/isreal
,paddle.isin
,paddle.hsplit/dsplit
,paddle.column_stack/row_stack/dstack/hstack/vstack
,paddle.slice_scatter
,paddle.masked_scatter
#60553, #59311, #59357, #63521, #57869, #57880, #57882, #60150, #57785, #58092, #63523, #64001, #58917, #59127, #59973, #59383新增概率分布类 API。
paddle.distribution.ContinuousBernoulli
,paddle.distribution.MultivariateNormal
,paddle.distribution.Exponential
,paddle.distribution.Gamma
,paddle.distribution.Binomial
,paddle.distribution.Poisson
#58004, #57899, #57856新增优化器类 API。
paddle.optimizer.ASGD
,paddle.optimizer.NAdam
,paddle.optimizer.RAdam
,paddle.optimizer.Rprop
#58834, #63671, #58851新增线性代数类 API。
paddle.linalg.matrix_exp
#59715新增其他 API。
paddle.bernoulli_
,paddle.nn.ZeroPad1D/ZeroPad3D
,paddle.nn.AdaptiveLogSoftmaxWithLoss
,paddle.Tensor.apply
#64252, #59690, #63728, #63302, #59374,#63227
部分 API 功能增强¶
增强了约 30 个 API 以支持复数计算,如
paddle.log
,paddle.log1p
,paddle.square
,paddle.reciprocal
等,进而扩展对更多科学计算场景的支持。#62448, #60821, #60897, #62764, #59536, #59529, #63207, #62237, #64684增强了 46 个 API 的功能,使得已有 API 更易用,也更容易进行代码转换。包括但不限于增加 API 参数,扩展 API 支持的数据类型,以及修正原有不合理设计等。#59890, #63513, #59674, #62778, #64110, #63222, #64331, #64715, #61155, #60070, #61974, #62407, #62672,#62722, #62876, #63284, #63860, #60466, #63690, #63953, #63901, #62624, #59857, #60084, #60766, #62788, #62937, #63134, #62966, #63648, #63881, #64358, #60503, #63604, #62338
增强了高阶微分的单测基础设施,能够更容易地添加高阶微分的单测用例。#62074
API 性能提升¶
Bug 修复¶
修复
paddle.optimizer.LBFGS
中使用非 Tensor 进行计算导致的报错。 #60219修复
paddle.optimizer.LBFGS
中随机数不能固定的问题。 #60591修复
set_value
算子梯度计算不正确的问题。 #59034修复 Tensor 联合索引取值时的问题。 #61922
修复
paddle.flatten
stride 计算错误问题,并能够新增paddle.flatten_
。#63084修复
paddle.index_fill
和paddle.index_fill_
结果不一致问题。 #59863修复
paddle.masked_scatter
报错问题。 #60835修复
paddle.histogramdd
cpu 报错问题。 #61891修复
paddle.cast_
在 cpu 上连续使用导致结果错误的 bug。 #60054修复
paddle.put_along_axis
在输入 size 很大的时候存在 bug 的问题。 #60551修复
paddle.nanmedian
cpu 报错问题。 #63221修复
paddle.median
在 min 分支下不支持输入为除浮点类型以外的类型。 #64444修复 GLOG_v>=6 下格式问题。 #63345
2.基础执行架构¶
PIR 基础功能全面升级完善,成熟度大幅提升,基于 PIR 使飞桨基础架构设计更合理、保证了框架卓越的性能表现和良好的拓展性。在此版本中,完成了 PIR 多场景的推全验证:单机场景完成动转静场景 PIR 后端切换;推理场景完成全部存量模型验证,并在 84.2%模型有 10%+收益;完成分布式场景基于 PIR 的验证。同时基于 PIR 完成控制流、backward 逻辑、save/load、OneDNN 适配等核心模块的开发验证,为飞桨 PIR 切换为默认模式,奠定了坚实的基础。对飞桨框架算子体系的功能完备性、执行效率和稳定性进一步提升,给开发者带来更好的使用和开发体验。
功能优化¶
完善 PIR 的基础功能,包含基础的类型系统增强、调试、打印、Pass 开发、AMP 支持等,提升 PIR 的研发效率。#60723, #60677, #60783, #60798, #61053, #61366, #61446, #60024, #59939, #63376, #61853, #63914, #60170, #60678, #64093, #64065, #62451, #59784, #60136, #63336, #62108, #60860, #60536, #60590, #60752, #61435, #62977, #62139, #60432, #61452, #61978, #62262, #62422, #60359, #62989, #61297, #61399, #61871, #61496, #62413
优化飞桨执行器执行逻辑,完善 Pass 体系,提升训推性能表现,并更好的支持分布式并行的逻辑运行。 #60182, #60516, #63573, #60181, #59792, #62025, #61160, #61188, #61277, #61669, #60823, #61310, #60892, #60578, #61657, #62638, #63960, #64234
PIR 新功能¶
基于 PIR 实现反向逻辑,直接生成反向计算图,同时支持高阶微分。 #60174, #60328, #60818, #61352, #61661, #61927, #62772, #60360, #60866, #60970, #60810, #64696, #59844, #59999, #60262, #60338, #59935, #59982, #60221, #62621, #60044, #59790, #60529, #61378, #61584
基于 PIR 实现控制流逻辑,提升 PIR 的表达能力,更好的支持训练和推理等多场景业务。#61396, #64045, #60953, #61091, #61304, #62093, #64710, #60668, #60433, #60963, #61192, #60895, #60017, #60369, #60330, #60364, #61416, #60460, #60703, #61027
基于 PIR 实现 save/load 逻辑,打通 PIR 和上下游训练和推理业务的流程。 #63438, #63574, #64281, #64327, #63622, #64507, #63389, #63539, #63749, #63957, #64044, #64121, #64239, #63818, #63910,#63380#63380,#63275,#63663,#64692,#63958
完成 OneDNN 相关基础功能开发和验证,为 OneDNN 全面切换做准备。 #60680, #60665, #63162, #59917, #62901, #59918, #60257, #60502, #61062, #61170, #61474, #60874, #61495, #61664, #61649, #61592, #61667, #61137, #60952, #61651, #62126, #62187, #61307, #62734, #60974, #61451, #61011, #61218, #61623, #61893, #61876, #61892, #62085, #62220, #62244, #62265, #60754, #60896, #61868, #61659, #62241, #62471, #61165,#64441,#63141,#63145,#63592,#63617,#63518,#63726,#63853,#63812,#63811,#64524,#62993,#63516,#62998,#63151,#64661,#64433,#64448,#63201,#63230,#63233,#63281,#64671,#63274
基于 PIR 实现 Sparse 相关逻辑,包含基础的 Type 类型和算子表达,并完成 Sparse 重点功能验证。 #62868, #63015, #62894
动转静功能优化¶
优化动转静基础能力,适配 SOT 训练场景下的动态维度,支持 Python3.12。
完成动转静场景的 PIR 适配。#60988, #61936, #59929, #61790, #64323, #62030, #61143, #62680, #63309, #63311, #62199
SOT 适配 Python 3.12 版本字节码,动转静 SOT 功能能够在 Python 3.12 版本使用。#61414, #59562, #61031, #61272, #61412, #61305, #61964, #62008, #62028, #61995, #62073, #62120, #62218, #62155
SOT 完成训练场景动态维度的适配,避免维度发生改变,触发重复构图,提升运行效率。#64278, #64435, #64499, #64500, #62080
算子机制¶
针对飞桨框架部分算子 Kernel 实现不完备、计算逻辑不高效等问题,我们对飞桨的部分算子功能和算子体系内部机制做了进一步的完善优化,修复部分已知问题,并新增了一些特性支持。
针对 XPU Kernel,优化了
numel
、concat
、slice
等算子的数据类型支持,以及AdamW
优化器的混合精度训练支持等。#63715, #61617, #61694, #64542, #63644, #61340, #63108对部分算子进行了功能和性能的改进。#59413, #60295, #64304, #60979, #63556, #63061, #62533
完善组合算子的内部实现机制,并且为部分算子新增和优化组合拆分逻辑。#59448, #60505, #59891, #63161, #63245, #63782, #64346, #63156, #63171, #61315, #61701, #61874, #61873, #62059, #61912, #62112, #63011, #63009, #64714
Bug 修复¶
修复 PIR、执行器、动转静等相关的 Bug。#64442, #60443, #60122, #60625, #60607, #60705, #61110, #61278, #61448, #61491, #61692, #62100, #62239, #62365, #62758, #63395, #64272, #62165, #64151, #64204, #64815, #63757, #61972, #64806, #60010, #60461, #60310, #62006, #61591, #60327, #60720, #64656, #60236, #60684, #60790, #60944, #62056, #62891, #64676, #60271, #60634, #60663, #60827, #60845, #60905, #60945, #60949, #61107, #61111, #61117, #61158, #61177, #61355, #61593, #61666, #61934, #62216, #62491, #62515, #62594, #62605, #62895, #62913, #64413, #59947, #60264, #60721, #63113, #63629, #64300, #64450, #64532, #64561, #64625, #64731, #60059, #60487, #60423, #61599, #62032, #62686, #64055, #60751, #61646, #60454, #62530, #62821, #64454, #64754, #59860, #60280, #60357, #60363, #60900, #61185, #61505, #61644, #62256, #62396, #63040, #63409, #63764, #59571, #59894, #59569, #59896, #60015, #60081, #60164, #60200, #60211, #60267, #60458, #60395, #60907, #60707, #60993, #61401, #61433, #61450, #61577, #61575, #61703, #61711, #61883, #61822, #62012, #61858, #62176, #62257, #62470, #62536, #62606, #62808, #62854, #62879, #62864, #63063, #62958, #63397, #63805, #63694, #64168, #64184, #64174, #64315, #64362, #64400, #64475, #64458, #64548, #59858, #61132, #62010, #62069, #62707, #62921, #63085, #63321, #63351, #63549, #64567, #59936, #60269, #60879, #61314, #61391, #61479, #61789, #61832, #61864, #61917, #62052, #62068, #62293, #62479, #62506, #59948, #64118, #64126, #64195, #64307, #64314, #64276, #64312, #64350, #64319, #64463, #64457, #64455, #64487, #64645, #63155, #59893, #63332, #63332, #64786, #60515, #60627, #60863, #60854, #61447, #61440, #61932, #62131, #62252, #62283, #62358, #62411, #62424, #62810, #62811, #62896, #62947, #63182, #63190, #63294, #63306, #63352, #63404, #63474, #64013, #64674,#60055,#62050,#62770,#63234,#63374,#64277, #63420, #60312, #63810, #64631, #63970, #63708, #62062, #60898, #62373, #59878
修复部分算子机制、算子实现逻辑和相关单测的 Bug。#63792, #60570, #61572, #59971, #61336, #63276, #63251, #63697, #63706, #64685, #64009, #62461, #61568, #63912, #60475, #60222, #63961, #63593
开发者相关内容¶
开发者相关内容,包含 PIR 切换、单测开启、功能验证等 PR。 #60621, #59703, #59694, #59717, #59729, #59730, #60216, #60238, #60246, #60343, #60302, #60870, #59956, #60795, #62528, #59932, #59636, #59959, #59734, #60287, #60347, #60335, #60332, #59631, #60255, #60329, #60401, #60522, #60792, #59617, #60277, #60584, #60911, #61322, #60838, #60602, #61458, #61607, #61960, #60484, #61662, #62263, #62270, #62469, #62416, #62443, #62412, #62541, #62634, #62369, #60805, #62644, #62494, #62767, #62735, #62802, #62801, #62783, #62579, #62833, #62668, #62972, #62505, #63005, #62900, #60577, #60877, #61076, #61038, #61112, #61120, #61582, #61119, #61036, #61289, #60695, #61039, #61963, #62118, #62797, #62807, #62887, #62830, #62849, #62750, #62965, #59742, #59867, #60836, #60902, #61228, #60037, #60079, #60173, #60373, #60380, #60381, #60750, #61065, #61122, #61074, #61204, #61191, #61182, #61219, #61296, #61503, #61484, #61513, #61476, #61510, #61511, #61526, #61524, #61525, #61466, #61497, #61538, #61533, #61530, #61468, #61527, #61535, #61512, #61531, #61539, #61532, #61521, #61517, #61518, #61550, #61545, #61548, #61519, #61549, #61574, #61585, #61581, #61553, #61504, #61603, #61534, #61567, #61523, #61565, #61564, #61707, #61560, #61684, #61706, #61724, #61719, #61729, #61763, #61755, #61737, #61750, #61753, #61756, #61777, #61758, #61731, #61771, #61739, #61559, #61717, #61733, #61563, #61546, #61566, #61562, #61793, #61902, #61905, #61904, #62227, #62332, #62653, #62681, #62709, #62794, #62938, #63185, #63754, #63769, #63793, #63830, #63939, #64340, #64657, #62527, #64088, #60203, #60372, #60685, #60815, #60791, #60864, #60851, #60844, #60694, #60855, #60869, #60948, #61042, #61455, #61580, #61589, #61609, #61616, #61715, #61716, #61759, #61555, #61492, #61805, #61712, #61615, #61713, #62129, #59294, #59865, #60270, #60547, #60698, #60762, #60753, #60966, #60976, #61100, #61203, #61210, #61424, #61213, #61275, #61276, #61279, #61292, #61295, #61298, #61299, #61301, #61302, #61329, #61804, #62745, #62909, #64247, #64308, #60690, #61149, #61145, #61193, #61207, #61229, #61236, #61244, #61242, #61263, #61370, #61410, #61480, #61522, #61540, #61520, #61625, #61700, #61708, #61736, #61889, #61952, #62033, #62637, #62777, #62779, #63226, #63287, #63398, #63431, #64000, #64058, #64059, #64063, #64066, #64089, #64170, #64235, #64237, #64243, #64242, #64286, #64322, #64317, #64490, #60138, #62384, #59702, #60341, #60636, #60714, #60716, #60700, #60702, #60704, #60715, #60713, #60711, #60724, #60803, #61331, #63286, #60473, #61046, #61859, #60675, #60719, #62863, #63013, #61293, #62781, #62935, #63014, #64203, #63349, #59572, #59911, #59861, #60014, #59913, #58889, #60114, #59928, #60180, #60168, #60166, #60250, #60247, #60172, #59661, #58880, #60291, #58881, #58955, #58684, #58708, #60323, #58762, #60048, #60345, #60325, #59627, #60416, #60434, #59801, #60619, #60445, #60666, #60353, #60733, #60693, #60350, #61096, #61121, #61164, #62054, #62136, #62508, #62988, #63472, #60193, #60197, #60198, #60346, #60318, #60645, #60650, #60660, #60706, #60799, #60837, #60817, #60820, #60894, #61079, #61087, #61073, #61072, #61127, #61097, #61365, #61456, #61846, #62217, #62519, #62881, #62880, #59723, #59722, #59797, #59960, #59761, #59996, #60009, #58896, #60051, #60410, #60420, #60548, #60575, #60726, #60809, #61346, #61222, #61099, #62254, #62269, #62362
完善飞桨底层报错检查等机制,方便开发者调试。#62571, #62602, #60903, #64695, #59907, #62018, #62839, #60651, #61488, #64064, #63192, #63525。
漏洞修复¶
3.编译器架构¶
在 3.0 版本下,编译器架构进行了重要升级。基于 Shape Dialect 构建了符号自动推导和化简体系,支持符号表达、约束构建,支撑了编译器动态形状下的端到端执行。同时飞桨编译器 CINN 全新升级了子图自动融合和 Pass Pipline 机制,合并了动、静态形状的核心模块,合并迭代路径,架构清晰统一。在此版本下,编译器在 AST Compute、Schedule 策略、Tiling 等重要后端模块进行了重构,提升了编译器的通用优化能力,在飞桨产业套件模型子图和典型大模型 Llama2-13B、Stable Diffusion 模型上验证了动形状的训练、推理正确性和提速性能。
新功能¶
升级了全新的子图自动融合机制,创新性提出了 TrivialOp 和 ReduceOp 融合理论,支持更广泛的垂直融合和水平融合范围,保障了子图融合的正确性和鲁棒性,充分发挥神经网络编译器的融合潜力(#63340、#63913、#63579、#63605、#60769、#62088、#63124、#63658、#64557、#63318、#62545)
新增支持了动态形状的符号推导功能,基于 Shape Dialect 实现了动态符号构建、自动推导、约束表达、符号化简等机制,引入 DimExpr 概念,升级支持了飞桨框架 150+个典型基础算子的 InferSymbolicShape 逻辑,为编译器支持动态形状下的训练和推理提供更多信息(#60843、#62662、#63790、#60098、#60511、#61232、#61939、#62798、#62955、#63029、#60572、#61035、#61224、#61587、#61937、#62314、#62394、#62569、#62495、#62844、#63000、#63016、#64222、#60129、#60899、#61342、#61439、#62766、#61133、#61430、#61498、#61680、#63367、#62151、#62665、#61407、#61502、#61655、#64115、#61791、#62141、#63422、#63577、#63978、#63576、#63947、#64332、#63990)
新增了 Pass Pipline 功能,包括 PdToCinn、CinnPreprocess、BuildGroupOp、DivideGroupOp、CinnLowering、精度检查等 Pass 策略,统一支持动、静形状下子图的 Lowering 和执行,架构清晰(#61611、#62612、#64354、#61848、#62316、#64152、#61619、#62318、#61977、#62211、#63972、#63686、#64505)
新增支持了 BuketLower 和 DyShapeSchdule 功能,根据动态形状的范围实现自动分桶编译优化;并适配升级了 CodeGen 模块逻辑,支持 InferShape 函数生成和 Host 函数的条件分支分发功能,支撑大模型的动态 Shape 下训练推理加速(#62730、#61115、#59941、#62207、#64318、#64345、#60519、#62584、#60828、#60533、#61436、#62071、#63971、#61656、#63083、#64405、#63047、#64655、#63095、#63829、#63572)
新增支持了编译缓存策略,自动识别、合并和复用相同子图结构的编译结果,使用多线程提升编译效率,提升用户的使用体验(#62952、#63269、#64718、#61367、#63305、#63750、#63871、#64893)
新增支持了 GenerateShape 机制,添加了对应的 AST Compute 算子定义,支持动态符号的自动解析,以及在 Lowering 阶段自动生成 ShapeOp(#64167、#64636、#61993、#64843、#62587)
功能优化¶
性能优化¶
优化了 AST IR 的 Schedule 逻辑,重构了 Vectorize、Unroll、AxisBind、ComputeAt 等核心模块,合并动静形状迭代路径,降低开发维护成本(#60449、#60155、#60342、#60498、#60538、#60190、#61197、#63140、#61156)
优化了 Tiling 策略和 temp Buffer 功能,支持 warp-level 内存连续 Read 和 cache_read cache_write 功能, 提升子图执行性能(#64240、#60562、#64711、#62856、#61576、#61901、#62581、#61987、#60190、#63138、#62517)
支持 Schedule 配置的自动搜索功能,AOT 式离线保存机制实现子图 Kernel 的性能加速(#64271、#64588、#64694、#64620、#64702、#63086)
支持了 OptimizeReductionTactic 优化策略,提升 Reduce 场景下的 kernel 性能(#6066、#61363、#60881、#63859)
增强了 DCE Pass 功能,移除了多余的 If/For 分支代码,提升执行效率(#61682)
新增支持了 FuseParallelMatmulPass Pass,可融合多个 Matmul 算子实现加速(#63623)
Bug 修复¶
修复了部分特殊算子在 Lowering 到编译器时 BUG,提升了端到端使用的用户体验(#60800、#64720、#62593、#62661、#64626、#63320、#64581、#61608、#64135、#64659、#62391、#62490、#63891、#64529)
修复了部分算子符号推导实现逻辑的 BUG(#62141、#62376、#62941、#63322、#64672、#64407、#60241、#60440、#62503、#62997、#63169、#61098、#63973、#62248、#62321、#63755、#63917、#63903、#64173、#64525、#64615、#62247、#62455、#62898、#62867、#63608、#63789、#64085、#64136、#64181)
修复了动静形状下编译器执行结果错误的诸多问题,提升了框架机制的鲁棒性(#60813、#61877、#61909、#62954、#63614、#60339、#60623、#60658、#60669、#58823、#62483、#62742、#61797、#63411、#64077、#62736、#62390、#63689)
4.自动并行架构¶
为了进一步增强自动并行(Auto Parallel)架构在大模型训练场景的可用性,飞桨完善了动-静态图自动并行的功能,包括新增 Sharding、interleaved pipeline 等并行策略,支持 lazy 初始化参数,新增和完善部分算子的切分推导规则等,并在多个主流大语言模型中全面验证了自动并行架构。同时,为打造飞桨全新 3.0 架构,静态图自动并行架构基于新一代中间表示 PIR 进行了全面升级,扩展实现了 DistDialect,在计算图表示中原生支持了分布式属性(DistAttr)和分布式张量(DistTensor),并打通了静态图自动并行全流程,进一步增强了自动并行的动静统一和飞桨架构的统一性。最后,新增和完善了多项性能优化技术,包括 zero bubble pipeline 调度策略等,在 Llama-2 13B/70B 等典型大模型上实现端到端训练性能持平或领先手动并行方式。
功能完善¶
新增 dtensor_from_local 接口,用于从切分后的局部张量创建 DistTensor(与之对应的,shard_tensor 是从切分前的全局张量创建 DistTensor)。#60206
新增 unshard_tensor 接口,用于将 DistTensor 转为全局张量,该接口与 shard_tensor 是互逆操作。#60272
为减少训练时的显存占用,新增 Sharding 策略,包括 stage1,stage2 和 stage3。#61926, #62711, #62486, #62230
为解决先初始化参数再切分参数时可能出现的显存不足问题,新增自动并行参数 LazyInit 功能,支持先切分参数,再初始化参数。#60316, #60441, #60563, #61792
为减少流水线并行的 bubble,新增 interleaved pipeline 并行策略,同时支持通过配置的方式自动将用户组网的 pipeline 并行自动转为 interleaved pipeline 并行,让用户无需在组网中进行复杂的标记。#59751, #60050, #60467, #60868, #60187, #62884, #60560, #61541
新增 stack, gather, scatter_grad, cumsum, unbind, swiglu, fused_linear_param_grad 等算子的切分推导规则,完善和优化 fused_rope, reshape, flatten, fused_rms_norm, slice, tile, flash_attn, cross_entropy 等算子切分推导规则实现,解决在部分模型组网场景中不兼容的问题。#62720, #64202, #63361, #63290, #61460, #59986, #61184, #60144, #62525, #62053, #60709, #60111, #63681, #62180, #60794, #60632, #62439
完善分布式 checkpoint 存储和加载功能,支持 master_weights 存储,修复随机挂问题。#60027, #59872
为支持用户在自动并行组网中使用自定义算子,支持用户在框架外注册自定义该类算子的切分推导规则。 #60509
完善切分转换规则,支持从任意状态转为 replicate 以及从 replicate 状态转换为任意状态。#60281, #59869
新增 MoE 专家并行策略(experimental),目前仅支持动态图自动并行。#63904
修复自动并行与动态图执行、动转静等流程适配的部分问题。#60214, #60546, #62082, #61313, #61840, #60614, #60234, #64813, #61606, #63405, #64334, #60504
性能优化¶
为减少流水线并行中的 bubble,支持 backward 中参数和激活的反向计算拆分,新增 zero bubble pipeline 调度策略,提升训练性能。#62865, #62737, #64534,
为提升序列并行(sequence parallel)的性能,对相关通信操作和计算操作进行 fusion,并优化冗余的 transopse 操作。#64807, #63948, #64316, #64119
优化静态图自动并行图优化耗时,减少从启动训练到第一个 step 完成的延时。#59912, #61817, #60022, #60125
优化自动并行动转静下参数的的冗余显存占用。#62746
完善自动并行的混合精度训练功能,支持设置局部 auto_cast 和黑白名单,支持 master grad 功能,适配不同的并行策略等。60158, #59987, #62629, #60385, #62015, #60514, #61221, #60779, #63228
静态图自动并行架构升级¶
基于新一代中间表示 PIR,新增 DistDialect,在计算图表示中原生支持了分布式属性(DistAttr)和分布式张量(DistTensor),实现了分布式属性和张量或算子的直接绑定,使自动并行架构更简洁统一。#63828, #64299, #63870, #64144, #62524, #62630, #62897, #60478, #60574, #63876, #63798, #62560, #63676
完成自动并行 PIR 新架构对 shard_tensor、reshard、to_static 等 API 的适配,支持用户将动态图模型组网直接转成 PIR 静态计算图进行优化和训练。#62945, #62356, #60175, #62654, #63347
优化静态图自动并行的图优化编译过程,通过重构优化静半中计算图切分和通信解析两个主要过程的实现,减少静态图编译优化耗时。#64137, #62201, #64143, #62560
优化静态图中切分推导规则的调用流程,实现切分推导结果在动-静态图下的一致,提升了架构的统一性和稳定性。 #62659, #62547, #63117, #63434, #63770, #64361, #63073
升级静态图中张量切分转换的实现,动-静态图下使用一致的切分转换通信规则,保障动-静态图下张量切分转换执行逻辑和结果的一致性,提升用户体验。#62718, #62694, #60215, #63362, #63072, #63962, #64223, #61796, #64465, #64623, #64418
5.Cuda 训练性能优化¶
本次升级从算子计算效率、分布式通信优化、显存优化等多个角度实现了大模型训练效率的提升。
功能完善¶
FlashAttention 算子功能增强,包含支持 NVIDIA SM90 GPU 编译,支持 Group Query Attention,支持 cuDNN 接入,支持 QKV-packed 形式输入等。#59820,#60776,#58680,#63289
repeat_interleave 算子添加 BFloat16 数据类型的支持。#61854
针对 fused_scale_bias_add_relu、fused_scale_bias_relu_conv_bn、fused_dconv_drelu_dbn 等 ResNet 类模型接口参数多、算子易用性查等问题,添加了 fuse_resunit pass,支持上述算子的自动融合,实现通用性能优化。(#59771)
性能提升¶
针对 Llama 类模型 SwiGLU 激活模块计算过程显存占用较大的问题,新增了 SwiGLU 融合算子,节省中间变量的显存占用,从而降低大模型训练过程显存开销,减少重计算以提升性能,Llama-70B 模型性能提升 9%。 #61508
针对序列并行(Sequence Parallel)过程通信占比较高的问题,实现了序列并行反向过程通信与 Matmul 计算的 overlap,节省端到端耗时,在大模型训练场景端到端性能提升 1%~2%。#62284,#63531
针对 Sharding 反向通信后仍需要除以 nranks 导致训练速度慢的问题,支持了反向通信与除以 nranks 运算的融合,支持 ReduceScatter Average 的模式,提升大模型训练性能。#62623
针对张量模型并行过程输入数据广播过程导致训练速度抖动的问题,修复了数据广播过程的不必要的 CPU 和 GPU 间的同步,保证训练速度的稳定性。#60816
针对流水线模型并行 P2P 通信时间较长导致训练速度低下的问题,实现了 P2P 通信与前反向计算的 overlap,大模型端到端训练性能提升 2%~3%。#61935,#62051
针对 fused_linear_param_grad_add 算子 bias 梯度计算效率低下问题,优化了 bias 梯度计算环节的计算效率,大模型端到端训练性能提升 0.2%。#63114
针对 Sharding 反向计算结束后参数广播过程耗时较长的问题,实现了参数广播与下一个 step 计算的 overlap,大模型端到端训练性能提升 2%以上。#63945
针对流水线并行训练过程梯度占用显存过高从而引入过多重计算导致训练速度慢的问题,实现了梯度动态释放技术,大模型端到端训练性能提升 3.4%。#59739
6.分布式策略增强¶
重点强化了飞桨动态图分布式计算功能体验,对 AutoTuner、流水线并行、Sharding 等并行策略做了多方面的功能改进,增强了大模型训练的灵活性;新增 Flash Attention Mask 等功能,显著降低大模型训练特别是长 sequence 训练的显存占用,提升训练性能,为大模型训练提供更强的能力支持;另外修复了若干 Bug 以及潜在的安全性风险,显著提升了系统整体稳定性。
功能优化¶
优化了 Autotuner 的搜索空间,大幅提升了搜索的性能。#62608
针对流水线并行中由于在 eval 过程检查发送类型,导致训练可能出错的问题,增加训练配置,跳过流水线发送的冗余接收检查,灵活性更高、性能更好。#63001
在动态图流水并行中,增加了发送和接收数据的大小和类型的的检查,增加报错信息,使得鲁棒性、可调试性更好。#59405
支持动态图流水并行设定多个损失函数,并返回多个 loss,提升了动态图流水线的灵活性。#63167
在动态图流水并行中,增加流水线缓存清除配置选项,可以及时清除流水线中发送和接受的 cache,更好的支持动态 batchsize 训练。#62277
针对 sharding stage3 策略无法逐位对齐的问题,将无序的 set 集合换成了有序的 OrderedSet,避免了累加顺序导致的误差,修复完后可以逐位对齐。#60085
为了进一步降低针对序列并行中显存占用,新增重计算 allgather 的方法,减少 allgather 的 activation 的显存大小。#64244
动态图新功能¶
针对 autotuner 的搜索空间,新增了 refined recompute 的搜索维度,使得搜索结果更精准,调优模型的门槛更低。#62430
针对虚拟流水线并行中,需要限制训练批大小的问题,修改了流水线调度方式,解除批大小限制,支持更灵活的批大小。#61561,#60314
针对使用 flash attention 具有 mask 时,mask 的显存占用随序列长度呈二次方复杂度、性能低的问题,使用稀疏的 mask 表达、优化 mask 的显存,显存复杂度从序列长度的二次方降低为一次方,减少了存储的访问次数,同时使用 share memory 加速访存,大幅提升性能。#62029
动态图 Sharding 并行策略新增完善通信和计算 overlap 功能,提升训练过程中的性能。#60455
通信库功能优化¶
Bug 修复¶
修复 fused_linear_param_grad_add_kernel 算子 dbias_out 空间申请问题,同时增加梯度地址检查逻辑,使得报错信息更易调试。#363433,#64460
修复 sharding 策略在支持 reduce_avg 操作中、comm_overlap 在关闭时未对梯度进行缩放的问题。#62702
解决 Stage2 中 main grad 计算顺序、fusion 相关的 bug。#59142
修复 sharding 策略下,当开启 reduce_avg 通信操作时,无法找到该开关属性的问题。#62502
sharding stage1 训练支持非训练参数训练,解决部分参数设置 stop_gradient=True 的问题。#62616
修正 TCP 关闭时打印的信息,防止误导用户。#62631
针对数据并行训练中,部分梯度没有初始化,出现 segmentation fault 错误,修改 DataParallel 训练问题,解决多卡训练出错的问题。#62299
针对开启序列并行的场景,修复了部分模型因为权重冻结而导致的 bug。#63596
针对单路 dp 的 autotuner 场景,修复了一些 bug。#60757
修复流水并行策略 aadiff bug。 (#64716)
移除部分分布式单测。 (#62762)
7.参数服务器¶
本次更新主要修复了参数服务器使用过程的若干 bug 以及编译安装等问题。
Bug 修复¶
针对 unique 算子读写越界的问题,修复了 unique 算子计算过程长度设置错误问题,保证 unique 算子运算正确性。#60840
针对 PGLBox 训练过程 save/load 功能缺失以及编译错误等问题,修复了 PGLBox save/load 和编译过程的若干 bug,保证了 PGLBox 功能的正确性。#63905
针对 CPUPS 训练过程触发 GPUPS 逻辑导致训练挂掉的问题,修复了 CPUPS 中 use_ps_gpu 的设置值,保证 CPUPS 训练流程的正确性。#61406
针对 GPUPS 在 CUDA 12.3 中训练出 cudaErrorInvalidResourceHandle 错误的问题,加入了 device id 切换机制,保证在正确的设备上进行对应的资源操作。#63391
针对 PGLBox Embedding Dump 过程出现乱码的问题,修复了 C++ std::string 使用不当的 bug,保证 Embedding Dump 结果的正确性。#65179
8.推理部署¶
推理框架基于 PIR 升级了 GPU、XPU、CPU 硬件下 PASS,相比上个版本可大幅减少代码行数,提升开发效率。底层执行器升级到了新版异步执行器,在大多数模型上提升推理性能。完成基于 CINN 编译器进行推理加速的适配对接。针对这些特性增加了开关,用户可设置开启。此外,Paddle Inference 还支持了原生与 TensorRT 子图混合推理下直接加载优化后的序列化模型,可以减少启动时耗时。针对 Paddle-TensorRT 增加灵活控制节点计算精度、子图是否进入 TensorRT 计算等接口,方便调试。 性能优化上,GPU、XPU、CPU 都增加了较多 Transformer 及 LLM 计算加速的融合算子,如分组注意力机制融合算子、GQA 结构、WINT4 等支持,并支持通过 PASS 自动匹配。
新增功能¶
Paddle-TensorRT
Paddle-TensorRT 底层调用的 API 升级,在 TensorRT 版本大于 8.5 以上时,调用的 EnqueueV2 API (后续会被废弃)升级为 EnqueueV3 API。#60807
增加配置 config.exp_disable_tensorrt_subgraph()可以设置一些子图不进入 TensorRT。#61967
增加配置 config.exp_disable_tensorrt_dynamic_shape_ops()可设置动态 shape 输入的算子不进入 TensorRT,默认值为 False。#62352
增加配置 config.exp_specify_tensorrt_subgraph_precision()可以设置节点跑不同的精度类型。#62402
Inference 中增加开启 CINN 编译器的开关,配置推理 config 时,通过 config.enable_cinn()开启 CINN。#61949
Inference 升级使用 PIR 机制
多层 Transformer 融合算子 fused_multi_transformer_op 融合算子支持 GQA 计算。#64125
功能完善¶
推理支持直接加载优化后的模型,使得可以完全跳过 IR 优化,使用该方式部署可以最大程度降低框架开销。#61598
支持加载保存下来的经过 IR PASS 优化后的模型推理时,重新指定 shape 范围信息文件。#60457
控制流算子的子图内可收集 Shape 信息,支持使用 Paddle-TensorRT 推理加速。#60451 ,#59588
GPU 原生推理的混合精度 PASS(auto_mixed_precision_pass)支持处理稀疏 Tensor。#62656
XPU 硬件相关
Paddle TensorRT INT8 计算模式下支持 tile 算子进入 TensorRT 计算,提升部分模型 INT8 性能。 #60189
模型压缩¶
主要针对训练后量化(Post Training Quantization,PTQ)和量化训练(Quantization Aware Trainig,QAT)做了 bug 修复和功能优化。
性能优化¶
推理执行器升级,保正性能不变情况下,大幅度降低运行时显存占用,可通过 config.enable_use_executor(True)来使用。#57920,#58452,#63350,#64466
升级 paddle inference 的 oneDNN 版本到 v3.4,其中整体性能相比 v3.3 版本有提升。 #64661
升级基于 CUTLASS 支持矩阵乘与激活的融合计算。 (#61925)
PIR 机制下新增通用 PASS¶
添加 identity_op_clean_pass 和 matmul_scale_fuse_pass。 #59840
添加 fused_flash_attn_pass,该 pass 会调用 flash_attention 替换原始的 attention 计算。#64213,#64707,#63304
推理 PIR 新架构下全新升级 layout 布局调整算法,支持 conv 类、norm 类等算子的 NHWC 推理,在 SD 模型上测试大幅提升性能。#63628,#64634,#64658,#64708,#64830,#64896
增加 remove_redundant_transpose PASS。 #63357
在推理中使能 CSE PASS,提升推理性能。#64523
GPU 性能优化¶
含新增融合算子及 PIR 机制下新增 PASS。
稀疏卷积算子(sparse conv)性能优化,提升 BEV 等模型的推理性能。#63067
新增基于 flash attention 的融合 PASS。 #63220
理支持 elementwise_add+group_norm+silu 激活的算子融合 pattern 及其对应融合 kernel。#64199
矩阵乘计算支持 groupwise 的 Weight only INT4 计算。#60422 、#63212 、#60204)
分组注意力机制融合算子 block_multi_head_attention 的算子实现支持 KV Cache 量化。#59951)
推理使用 CUTLASS 升级 conv 融合算子实现并支持 PASS 自动融合支持 bias 与 activation,新算子相较原先 cuDNN 实现有显著的性能加速。需通过 config.exp_enable_use_cutlass(True)使用。#64201、#64641
添加 blha_get_max_len 算子并去除了 block_multihead_attention 中每次调用 get_max_len 的行为,该功能应用于大模型动态推理加速。#64246
数据排布优化 PASS 禁止 conv 融合算子 FP32 精度类型时使用 NHWC 模式计算,原因是 cuDNN 在此条件下会导致性能退化。#63400
GPU 峰值显存优化,升级底层接口 TryShrinkMemory 升级支持 GPU place 下支持释放显存池空闲显存,某些场景下可大幅度削减峰值显存。#61319
CPU 性能优化¶
含新增融合算子及 PIR 机制下新增 PASS 并优化部分 Kernel。
添加 scale_matmul_fuse_pass #63313
融合算子 fused_bias_residual_layernorm 和 fused_rms_norm 添加 CPU 实现,大幅度推理速度。#63196、#63165
新增 Deconvolution kernel 的缓存优化,从而大大提升该算子的执行速度。 #60922
PIR 下新增 depthwise_conv 融合 PASS,将 depthwise_conv 算子转换为 conv2d,从而使用 onednn conv2d 的 kernel 优化,提升该算子推理速度。 #63051
PIR 下新增 Conv 与激活的融合 PASS(conv_activation_mkldnn_fuse_pass),支持 conv 和 13 种激活函数进行融合,大大提升 conv 相关算子的推理速度。 #63145
PIR 下新增多种算子和 unsqueeze 的算子融合 PASS(operator_unsqueeze_onednn_fuse_pass),提升推理速度。 #63592
PIR 下新增将 reshape 融合进多个算子的 PASS (operator_reshape_onednn_fuse_pass)。 #63812
PIR 下新增 scale 融合 PASS (operator_scale_onednn_fuse_pass)。 #63811
PIR 下新增 conv 与 bias 融合的 PASS (conv2d_transpose_bias 算子) 。 #62241
PIR 下新增 onednn_placement_pass,支持了 151 种算子从 Phi 算子转换为 oneDNN 算子,从而使用 oneDNN 高性能库进行优化,提升推理速度。 #63982
PIR 下新增 elementwise 类型算子和 13 种激活函数的融合,大大提升 cpu 下开启 onednn 的推理速度。 #63516
PIR 下新增多个 conv + concat + 激活函数和 fused_conv + concat + 激活函数的融合,大大提升了 conv 下有 concat 和激活函数的情况下推理速度。 #62993、 #62713
PIR 下新增 matmul+add 算子融合 PASS (matmul_elementwise_add_fuse_pass)。#62715
PIR 下新增 scale 参数折叠 PASS(scale_matmul_fuse_pass)。#63313
PIR 下新增 softplus 与 12 种激活函数融合 PASS(softplus_activation_fuse_pass)。#63617
PIR 下新增 fc 算子转换 PASS(fc_onednn_enable_pass)。#63518
PIR 下新增自注意力算子融合 PASS(self_attention_fuse_pass)。#63726
PIR 下新增 fc 与 12 种激活函数融合 PASS(fc_activation_fuse_pass)。#63853
PIR 下新增 BatchNorm 折叠 PASS(conv2d_bn_onednn_fuse_pass),扩增后续 pass 的融合几率。#64524
PIR 下新增 matmul 与 12 种激活函数融合 PASS(matmul_activation_fuse_pass)。#62901
PIR 下新增 reshape + transpose + reshape 融合 PASS(shuffle_channel_detect_pass),在特定条件下融合为 shuffle_channel 算子。#64053
PIR 下新增 reshape + transpose + matmul 融合 PASS(reshape_transpose_matmul_fuse_pass)。#62998
PIR 下新增 matmul + transpose + reshape 融合 PASS(matmul_transpose_reshape_fuse_pass),在部分场景下显著提升性能。#63151(https://github.com/PaddlePaddle/Paddle/pull/63151)
Bug 修复¶
修复 faster_rcnn_swin_tiny_fpn_1x_coco 等模型中的混合精度转换问题,解决了 mixed_precision_pass 的错误。 #64673
阻止 fused_conv2d_add_act pass 在激活函数为 sigmoid 中被生效(cudnn 版本 8.0~8.7 之间时,融合 conv2d 和 sigmoid 会导致性能退化)。#64717
修复 self_dp_attention 和 fused_layer_norm_avx_kernel 在 Clang12 中的编译问题。 #63414
修复部分模型在 IR/Pass 阶段 qdq 算子中的 scale 和 zeroPoint 过早删除的问题。 #62225
修复同时开启 Config.UseOptimizedModel()和 config.EnableMemoryOptim()时导致报错的问题。 #62501
增加 matmul_scale_fuse_pass 的约束,其中输入 w 必须是权重,否则不会匹配该 pass。 #62850
保持 inference 模型输出键顺序保证与动态图模型导出时的顺序一致。 #63791
修复子图在常量折节 PASS 在”被折叠的 op 和其输入输出不在一个子图时”出错问题。 #62148
修复 PaddleTRT 模式下若干运行时问题。包括 int8 模式下 yolo_box 算子引起的量化校准表生成失败、reduce 算子 dim 属性数据类型未正确处理引起的报错。#61596
修复混合精度推理模式下若干运行时报错问题。包括 fused conv2d 算子间共享权重未正确转换权重 layout、fused conv2d 算子 backend 未正常选择为 cuDNN、fused conv2d 算子在 NHWC 下错误处理 bias 维度、错误处理 norm 类算子的输入数据类型引起的报错。#60955、#60076、#63007、#63988
修复 config.delete_pass 功能未生效问题。#61056
PIR 中修复 While 控制流的 GC 机制,提前回收不需要的输入,减少峰值显存,例如在 LLaMA 7B 模型中减少 2GB 显存。#63062
修正了 OneDNN mean kernel 回退错误。 #64676
修正 conv_bias_fuse_pass 新增了若干强约束, 例如 bias 的 shape 不能为 1,从而保证 pass 推理结果稳定。 #64412
修正 conv_elementwise_add_onednn_fuse_pass 新增了若干强约束,例如 conv2d_out 和 residual_param 的尺寸必须一致,从而保证 pass 推理稳定。 #64448
修复在特定情况下,反复插入量化反量化算子的问题 #63082
9.硬件适配¶
适配方案 (Custom Device)¶
飞桨硬件接入本次新增了对 4 款硬件昆仑 XPU、昇腾 NPU、海光 DCU 和寒武纪 MLU 的日常发版支持,同时通过大模型训练和推理部署的打磨修复了分布式通信中存在的问题,并通过显存优化、计算和通信的 overlap 等功能进行性能优化。其次、本次各个硬件还新增了大量 BFloat16 数据类型的算子支持,以及众多算子融合 Pass 和各个硬件上的融合算子,通过软硬联合的方式接入硬件大 Transformer 算子库来充分提升大模型性能。
新增功能¶
新增分布式策略 sharding stage1 v2 的支持。#61500
支持分布式通信模块支持 BF16 数据类型。新增部分算子对 BF16 数据类型的支持,如 empty、shape 等。#60768,#62140,#62604
新增 get_comm_name 接口的支持,对 memory stat 功能支持, 支持 Profiler 对内存时间的记录。#62556,#61030,#62292
新增部分融合策略和算子的支持,包括 silu_fuse_pass, conv_elementwise_add_act_fuse_pass, generator offset 的支持。 #60595,#60708,#60616
性能优化¶
Bug 修复¶
修复分布式策略 Sharing 下的错误。#61942,#62236,#62305,#62535,#62572,#61601
修复 c_embedding 算子不在 PHI namespace 下导致的算子无法注册的问题。#60774
修复 xccl_comm 释放问题。#60465
修复 index_put 算子 fallbacking cpu 时导致的数据地址错误。#61842
修复 stream_safe_custom_device_allocator 的问题。#63369
修复分布式下 worker 端口冲突问题。#61409
修复 comm 数据类型以提升设备兼容性。#62306
修复 PD_ConfigEnableCustomDevice 缺少 precision 参数问题。#63702
昆仑 XPU¶
新增功能¶
新增部分算子对 BF16 数据类型的支持,包括 compare_kernel 与 add reduce_all_kernel(#63602)、empty(#60212)、hybrid_parallel_optimizer(#60213)、reduce_max/reduce_min(#60453)、all_reduce/concat/split(#62364)、tile/tile_grad(#63075)、accuracy(#63863), swiglu/set_value(#64070)、amp_master_grad(#63865)、c_concat (#63403)、flatten (#63997)、compare_op (#64473)、moment1/moment2 (#62688)、fused_rope (#60064)、c_softmax_with_cross_entropy (#60472)、elementwise_pow/square/sin/cos (#60402)、strided_slice (#60382)、tile/sigmoid_grad (#60119)、 elementwise_sub/elementwise_div (#60386)、softmax_with_cross_entropy (#63759)
新增部分算子对 INT8 数据类型的支持,包括 multi_encoder_xpu (#61212)、qkv_attention (#63105)
更新昆仑 SDK 版本包括 BKCL、XHPC、XCCL 等。 #59895、#59888、#63624, #60305, #62076, #62646, #63520, #64163, #64326, #60617, #60377, #60421, #60598, #61199
新增对 memory stat 功能支持。#61116
新增多 stream 支持,且可以给每个 stream 分配默认的 l3/gm buffer 大小。 #62729
新增 nonzero 算子支持支持 simulator XPUSIM_SKIP_RUN 模式。#60224。#60388
新增 stride_slice 和 stride_slice_grad 算子支持 strides < 0。 #62749
新增 rotary_embedding 对 use_neox_rotary_style == True 的支持。#64090
新增融合 Pass 和融合算子,包括 cross_attention (#63203)、fused_bias_act (#62232)、fused_layernorm (#62228)、group_norm_silu_xpu_fuse_pass (#63342)
新增对分布式策略 sharding stage3 的支持。 #57457
新增 tf32 fc quantization 模式的支持。#62273
新增 flash attention 算子。#60065
新增 roformer relative embedding pass & kernel 并支持 multi_encoder_xpu。#62089
新增 pp + sharding 策略支持。#63640
升级 XPU 通信库架构以支持动静统一的通信库功能。#63817
性能优化¶
新增 XHPC buffer manager 以提升 Paddle 和 XHPC 内存协同性能。 #63924
融合多个 group norm + silu + conv 模块, 压缩显存。#62892
优化 comm manager 中 XPU 显存分配。#64139
优化算子性能,包括 mean_all_grad (#61148)、dropout_v2 (#61029)、fused_rotary_position_embedding (#62846)、cross_entropy (#63159)、elementwise_add (#64289)、fused_gemm_epilogue (#61350、check_nan_or_inf (#60853)
XPU 硬件下新增 qk_qkv_attention_xpu_fuse_pass 和 qkv_attention_xpu_kernel。 #60089
XPU 硬件下新增 rotary position 编码的融合算子支持 elementwise_mul + strided_slice + sin/cos+ stack 融合为 1 个算子。 #60025
添加 group_norm_silu_xpu_fuse_pass。 #62689
添加 weight_only_linear_xpu_pass。 #64185
新增 block_multihead_attention 算子及 PASS,支持 LLaMA2 模型在 XPU 设备中的大模型推理。 #65036
支持 squeeze_excitation_block_xpu_kernel 的 float16 类型。 #61023
Bug 修复¶
修复 tile 算子对 0 维 Tensor 的支持。 #64279
修复 group_norm_silu_fuse_pass。 #63449
修复分布式策略 Sharing stage1 v2 的错误。#64209
修复 XPU constant 问题。#60763
修复部分算子问题,包括 AdamW (#62251)、dropout_v3 (#62726)、softmax(#63780) 、fused rope embedding (#62143)、elementwise_add (#60252)、resnet_basic_block (#62914)
修复 XPU 编译 bug。#63307
修复 XPU 通信库初始化时端侧内存相关的 bug。#64396
10.环境更新¶
此版本飞桨完成基础依赖库的发版和更新同步,移除了不再更新的老旧依赖库。完成了多项优化提升编译效率、兼容性,完善 CI 流水线监测功能以提升用户安装体验。修复了多个已知编译问题,完善 paddle 的编译系统,新增了一些特性支持。通过相关优化工作,飞桨框架的编译安装体验进一步提升,给开发者带来更好的使用和开发体验。
新增支持¶
编译优化¶
优化了 paddle 的 CMake 代码,显著提升了编译效率和编译体验。##59995,#60167,#61052,#59995,#59607,#63093,#63887,#62969,#64007,#59811,#63045,#60235,#60240,#60235,#61411,#61944,#61961,#59990,#59478,#61501,#60066,#64133,#64231,#60087,#60348,#60737,#61364,#63214,#62454,#62473,#63692,#63950
支持在 linux 和 windowx 下 C++单测链接动态库,大幅减少 C++单测的体积大小和整个 build 目录大小。#60008,#60960,#60960,#60961,#60831,#60832,#60833,#61372,#60834,#61374,#61463,#61376,#60830,#61373,#61672,#61375,#61676,#62036,#61945,#61675,#61674,#62773,#61238,#59988,#60307,#59612,#59942,#59968,#59978,#60121,#60149,#60161,#60160,#60230,#60154,#60356,#60392,#60517,#61131,#60959
新增对 Clang 编译器的支持,用户现在可以使用 Clang 进行编译,享受更快的编译速度和更好的报错信息提示。#63382,#63133,#61705,#63152,#63373
CI 流水线改进¶
代码清理¶
Bug 修复¶
修复多个 paddle 框架的编译问题。#63297,#62994,#62651,#64408,#60934,#62899,#60528,#63158,#64549,#62351,#61259,#61281,#62304,#60736,#60811,#63949,#59892,#60767,#60856,#61286,#61638,#62079,#62142,#62823,#62814,#62425,#62619,#60207,#60765,#61870,#61923,#62144,#62426,#63848,#60682,#61369,#62882,#63944,#64812,#60654,#60887,#62058,#64639,#60115,#61940,#62614,#59914,#63762,#60145,#60285,#60378,#60393,#61057,#61058,#61151,#61347,#61554,#61844,#62915,#61852,#61704,#61991,#62264,#62762,#63820,#63864,#65017,#61183,#59866,#61171,#61290,#61725,#61614,#61721,#61494,#61556,#61689
11.文档相关的问题修复¶
随着 API 功能增强工作的开展,对部分 API 文档也同步进行了修正和增强。#62875, #59793, #60002, #59985, #63365, #60962, #60942, #64232, #63255
更新/补充 API 文档。bernoulli_ (#64504),paddle.static.ctr_metric_bundle (#60912),LayerNorm (#62928),Sequential (#63128),paddle.summary (#63121),AutoParallel 中的 ShardOptimizer (#62933),paddle.nccl.version (#62480)
修改了代码中大量的错别字,增强源码可读性。#60093,#60603,#60631,#60679,#60741,#60770,#60784,#60825,#60857,#60891,#60921,#60920,#60923,#60928,#60940,#60936,#60932,#60935,#60931,#60951,#60964,#60965,#60967,#60972,#60971,#60980,#60984,#60985,#60989,#60990,#60991,#60992,#60994,#60995,#60996,#61001,#61000,#60999,#60998,#61026,#61009,#61034,#61033,#61020,#61092,#61066,#61063,#61089,#61071,#61129,#61128,#61126,#61123,#61113,#61189,#61175,#61153,#61198,#61206,#61256,#61255,#61251,#61246,#61245,#61231,#61247,#61265,#61264,#61266,#61267,#61268,#61270,#61334,#61392,#61404,#61318,#61383,#61306,#61324,#61426,#61390,#61419,#61420,#61408,#61425,#61557,#61628,#61652,#61602,#61558,#61660,#61423,#61627,#61685,#61690,#61727,#61738,#61740,#61741,#61743,#61744,#61745,#61761,#61762,#61764,#61767,#61768,#61774,#61781,#61783,#61757,#61732,#61776,#61780,#61730,#61728,#61633,#61720,#61734,#61779,#61775,#61773,#61787,#61687,#61747,#61760,#61782,#61800,#61748,#61772,#61786,#61880,#61718,#61742,#61766,#61835,#61838,#61754,#61833,#61749,#61938,#61919,#61924,#61778,#61839,#61879,#61929,#61801,#61788,#61999,#61928,#61958,#61982,#61996,#61953,#61998,#62003,#61921,#61881,#61746,#61955,#62002,#62001,#61997,#61765,#61956,#62004,#62044,#62040,#62043,#62042,#62041,#62039,#62019,#61910,#61882,#61836,#62013,#62055,#62047,#62000,#62048,#62075,#62038,#62045,#62105,#62214,#62212,#62183,#62182,#62181,#62179,#62178,#62172,#62168,#62163,#62162,#62161,#62160,#62046,#62175,#62259,#62258,#62213,#62260,#62290,#62288,#62323,#62319,#62331,#62330,#62329,#62324,#62317,#62311,#62310,#62308,#62289,#62307,#62315,#62406,#62458,#62459,#62481,#62465,#62462,#62453,#62496,#62457,#62537,#62514,#62548,#62544,#62575,#62463,#62643,#62803,#62924,#63037,#63102,#63139,#63092,#63147,#60518,#60485,#61273,#63429,#61954
12.其他升级内容¶
与用户使用无关的改动,包括废弃代码清理、无用单测清理、调试或者监控机制升级等。#63377,#64106,#64220,#64293,#64464,#64944,#63638,#63732,#63735,#63826,#63982,#63737,#64471,#64574,#64494,#62775,#63601,#62564,#63772,#64719,#61640,#63459,#64062,#63480,#63833#63673,#63672,#64131,#64156,#64155,#64159,#63902,#64230,#64229,#64236,#64260,#64175,#64250,#64269,#64238,#64349,#64394,#64402,#64401,#64388,#64329,#64502,#64501,#64515,#64503,#64514,#64601,#64564,#64012,#64697,#64682,#64051,#63267,#63426,#63626,#63257,#63266,#63468,#63262,#63248,#63241,#63252,#63258,#63235,#63399,#63488,#63487,#63466,#63464,#63483,#63486,#63475,#63489,#63470,#63457,#63493,#63561,#63584,#63587,#63586,#63569,#63559,#63558,#63555,#63543,#63589,#63583,#63565,#63564,#63265,#63562,#63591,#63460,#63238,#63631,#63707,#63714,#63854,#63929,#63532,#59628,#62209,#63742,#60518,#62078,#62684,#62723,#64141,#60404,#64212,#60652,#64545,#64477,#64556,#63160,#63796,#64693,#64484,#64677,#64461,#63189,#63855,#63896,#63193,#63200,#63406,#61283,#63607,#64486,#64004,#63132,#63553,#63572,#63794,#63919,#63980,#62917,#64451,#63541,#63703,#64536,#63264,#63335,#63841,#64628,#63419,#62210,#63557,#63064,#61442,#63537,#63839,#60927,#60566,#60842,#64612,#60047,#63898,#60415,#60474,#60439,#60565,#64414,#62526,#54183,#64096,#61325,#60629,#61051,#62103,#63594,#60968,#64613,#64073,#63816,#64416,#62499,#64531,#63827,#59885,#59949,#63428,#63218,#63538,#64497,#63082,#64395,#60183,#63691,#64428,#64648,#64650,#59926,#59750,#60080,#60208,#64124,#64187,#64166,#64284,#64253,#64555,#59878,#64081
13.贡献者名单¶
6clc, Android zhang, Asthestarsfalll, Ataf Fazledin Ahamed, Aurelius84, AyaseNana, Baizhou Zhang, bapijun, BiynXu, Botao Zhou, Bo Zhang, bukejiyu, caozhou, chalsliu, Chang Xu, Charles-hit, chen2016013, Chen Zhiyang, C.J.0_0, cmcamdy, co63oc, coco, cyber-pioneer, cyberslack_lee, danleifeng, diadestiny, Difer, Dmovic, Eddie-Wang, Eddie Zhang, engineer1109, enzodechine, fanhaoxuee, feifei-111, flying-forever, Frank Lin, freeliuzc, fsczz, Galaxy1458, GGBond8488, Ghost Screaming, gongweibao, gouzil, Guoxia Wang, handiz, HankYang, Haohongxiang, haosicheng, hess, hjyp, hong, Hongqing-work, Hongwen Xin, HongyuJia, houj04, huangjiyi, Huihuang Zheng, hxzd5568, hyDONG, HydrogenSulfate, idontkonwher, iLeGend, Jeng Bai-Cheng, Jianbang Yang, Jia Wenxuan, JYChen, jzhang533, JZ-LIANG, Kai Song, kangguangli, kevin, Kunbo Ding, lanxianghit, Leo Chen, Leo Guo, lijialin03, lijin23, linkk08, Liujie0926, Liuyinfeng, liu zhengxi, liuzhenhai93, liym27, LiYuRio, lizexu123, LoneRanger, Longzhi Wang, Lucas, Lu Qi, lzy, lzydev, MayYouBeProsperous, megemini, Meiyim, ming1753, Mingdong Wang, ndren, NeroLoh, NetPunk, Nguyen Cong Vinh, Nyakku Shigure, Omri Alon, onepick, ooo oo, pangengzheng, PommesPeter, Qi Li, QingshuChen, Qi Shao, RedContritio, Reese Wang, RichardWooSJTU, risemeup1, Roc, ronnywang, Ruibiao Chen, Ruibin Cheung, RuohengMa, Ryan, Shaopeng Ling, ShenLiang, Shijie, Shuhao Liang, Siming Dai, skywalker2012, smallpoxscattered, sneaxiy, Sonder, Sunny-bot1, Tao Luo, tc20042008, Terry, Tian, tianhaodongbd, tianshuo78520a, Tianyu Feng, Tian Zheng, Tongkai, Travis-Lee, unseenme, Vigi Zhang, walkalone20, Wang Bojun, wanghuancoder, wangna11BD, Wang Xin, Wangzheee, WangZhen, wanly young, wawltor, wendaxiao, Wen Sun, wentao yu, Wenyu, wenzhe.wang, Winters Montagne, winter-wang, WoWYoYLoL, Wu Chencan, Wu Fei, wuhuachaocoding, Xianduo Li, XiangGao, XiaociZhang, xiaoguoguo626807, xiaoxiaohehe001, Xiao Xiyuan, Xiaoxu Chen, xiaoyao0115, xiaoye, xingmingyyj, Xinyi_LI, Xinyu Yang, xiongkun, xuxinyi389, xysheng-baidu, yangguohao, YibLiu, Yichen Zhang, yinfan98, yinwei, Yiqun Liu, YKTian, Yuang Liu, Yuanle Liu, YuanRisheng, yuguo, yujun, yulangz, YUNSHEN XIE, zbt78, ZelinMa557, Zero Rains, Zeyu Chen, zhangbo9674, Zhang,Lirong, Zhang Ting, zhangyikun02, zhangyuqin1998, Zhan Rongrui, zhaohaixu, zhaoyingli, Zhenghai Zhang, zhengzhonghui, zhink, ZhouMengLei1999, zhouzj, zhupengyang, zhurou603, zhuyipin, zhwesky2010, Zichao, zxcd, zyfncg, zyt1024, 东百月, 傅剑寒, 周周周, 周波涛, 张春乔, 萧