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 功能增强

API 性能提升

  • 对 Tensor 基础索引、高级索引和联合索引的性能进行了集中优化,在 GPU 上的计算性能较此前提升 2 到 31 倍,CPU 上提升 1.8 到 1004 倍。#60254, #60276, #60452, #60771, #61021, #60983, #61060, #60618

Bug 修复

  • 修复 paddle.optimizer.LBFGS 中使用非 Tensor 进行计算导致的报错。 #60219

  • 修复 paddle.optimizer.LBFGS 中随机数不能固定的问题。 #60591

  • 修复 set_value 算子梯度计算不正确的问题。 #59034

  • 修复 Tensor 基础索引适配 PIR 的问题。 #60259, #61103

  • 修复 Tensor 联合索引赋值时的问题。#60376, #60447

  • 修复 Tensor 联合索引取值时的问题。 #61922

  • 修复 paddle.flatten stride 计算错误问题,并能够新增paddle.flatten_#63084

  • 修复 paddle.index_fillpaddle.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

  • 修复 分布式场景中的 dataloader 问题。 #62696, #63378

  • 修复 error 提示的格式问题。 #63106, #63144

  • 修复 GLOG_v>=6 下格式问题。 #63345

安全改善

  • 增强对 parent_ids 的检查。 #62826

2.基础执行架构

PIR 基础功能全面升级完善,成熟度大幅提升,基于 PIR 使飞桨基础架构设计更合理、保证了框架卓越的性能表现和良好的拓展性。在此版本中,完成了 PIR 多场景的推全验证:单机场景完成动转静场景 PIR 后端切换;推理场景完成全部存量模型验证,并在 84.2%模型有 10%+收益;完成分布式场景基于 PIR 的验证。同时基于 PIR 完成控制流、backward 逻辑、save/load、OneDNN 适配等核心模块的开发验证,为飞桨 PIR 切换为默认模式,奠定了坚实的基础。对飞桨框架算子体系的功能完备性、执行效率和稳定性进一步提升,给开发者带来更好的使用和开发体验。

功能优化

PIR 新功能

动转静功能优化

优化动转静基础能力,适配 SOT 训练场景下的动态维度,支持 Python3.12。

算子机制

针对飞桨框架部分算子 Kernel 实现不完备、计算逻辑不高效等问题,我们对飞桨的部分算子功能和算子体系内部机制做了进一步的完善优化,修复部分已知问题,并新增了一些特性支持。

Bug 修复

开发者相关内容

废弃功能

  • 清理废弃的执行器等逻辑,减少冗余代码。#64822, #60941

3.编译器架构

在 3.0 版本下,编译器架构进行了重要升级。基于 Shape Dialect 构建了符号自动推导和化简体系,支持符号表达、约束构建,支撑了编译器动态形状下的端到端执行。同时飞桨编译器 CINN 全新升级了子图自动融合和 Pass Pipline 机制,合并了动、静态形状的核心模块,合并迭代路径,架构清晰统一。在此版本下,编译器在 AST Compute、Schedule 策略、Tiling 等重要后端模块进行了重构,提升了编译器的通用优化能力,在飞桨产业套件模型子图和典型大模型 Llama2-13B、Stable Diffusion 模型上验证了动形状的训练、推理正确性和提速性能。

