Skip to content

PaddlePaddle 3.0.0‐beta0 Release Note CN

XiaoguangHu edited this page Jun 27, 2024 · 1 revision

PaddlePaddle 3.0 Beta0 版本概述

本版本的核心特性主要包括动静统一自动并行技术和神经网络编译器自动优化等新技术,旨在应对当前深度学习领域的新挑战。飞桨框架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性能提升

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 流水线改进

代码清理

Bug修复

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

Clone this wiki locally