AI for Science系列(三):赛桨PaddleScience底层核心框架技术创新详解

news2025/1/23 4:10:19

继上一篇典型案例及API功能介绍,本篇重点讲解飞桨核心框架为支持科学计算任务在技术上的创新工作与成果。

框架技术创新

飞桨科学计算套件赛桨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.cn/science
飞桨PPSIG-Science小组
https://www.paddlepaddle.org.cn/specialgroupdetail?id=9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例13-前端对localStorage的使用分析

一:背景介绍 前端在调用后端接口获取某一个人的评论次数、获赞次数、回复次数。调用之后判断后端返回过来的值。如果返回回来的值是0的话,从缓存中获取对应的值,如果从缓存中获取的评论次数为空那么其他两个的次数也为0。 二:思路…

SqlServer Management Studio启用身份验证登录

背景 一开始安装好SqlServer Management Studio时,默认只能用本地window身份验证登录,也就是除了SqlServer的电脑,别的都访问不了这个数据库,这是很不方便的 方案 1.打开SqlServer Management Studio,先用window身份…

windows内核学习-段和页相关

段寄存器(96位)(234条消息) 03.段寄存器_015646的博客-CSDN博客代码段寄存器CS(Code Segment)存放当前正在运行的程序代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移量则由IP提供。数…

Apinto 网关 V0.11.1 版本发布,多协议互转,新增编码转换器,接入 Prometheus

Eolink 旗下 Apinto 开源网关再次更新啦~ 一起来看看是否有你期待的功能! 1、协议转换功能上线 之前发布的 Apinto v0.10.0 已经支持了多协议的基本功能,实现多协议支持的一次验证。本次最新版本可以支持 HTTP 与 gRPC、HTTP 与 Dubbo2 之间的协议转换。…

【Java】 异步调用实践

本文要点: 为什么需要异步调用CompletableFuture 基本使用RPC 异步调用HTTP 异步调用编排 CompletableFuture 提高吞吐量BIO 模型 当用户进程调用了recvfrom 这个系统调用,kernel 就开始了 IO 的第一个阶段:准备数据。对于 network io 来说…

react Context学习记录

react Context学习记录1.Context是干嘛的2.可以倒是可以实现的做法-props逐级传递3.Context1.Context是干嘛的 一种React组件间通信方式, 常用于【祖组件】与【后代组件】间通信 2.可以倒是可以实现的做法-props逐级传递 import React, { Component } from "react";…

Qt资源文件.qrc

目录 一 用途 二 使用效果 三 如何添加资源文件 一 用途 有时候我们想添加图片或者动画的话,就可以使用资源文件 二 使用效果 我在标签上添加了一个蝴蝶的图片,最后呈现出来的效果就是这样子的 三 如何添加资源文件 添加资源文件要指定特定的路径&…

iptables语法规则

iptables命令基本语法 iptables [-t table] command [链名] [条件匹配] [-j 目标动作]以下是对iptables命令的拆分讲解: -t table 用来指明使用的表,有三种选项:filter,nat,mangle。若未指定,则默认使用filter表。 command参数 …

【数据库】基础知识,创建一个表

计算机硬件软件硬件:1.输入输出设备 2.控制器 3.运算器 4.存储器(内存)软件:1.应用软件 2.系统软件(操作系统、数据库管理系统、语言处理系统……)从开发者角度分软件:B/S浏览器和服务器结构&am…

umi学习(umi4)

umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目: 根据 包管理工具不同 ,官方推荐 这里使用 pnpm: 1. pnpm dlx create-umilatest 2. 选择模板 (这里使用 Simple App) 想对module处理需要使用 Ant Desig…

19 客户端服务订阅机制的核心流程

Nacos客户端服务订阅机制的核心流程 说起Nacos的服务订阅机制,大家会觉得比较难理解,那我们就来详细分析一下,那我们先从Nacos订阅的概述说起 Nacos订阅概述 Nacos的订阅机制,如果用一句话来描述就是:Nacos客户端通…

vue自定义指令以及angular自定义指令(以禁止输入空格为例)

哈喽,小伙伴们,大家好啊,最近要实现一个vue自定义指令,就是让input输入框禁止输入空格建立一个directives的指令文件,里面专门用来建立各个指令的官方文档:自定义指令 | Vue.js (vuejs.org)我们都知道vue中…

小白学Pytorch 系列--Torch API

小白学Pytorch 系列–Torch API Torch version 1.13 Tensors TORCH.IS_TENSOR 如果obj是PyTorch张量,则返回True。 注意,这个函数只是简单地执行isinstance(obj, Tensor)。使用isinstance 更适合用mypy进行类型检查,而且更显式-所以建议使…

开发手册——一、编程规约_5.集合处理

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】关于 hashCode 和 equals 的处理,遵循如下规则: 只要重写 equals,就必须重写 hashCod…

I.MX6ULL_Linux_系统篇(21) kernel启动流程

链接脚本 vmlinux.lds 要分析 Linux 启动流程,同样需要先编译一下 Linux 源码,因为有很多文件是需要编译才会生成的。首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以 找到 Linux 内核的第一行程序是从哪里…

计算机网络安全基础知识3:网站漏洞,安装phpstudy,安装靶场漏洞DVWA,搭建一个网站

计算机网络安全基础知识3:网站漏洞,安装phpstudy,安装靶场漏洞DVWA,搭建一个网站 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测…

7.桥接模式

目录 简介 定义 特点 结构 示例 1. 新建 Brand.interface 接口类,定义不同品牌手机共有的基本功能 2. 新建 Xiaomi.class 类,实现 Brand.interface 接口,实现具体功能 3. 新建 Vivo.class 类,实现 Brand.interface 接口&…

Mybatis源码学习笔记(六)之Mybatis中集成日志框架原理解析

1 Mybatis中集成日志框架示例 1.1 Mybatis使用log4j示例&#xff08;推荐方式&#xff09; 第一步&#xff1a;pom.xml引入log4j依赖 <!-- slf4j日志门面 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId&…

Thinkphp6使用RabbitMQ消息队列

Thinkphp6连接使用RabbitMQ&#xff08;不止tp6&#xff0c;其他框架对应改下也一样&#xff09;&#xff0c;如何使用Docker部署RabbitMQ&#xff0c;在上一篇已经讲了->传送门<-。 部署环境 开始前先进入RabbitMQ的web管理界面&#xff0c;选择Queues菜单&#xff0c;点…

深度学习实战20(进阶版)-文件智能搜索系统,可以根据文件内容进行关键词搜索,快速找到文件

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来深度学习实战项目-文件智能搜索系统&#xff0c;文件智能搜索系统是一种能够帮助用户通过文件的内容快速搜索和定位文件的软件系统。 随着互联网和数字化技术的普及&#xff0c;数据和信息呈现爆炸式增长的趋势&#xf…