关于paddle:AI-for-Science系列三赛桨PaddleScience底层核心框架技术创新详解

33次阅读

共计 2884 个字符,预计需要花费 8 分钟才能阅读完成。

框架技术创新

飞桨科学计算套件赛桨 PaddleScience 底层技术依赖飞桨外围框架。为了无力地撑持科学计算工作高效训练与推理,飞桨外围框架在主动微分、编译器、执行器和分布式等多方面别离进行了技术创新。值得一提的是,主动微分在机制上的变革带来了框架计算量方面的优化,联合自研编译器 CINN 的加持,在典型科学计算工作 2D 定常 Laplace 模型上达到业界性能最优。

主动微分

飞桨外围框架在 2.3 版本中针对主动微分机制和主动微分 API 提供多种技术创新。

主动微分机制

主动微分在机制方面,通过设计主动微分根底算子体系,并在其上定义 linearize 和 transpose 程序变换规定。飞桨在动态图中新增对前向微分的反对,实现前反向不限阶的主动微分机制。翻新后的主动微分机制具备良好的算子反对扩展性,目前曾经反对全连贯网络,并在 2D 定常 Laplace、3D 定常圆柱绕流等典型科学计算工作上实现验证工作。

目前的主动微分机制设计流程为:用户实现前向组网后,会首先将前向过程对应的网络转化到主动微分根底算子体系上,而后屡次调用 linearize 和 transpose 两种程序变换实现高阶前向 / 反向微分,最初将网络整体转化到飞桨原生算子体系上实现组网或者对接编译器进行更多优化。该机制将计算拆分到更细的粒度,因为引入并正当应用切空间(前向微分空间)信息,绝对于原有的主动微分机制有计算量上的优化,在 2D 定常 Laplace 模型上实测有最大 1.58 倍性能晋升。

主动微分 API

在主动微分 API 方面,飞桨为内部用户新增 2 个主动微分 API,别离是前向主动微分 forward_grad 与反向主动微分 grad 两种接口,均反对高阶微分。为了不便用户应用,同时提供 Jacobian、Hessian 的求解,反对按行提早计算,在简单偏微分方程组中显著晋升计算性能。另外,也公开了实现此次翻新后的主动微分外围机制 API jvp 与 vjp,以后所有 API 均放在 incubate 空间下,处于试验个性,会依据用户需要及具体利用场景继续演进。上述 API 列表以及计算示例如下表所示。

分布式主动并行

为了反对用户应用大规模网格点数据进行高效训练,PaddleScience 采纳高可扩大的飞桨主动并行技术,它能依据用户输出的串行网络模型和所提供集群资源信息主动进行分布式训练。基于对立分布式计算图和对立资源图设计,飞桨主动并行可反对任意并行策略和各类硬件集群资源上的分布式训练,能将原用户原计算图中每个串行 tensor 和串行 operator 主动切分成分布式 tensor 和分布式 operator,并插入适合高效通信来保障与原串行计算统一,如下图所示。目前飞桨主动并行反对半自动与全自动两种模式:

  • 模式一 :半自动模式下用户能够依据本人须要指定某些要害 tensor 和 operator 的切分形式,而框架会通过数据流剖析形式进行主动推导残余的 tensor 和 operator;
  • 模式二 :全自动模式下不须要用户标记任何切分形式,所有 tensor 和 operator 都由框架基于 Cost Model 自适应抉择最优的切分策略。基于主动并行所提供的数据并行、梯度累积和数据集并行加载等分布式能力,在 3D 圆柱绕流工作上 32 卡扩大效率可达到 93%。联合主动并行,PaddleScience 将来将更容易取得简单并行策略反对。

编译器

主动微分机制将科学计算模型中的深度学习算子拆分成若干细粒度的根底算子,若间接计算,这些细粒度算子将使得模型的大部分工夫被节约在数据交换和执行调度而非理论计算上。这意味着咱们并未齐全利用到硬件的计算资源,因而模型的计算速度还仍有较大的晋升空间。神经网络编译器在此类问题上有着显著的劣势,包含针对计算图的通用 Pass 优化、算子交融以及主动代码生成等。飞桨神经网络编译器 CINN 即是解决此类问题的无力工具,它在打消大量无用数据交换和执行调度开销的同时,极大地升高算子开发所需的人力老本,相比于未开启编译减速的执行形式,开启 CINN 在 2D 定常 Laplace 模型上实测有最大 3.72 倍性能晋升。

CINN 为科学计算模型提供了一套欠缺的优化机制,典型的常量折叠,冗余算子打消,特定硬件的 gemm rewriter 库算子替换等优化 Pass 在 CINN 中均已实现。主动算子交融能力也在日趋强化,为科学计算等畛域模型的训练性能提供更多的减速契机。以 2D 定常 Laplace 模型为例,最大的交融算子汇合可蕴含 94 个小算子。

图 左:CINN 架构图 中:gemm rewriter 示例 右:5 个小算子交融示例

咱们以 2D 定常 Laplace 模型作为对立测试模型,设定采样点数 100*100,选取多组网络层数和暗藏层节点数的全连贯网络训练 2000 epoch,别离在 JAX、飞桨动态图、飞桨动态图 + 新主动微分、飞桨动态图 + 新主动微分 +CINN 编译器几种模式下进行测试。以飞桨动态图模式作为 baseline,计算其余模式绝对飞桨动态图的减速比。(性能测试硬件平台:V100 16GB 单卡;Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 40-core)

从试验后果能够看出,受害于新主动微分机制上的变革和自研编译器 CINN 的性能优化加持,在典型科学计算工作 2D 定常 Laplace 模型上达到业界性能最优。

执行器

飞桨中有两种数据结构能够示意网络模型,一种是 Program,将模型表示成 OP 序列,不便在单机单卡下程序执行 OP;另一种是 Graph,将模型表示成计算图构造,不便在多卡下并行调度 OP,并默认开启许多图优化的 IR pass 以晋升训练性能。因为 Program 相比 Graph 批改简略,能够不便地插入分布式须要的数据通信等 OP,因此飞桨中许多重要的分布式性能都是基于 Program 构造进行开发。在科学计算我的项目中,咱们对上述典型的科学计算模型实现 Program 和 Graph 两种示意构造的无损互转,使得计算图优化后的 Graph 能够转换成 Program 进行分布式训练,买通计算图优化和分布式训练联合的技术门路,充分利用两者的优化能力,大幅晋升模型训练性能。

此外,飞桨框架在 2.3 版本中公布了全新的动态图执行器,其中实现高效的多 stream 和多线程异步调度组件,使得模型训练更加性能优越和易扩大,并已在单机单卡场景下默认应用。针对 PaddleScience,咱们通过对动态图新执行器在对接 Graph IR 体系和反对分布式训练等方面的性能适配和裁减,使图优化后的模型能够利用新执行器进行分布式训练。

拓展浏览

AI+Science 系列(一):飞桨减速 CFD(计算流体力学)原理与实际

AI+Science 系列(二):国内首个基于 AI 框架的 CFD 工具组件!赛桨 v1.0 Beta API 介绍以及典型案例分享!
赛桨 PaddleScience v1.0 Beta:基于飞桨外围框架的科学计算通用求解器

相干地址

  • 飞桨 AI for Science 共创打算

https://www.paddlepaddle.org….

  • 飞桨 PPSIG-Science 小组

https://www.paddlepaddle.org….**

正文完
 0