新功能

  1. 升级了全新的子图自动融合机制,创新性提出了 TrivialOp 和 ReduceOp 融合理论,支持更广泛的垂直融合和水平融合范围,保障了子图融合的正确性和鲁棒性,充分发挥神经网络编译器的融合潜力(#63340#63913#63579#63605#60769#62088#63124#63658#64557#63318#62545

  2. 新增支持了动态形状的符号推导功能,基于 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

  3. 新增了 Pass Pipline 功能,包括 PdToCinn、CinnPreprocess、BuildGroupOp、DivideGroupOp、CinnLowering、精度检查等 Pass 策略,统一支持动、静形状下子图的 Lowering 和执行,架构清晰(#61611#62612#64354#61848#62316#64152#61619#62318#61977#62211#63972#63686#64505

  4. 新增支持了 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

  5. 新增支持了编译缓存策略,自动识别、合并和复用相同子图结构的编译结果,使用多线程提升编译效率,提升用户的使用体验(#62952#63269#64718#61367#63305#63750#63871#64893

  6. 新增支持了 GenerateShape 机制,添加了对应的 AST Compute 算子定义,支持动态符号的自动解析,以及在 Lowering 阶段自动生成 ShapeOp(#64167#64636#61993#64843#62587

功能优化

  1. 优化了 BuildCinnPass 逻辑,升级编译器对黑白名单算子的感知策略,提升了 Pass 逻辑的鲁棒性(#62372#61081#61225#58863

  2. 优化了 OpLoweringGroup 数据结构,移除了不必要的接口和成员,降低上下游模块的耦合度(#62339

  3. 优化了编译器关于架构 Arch 的组件设计,抽象硬件概念,降低国产硬件的适配成本(#63530#64347#64506#64587

  4. 升级了编译器后端算子 AST Compute 模块,适配支持了动态 Shape 的计算逻辑(#62488#63581#63687#63654#64217

性能优化

  1. 优化了 AST IR 的 Schedule 逻辑,重构了 Vectorize、Unroll、AxisBind、ComputeAt 等核心模块,合并动静形状迭代路径,降低开发维护成本(#60449#60155#60342#60498#60538#60190#61197#63140#61156

  2. 优化了 Tiling 策略和 temp Buffer 功能,支持 warp-level 内存连续 Read 和 cache_read cache_write 功能, 提升子图执行性能(#64240#60562#64711#62856#61576#61901#62581#61987#60190#63138#62517

  3. 支持 Schedule 配置的自动搜索功能,AOT 式离线保存机制实现子图 Kernel 的性能加速(#64271#64588#64694#64620#64702#63086

  4. 支持了 OptimizeReductionTactic 优化策略,提升 Reduce 场景下的 kernel 性能(#6066#61363#60881#63859

  5. 增强了 DCE Pass 功能,移除了多余的 If/For 分支代码,提升执行效率(#61682

  6. 新增支持了 FuseParallelMatmulPass Pass,可融合多个 Matmul 算子实现加速(#63623

Bug 修复

  1. 修复了部分特殊算子在 Lowering 到编译器时 BUG,提升了端到端使用的用户体验(#60800#64720#62593#62661#64626#63320#64581#61608#64135#64659#62391#62490#63891#64529

  2. 修复了部分算子符号推导实现逻辑的 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

  3. 修复了动静形状下编译器执行结果错误的诸多问题,提升了框架机制的鲁棒性(#60813#61877#61909#62954#63614#60339#60623#60658#60669#58823#62483#62742#61797#63411#64077#62736#62390#63689

废弃功能

  1. 移除了 adt DimExpr、SymbolicDimExpr、ShapedTypeInterface 等无用的符号相关组件(#60901#60933#60744#64176#64140

  2. 移除了旧的 Group Cluster、旧 IR 下的前端表示等相关组件,提升架构层面的简洁性(#63683#64630#61380

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

  • 为支持任意 shape 张量的自动并行,新增支持张量非均匀切分特性。#62611, #61432

  • 为支持用户在自动并行组网中使用自定义算子,支持用户在框架外注册自定义该类算子的切分推导规则。 #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

  • 优化混合并行场景下相关通信操作的耗时。#62157, #61622

  • 优化自动并行动转静下参数的的冗余显存占用。#62746

  • 完善自动并行的混合精度训练功能,支持设置局部 auto_cast 和黑白名单,支持 master grad 功能,适配不同的并行策略等。60158, #59987, #62629, #60385, #62015, #60514, #61221, #60779, #63228

  • 优化 type promotion 和 amp 带来的非必要的 cast,提升性能。#63293, #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

训练策略自动搜索和调优

为提升训练策略自动搜索和调优工具(AutoTuner)的易用性,支持用户自定义搜索项,支持设置搜索项的优先级,支持用户配置不合法的策略组合,全面增强了运行时和运行后日志中的报错信息,支持在 NPU 设备上进行 AutoTuner。#60101, #60294, #61898, #60248, #60417, #60954, #61499, #62724, #60954, #63693, #62853, #62984

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

Bug 修复

  • 修复 StreamSafeCUDAAllocator CUDA Event 资源泄露导致大模型训练降速等问题。#64621

  • 修复 fused_rotary_position_embedding 算子反向计算错误的 bug。#60217

  • 修复自定义算子在 AMP 场景下无法通过黑白名单控制计算精度的 bug。#60052

  • 修复 add_、divide_等原生支持不同数据类型运算的算子在类型提升时发生预期外的类型提升的 bug。#64302

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

通信库功能优化

  • 增强 NCCL 通信库的功能,支持初始化时传入额外的初始化参数以支持定制的 NCCL 库的初始化。#62193

  • 增加 NCCL 库路径查找功能,支持更灵活的 NCCL 库查找方式。#62492

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)

安全风险修复

  • 针对 prune_by_memory_estimation 算子中存在安全泄露风险,修补安全漏洞。#61320

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

文档完善

  • 在 RPC 接口文档中接入安全警告,提醒用户需要在安全的网络条件下使用此接口。#64100

安全加强

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 机制

    • config 增加 enable_new_ir()接口使能 PIR。#61968

    • config 增加 set_optimization_level()接口可设置不同优化等级。#61968

    • PIR 机制下 PASS 功能支持自定义 C++PASS。#62468

    • 推理库对外暴露 PIR 相关实现头文件,支持用户基于 PIR 的二次开发,如自定义 Pass 开发等。#61863,#62293

    • PIR 机制下支持通过对 Predictor 注册 Hook 操作算子的输入输出。#63101

  • 多层 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 硬件相关

    • XPU 针对 Conv 和 FC 的融合 PASS 支持 Float 到 INT31 类型的转换。#59981

    • XPU 的 strided slice 算子支持设置 strides 未负数。 #62268

    • XPU 的多层 Encoder 融合 PASS 可以自适应序列长度并支持变长 #63825

  • Paddle TensorRT INT8 计算模式下支持 tile 算子进入 TensorRT 计算,提升部分模型 INT8 性能。 #60189

模型压缩

主要针对训练后量化(Post Training Quantization,PTQ)和量化训练(Quantization Aware Trainig,QAT)做了 bug 修复和功能优化。

  • 支持模按照通道内分组的模拟量化#61828

  • 支持动态图下自动保存量化 scale 到模型参数文件中#59441

  • 去除中 dataloader 必须是 DataLoader 实例的限制#61798

性能优化

  • 推理执行器升级,保正性能不变情况下,大幅度降低运行时显存占用,可通过 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

性能优化

  • 分布式通信策略 Sharing 在 Broadcast 参数采用异步策略,提升计算和通信的 overlap。 #59745

  • 新增 STRIDED Layout 算子支持,提升算子性能。#62532,#62697,#62649

  • 优化 elementwise_mul 算子内存使用。#62377

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

  • 统一通信数据类型的使用为 phi::DataType。#62464,#62562

  • 修复 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

  • 提升 TensorSetConstantXPU 性能,并支持 BF16 数据类型。#63920,#61818

  • 融合多个 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

  • 修复 XPU API GM 显存问题。#60260,#60387,#62940

  • 修复分布式策略 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 运行和安装相关问题。#60028,#61970

  • 修复 XPU 编译 bug。#63307

  • 修复 XPU 通信库初始化时端侧内存相关的 bug。#64396

海光 DCU

新增功能

  • 新增对海光 DCU K100 支持。#63535

  • 支持 complex64/128 数据类型,并支持 fused_bias_residual_layernorm、fused_bias_dropout_residual_layer_norm、rms_norm 等融合算子。 #63217

Bug 修复

10.环境更新

此版本飞桨完成基础依赖库的发版和更新同步,移除了不再更新的老旧依赖库。完成了多项优化提升编译效率、兼容性,完善 CI 流水线监测功能以提升用户安装体验。修复了多个已知编译问题,完善 paddle 的编译系统,新增了一些特性支持。通过相关优化工作,飞桨框架的编译安装体验进一步提升,给开发者带来更好的使用和开发体验。

新增支持

编译优化

CI 流水线改进

11.文档相关的问题修复

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, 东百月, 傅剑寒, 周周周, 周波涛, 张春乔, 萧