赛桨PaddleScience v1.0正式版发布,飞桨科学计算能力全面升级!

news2024/11/22 5:56:20

AI for Science日益表现出突破传统科学研究能力瓶颈的巨大潜力,正在成为全球科学研究新范式。近年来,各学科不断加入,模型精度、泛化性逐渐提高,不同技术路径、不同应用场景的AI for Science成功应用不断涌现,深度融合领域知识的AI for Science基础软件也蓬勃发展,为各领域AI for Science研究人员提供了一大批简单易用的工具软件。

百度飞桨作为拥有国内最大开源用户群体的深度学习平台,一直致力于将AI方法应用于基础科研,通过不断提升飞桨框架对科学问题的求解机制,并建设端到端的科学计算工具组件来加速AI与传统科学研究的融合。在过去的一年中,飞桨框架通过全量支持开源科学计算工具DeepXDE以及对大量科学领域论文代码的重构,进一步完善了飞桨科学计算的机制,并形成了赛桨PaddleScience v1.0的四大特色能力:

  • 从易用性角度,兼顾用户体验,进行了API架构的更新;
  • 支持更广泛的底层模型,如CNN、U-Net、Transformer等;
  • 提供丰富的场景案例,如2D&3D圆柱绕流、涡激振动等基础案例以及气象预报、污染物扩散等行业案例;
  • 更加全面的API支持,如自定义偏微分方程及各类边界条件、支持2D&3D基础几何定义等。

飞桨AI for Science功能全景如下图所示。

图片

图 飞桨AI4S全景图

飞桨框架的技术创新

为了有力支撑科学计算高阶微分方程求解等任务需求,飞桨框架对整体训练架构进行升级,在不改变现有用户使用习惯的基础上,用户可以使用飞桨框架API进行动态图组网调试,并通过动转静、算子组合、编译优化技术提升训练性能。

图片

图 框架技术创新

  • 飞桨框架 API

基于上述训练架构,飞桨可以低成本方式支持高阶自动微分,不再需要通过手写高阶微分算子,当前飞桨框架支持50多个常用API高阶自动微分,并可持续扩展,已在EulerBeam、圆柱绕流等40+案例及模型验证。除此之外,飞桨支持科学计算所需的通用一阶微分Jacobian、通用二阶微分Hessian、二阶优化器L-BFGS等开发接口。

  • 算子组合机制

组合机制为飞桨最新创新技术之一,旨在降低飞桨手写算子数量,低成本实现高阶微分、硬件接入、编译器接入。该技术核心是定义少量基础算子集合,即加减乘除等基础处理运算,针对该少量算子集实现反向微分等规则,然后将复杂算子拆解为基础算子组合表示。预期最终态飞桨前向算子数量由600+降低到300左右,且大部分场景不再需要手写高阶算子,实现高阶微分、新硬件接入、编译器接入成本的大幅降低。

  • 编译优化

编译器是上述技术路线中加速模型训推速度的关键技术。其主要技术点在于将基础算子IR表示映射到编译器高层IR表示,并通过高级别的PASS优化进行整图优化操作,如算子融合、常量折叠、代数化简、无关计算剪枝与变量释放等。然后将高层IR转成硬件无关的低层IR表示,自动生成适配不同硬件的代码。通过使用神经网络编译器技术,Laplace方程求解性能提升3倍。

  • 硬件支持

当前飞桨针对科学计算算子,在国产硬件DCU和XPU上加速适配,其中DCU上已经能够全量运行以飞桨为后端的DeepXDE。

科学计算工具组件 赛桨 PaddleScience v1.0

基于飞桨深度学习框架的高层API以及高阶自动微分机制,飞桨同步升级并推出了科学计算工具组件赛桨PaddleScience v1.0。针对传统数值计算方法面临的维数高、耗时长、跨尺度的挑战,综合数学计算与物理数据相结合的处理方法,提供物理机理、数据驱动等范式来求解问题。同时围绕计算流体力学(CFD)、结构有限元仿真、气象预测等领域构建经典的AI for Science领域案例,为广大科研工作者提供可复用的案例开源代码以促进AI与基础科学的融合。

赛桨PaddleScience v1.0正式版包含了如下四方面的特色:

  • API架构更新

从用户使用习惯角度,兼顾深度学习及CFD&CAE用户体验,从数据预处理、模型选择、网络优化求解、结果后处理等角度更新API元素,提升用户使用感受。

  • 丰富的场景案例

提供2D & 3D圆柱绕流、涡激振动、对流散热及方程反演等基础案例,同时新增结构领域中2D & 3D结构受力分析案例,气象领域中气象预报、污染物扩散等相关案例,支持直接复用及二次开发,用户可从Github代码仓直接体验相关项目的AIStudio实践。

  • 底层模型更新

新增如CNN、U-Net、Transformer、GAN等经典神经网络模型以及FNO算子学习模型,并提供相应验证案例。

  • API升级更新

提供全新设计的API供用户自定义偏微分方程及定义各类边界条件,支持2D & 3D基础几何定义、STL复杂外形解析及布尔操作等,并提供准随机采样、局部加密采样等功能。

具体功能可详见

https://paddlescience-docs-hss.readthedocs.io/zh/latest/

图片

图 PaddleScience v1.0产品全景( 建设中)*

赛桨提供应用于科学计算问题的端到端API,结合常见CFD业务流程中涉及的前处理、求解、后处理等过程,提供计算域定义、深度学习求解、推理及可视化等模块,并细分为Equation 、Geometry 、Constraint、Arch等API,工具组件设计架构如下。

图片

图 PaddleScience科学计算工具组件设计架构

  • 方程(Equation)

赛桨支持调用预置方程接口及自定义方程接口,支持任意阶次的常微分(ODE)、偏微分(PDE)等方程定义,同时预置了如Navier-Stokes方程、Laplace方程等接口,可直接修改、使用。

  • 计算域(Geometry)

赛桨提供常用的2D & 3D 规则几何,包括线段、圆、多边形、长方体、球体等。同时支持外部CAD工具生成*.STL格式文件的导入、解析及局部加密采样等功能,并提供几何体之间的布尔运算,以支撑任意复杂计算域的定义。

  • 约束(Constraint)

赛桨最新的Constraint约束模块,提供了任意数据源的计算约束定义。包含计算过程中的物理边界条件(Boundary Conditions)约束以及目标信息监督约束,支持基础的三类边界条件(Dirichlet/Neumann/Robin BC)及用户自定义边界条件(General BC)定义,可支撑物理机理(数据主要来自几何)、数据驱动(数据主要来自数据文件)、数理融合(数据来自几何和数据文件)三种不同的训练范式。

  • 网络(Arch)

赛桨支持多种网络模型结构,包括多层感知机(MLP)、Transformer等。提供网络参数初始化定义及预训练网络参数加载等功能,并支持多种激活函数,包括Tanh、Silu、Relu等。

  • 损失函数(Loss)

赛桨提供了多种预置的Loss计算方式,如MSELoss、MAELoss、L2RelativeLoss,同时支持多种粒度的Loss权重配置,如:

L o s s = L o s s e q u a t i o n + ω i c L o s s i c + ω b c ∑ ( i , j ) ( o u t ( i , j ) − l a b e l ( i , j ) ) TeX Loss=Loss_{equation}+\omega _{ic}Loss_{ic}+\omega _{bc} {\textstyle \sum_{(i,j)}^{}} (out_{(i,j)} -label_{(i,j)} )\TeX Loss=Lossequation+ωicLossic+ωbc(i,j)(out(i,j)label(i,j))TEX

  • 优化器(Optimizer)

赛桨支持常见的一阶优化器SGD、Momentum、Adam、AdamW,同时支持二阶优化器L-BFGS进一步提升模型精度。

  • 评估与与可视化(Validator、Visualizer)

赛桨采用训练、评估、可视化分离的代码设计方案。通过开启评估、可视化功能,以在训练时自动评估当前模型在指定数据集上的精度,并可视化结果。也可以直接载入预训练好的模型,手动评估、可视化。

  • 高阶微分(AutoDiff)

赛桨基于飞桨框架的高阶微分能力,预置了一阶、二阶微分接口,并可进一步组合出三阶甚至更高阶的微分接口,以满足多种微分场景的需求。

飞桨AI for Science科学领域案例

针对流体、结构、传热以及气象等领域,飞桨框架完成了领域中广泛问题的网络模型验证,如可应用于稳态问题的CNN/U-Net网络,可应用于瞬态问题的LSTM/Transformer/GNN网络,以及应用于物理场重构问题的VAE/GAN网络等。同时,上述网络模型正持续集成到赛桨PaddleScience v1.0,与机理求解方法PINN一同,形成了PaddleScience的核心求解器。下面分别介绍PaddleScience在流体和结构两个领域的实践。

流体领域案例

在流体领域,结合赛桨 PaddleScience 从**「物理机理驱动」以及「数据驱动」**两个维度对流体问题进行了分析与求解。

  • 其中物理机理驱动主要应用PINN方法,将物理机理方程作为神经网络优化训练的控制函数。
  • 数据驱动则利用经典神经网络或算子学习的方式构建代理模型。基于大量的训练数据,可以驱动经典神经网络模型,如Transformer、GNN、CNN等,同时也可以驱动算子学习,构建算子神经网络如FourCastNet、DeepONet等。

3D非定常圆柱绕流

赛桨PaddleScience v1.0目前可支持任意复杂外形的流场(如基于*STL外形文件的内、外流问题),并针对高雷诺流场问题,分析了Re=3900下,3D圆柱绕流的湍流特性。基于PINN方法以及半监督的训练方式(圆柱后端尾流区域采集了一定数量的监督点),实现对3D非定常不可压缩NS方程的求解。在结果分析阶段,分别从流场的速度、压力以及涡管结构等与LBM计算的结果进行对比,二者相对误差在5%以内。其中流场信息的对比结果如下图所示。

图片

为了进一步分析流场结果的合理性,对神经网络模型的推理结果进行处理,得到涡管以及流线结果如下所示,结果从与LBM计算结果一致。

图片

图片

图 3D圆柱绕流流场涡管结构及流线图

基于TransformerPHX的流场预测

Transformer网络通过注意力机制计算模型输入与输出的隐含表示,目前已经广泛应用于NLP、CV等领域。在科学计算中,通过将物理信息(数据、图片等)映射为词向量,也可采用Transformer架构实现物理问题的拟合与结果预测,如在数据驱动的气象预报中,Transformer已经展现出了令人瞩目的效果。
本案例为基于赛桨对论文Transformer-PHX中网络模型及相关案例进行的复现。围绕文中2D非定常圆柱绕流、Lorenz方程等,重构了Transformer网络模型并在分别对文中提供的案例进行了验证,网络结构如下图所示。

图片

图 Transformer-PHX网络结构图(图片来源于[Geneva et al.,2020])

案例中所用的训练数据集基于OpenFoam生成的分辨率为64128,时间步长为0.5s,并在雷诺数100 ~ 750的范围内随机选取仿真结果。完成模型训练后可对100 ~ 750雷诺数范围内的任意工况下实现流场结构的推理。在Re=100工况下,基于Transformer模型推理与OpenFoam计算得到的流场中速度ux、速度uy、压力的对比结果下图所示,其中OpenFoam结果的前缀为“target_”,Transformer模型的预测结果的前缀为“pred_”,图中展示了180个时间步的预测结果。

图片

图 TransformerPHX结果与OpenFoam结果对比

案例链接

https://github.com/PaddlePaddle/PaddleScience/tree/release/1.0/examples/cylinder/2d_unsteady/transformer_physx

结构领域案例

在结构领域中,飞机机翼桁架、汽车底盘、轮船甲板等机械结构件的受力变形、破坏以及疲劳损伤等都是最典型的“力学”工程难题,这类结构问题通常可由平衡微分方程、几何方程和物理方程来描述。传统的结构分析方法包括有限元法、有限差分法、边界元法等,往往需要大量的计算资源和人力投入,这会限制模型的规模和精度。基于物理信息神经网络(PINN)的AI方法被证明可有效地求解结构领域的物理方程,兼具提升计算速度与减低人力投入的优势。

3D复杂结构变形分析

实际场景中的结构多为复杂的拓扑外形,一般基于专业CAD工具绘制,如Catia/Cero/SolidWorks等,且在进行结构应力应变分析时,用户通常需要对结构进行适当的网格划分,进而借助专业的有限元仿真工具进行受力分析,如Abaqus/ANSYS等。赛桨针对复杂结构外形设计了全新的几何API,支持解析常见CAD工具导出的 *.STL中间格式,支持对 *.STL文件进行布尔操作及局部加密采样。此外,针对各向同性材料的线弹性方程,也进行了详细定义与验证。

平衡方程: ▽ ⋅ σ + f = ρ ∂ 2 u ∂ 2 t \bigtriangledown·\sigma + f = \rho \frac{\partial ^{2 }{u} }{\partial ^{2 }{t} } σ+f=ρ2t2u

协调方程: [ σ x x σ y y σ z z σ x y σ y z σ z x ] = [ ε x x ε y y ε z z ε x y ε y z ε z x ] \begin{bmatrix} \sigma _{xx} \\ \sigma _{yy} \\ \sigma _{zz} \\ \sigma _{xy} \\ \sigma _{yz} \\ \sigma _{zx} \\ \end{bmatrix} = \begin{bmatrix} \varepsilon _{xx} \\ \varepsilon _{yy} \\ \varepsilon _{zz} \\ \varepsilon _{xy} \\ \varepsilon _{yz} \\ \varepsilon _{zx} \\ \end{bmatrix} σxxσyyσzzσxyσyzσzx = εxxεyyεzzεxyεyzεzx

本构方程: [ σ x x σ y y σ z z σ x y σ y z σ z x ] = [ ε x x ε y y ε z z ε x y ε y z ε z x ] \begin{bmatrix} \sigma _{xx} \\ \sigma _{yy} \\ \sigma _{zz} \\ \sigma _{xy} \\ \sigma _{yz} \\ \sigma _{zx} \\ \end{bmatrix} = \begin{bmatrix} \varepsilon _{xx} \\ \varepsilon _{yy} \\ \varepsilon _{zz} \\ \varepsilon _{xy} \\ \varepsilon _{yz} \\ \varepsilon _{zx} \\ \end{bmatrix} σxxσyyσzzσxyσyzσzx = εxxεyyεzzεxyεyzεzx

基于上述方程可对线弹性材料进行在小应变条件下的线性弹性行为分析,参照Modulus工具提供的线弹性结构变形案例Bracket,结构左端表面固定,右端表面施加 -Y方向的均布载荷,计算静平衡状态下整个结构的受力与变形。赛桨实现了在PINN方法下无监督的求解结构变形,且得到的结果与Modulus一致。结果如下,分别为结构在X, Y, Z方向的变形以及三个方向的主应力。由于受到-Y方向的均布载荷,所以结构的右端(X方向)沿着-Z方向变形位移最大。同样在结构左侧连接位置受到的载荷 () 最大。(详细代码之后会同步在AIStduio 科学计算项目集中)。

图片

图 PINN方法求解结果(上:x,y,z方向结构变形位移结果;下:结构主应力结果)

总结

近几年,百度飞桨持续全力投入AI for Science的产品创新和交叉型科研生态建设。在产品层面,飞桨框架持续提升对泛科研场景的支撑能力,同时从复杂科研场景的快速实现、科研领域用户使用习惯无差别迁移等方面不断迭代科学计算工具组件赛桨PaddleScience。我们本次为大家带来飞桨最新的框架机制以及开源的赛桨PaddleScience v1.0正式版,希望能够进一步推动AI for Science基础软件的开源活跃度,促进多学科交叉复合型人才建设及加快完善基础软件技术生态体系建设。

拓展阅读

  • AI for Science 公众号

https://reurl.cc/b9WZyo

  • 飞桨PaddleScience工具组件

https://github.com/PaddlePaddle/PaddleScience

  • 飞桨AI for Science流体力学公开课第一期

https://aistudio.baidu.com/aistudio/course/introduce/27926

  • 飞桨科学计算实训示例

https://aistudio.baidu.com/aistudio/projectoverview/public?topic=15

  • 飞桨AI for Science共创计划

https://www.paddlepaddle.org.cn/science

  • 飞桨PPSIG-Science小组

https://www.paddlepaddle.org.cn/specialgroupdetail?id=9

  • 如何注册AI Studio

https://aistudio.baidu.com/aistudio/index

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

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

相关文章

详解 Spring - Ioc(控制权反转) 和 DI(依赖注入)

目录 Spring 是什么? Ioc Ioc 的优点 DI Ioc 和 DI 的区别 Spring 是什么? 通常情况下 Spring 是指 Spring Framework (Spring 框架), 是一个开源框架, 有着庞大的社区, 这就是他能长久不衰的原因, Spring 支持广泛的应用场景, 他可以让企业级的应用开发起来更简单 S…

Selenium之css如何实现元素定位,你了解多少?

前言 世界上最远的距离大概就是明明看到一个页面元素站在那里,但是我却定位不到!! Selenium定位元素的方法有很多种,像是通过id、name、class_name、tag_name、link_text等等,但是这些方法局限性太大, 随…

简单认识框架

hi,大家好,好久不见今天为大家带来框架相关的知识 文章目录 🌸1.框架🥝1.1为什么要学习框架 🌸2.框架的优点🥝2.1采用servlet创建项目👀2.1.1缺陷 🥝2.2采用SpringBoot创建项目👀2.2.1优势 &…

Vue-Cli脚手架的安装和使用

文章目录 一、Vue-Cli脚手架的环境准备1. 安装Node.js1-1 去 [Node.js官网](https://nodejs.org/zh-cn/) 下载安装包,修改安装路径到其它盘,如 G:\Program Files1-2 安装npm淘宝镜像,提速 2. 设置 cnpm的下载路径和缓存路径2-1 在安装目录 G:…

Zoho Projects:Jira的理想替代品,让项目管理更高效

在软件开发生命周期中,项目管理一直是一个非常重要的环节。为了更好地协作、追踪项目的进程和管理任务,许多公司选择了Jira这款著名的项目管理工具,它是个非常强大的工具,但同时也有非常明显的缺点。今天,我们将向大家…

知识普及:[18F]FB RGD,18F标记RGD多肽,tumor显像剂,

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 为大家介绍(CAS:N/A),试剂仅用于科学研究,不可用于人类,非药用,非食用 分子式:C34H44FN9O9 分子量:740.8 中文名称&#xff1a…

linux之Ubuntu系列 系统信息 (一)查看文件、磁盘 、进程

时间和日期 查看当前的系统时间 date 查看日历 -y 显示本年度日历, 不加-y 选项,显示本月日历 cal [-y] 查看磁盘 和 目录 空间 df [-h] df:disk free 显示磁盘可用空间,-h,跟 ls -lh 效果类似,以人性化方…

Python 字典 get()函数使用详解,字典获取值

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 get函数使用详解 1、设置默认返回值2、嵌套字典取值3、get() 和 dict[key] 的区别…

使用WebRTC实现多人视频会议

1.初步准备 1.1.使用同事nodejs开发的一个信令服务器。提供Https的WebSocket功能 1.2.准备一个多人视频会议的客户端Web程序client.html 2.遇到问题 2.1.在Tomcat下打开client.html,如果不使用http://127.0.0.1:8081/vedio/client.html,而使用实际IP…

DETR的位置编码

记录一下,以防忘记。 首先,致谢知乎vincent DETR论文详解 DETR中有这样一个类和一个包装函数 class NestedTensor(object):def __init__(self, tensors, mask: Optional[Tensor]):self.tensors tensorsself.mask maskdef to(self, device):# type: …

C知道,CSDN 出来的AI尝试

已经上图,算力不知道怎么样。 C知道 (csdn.net)

JDK、JRE与JVM三者之间的关系及区别

文章目录 0、关系1、JDK2、JRE3、JVM 0、关系 JDK JRE Java 开发工具包 [Java,Javac,Javadoc,Javap等]JRE JVM Java 的核心类库 1、JDK 什么是JDK,JDK是用于Java程序开发的最小环境,包含:Java程序设计语言,Java虚拟机&#…

git : 从入门到实战进阶

目录 0. 前言 1. git stash: 暂时保存本地修改 2. git push时发生冲突怎么办? 3. 访问过去的提交版本:git checkout 3.1 detached HEAD 3.2 “detached HEAD”状态下所作的修改会怎样呢? 3.3 “detached HEAD”状态下所作的修改如何汇…

leetcode100.相同的树

⭐️ 题目描述 🌟 leetcode链接:相同的树 1️⃣ 代码: bool isSameTree(struct TreeNode* p, struct TreeNode* q){// 判断两棵树当前结点是否为空if (p NULL && q NULL) {// 说明是相同的return true;}// 来到这里有几种情况// …

causal-learn ModuleNotFoundError: No module named ‘pygam‘

调用 causallearn 库包,测试CAM-UV算法时报错: No module named pygam 解决方法: pip install pygam 参考链接: 【Python Causal Learning Toolbox】causallearn 库包的使用、报错修改_板砖板砖我是兔子的博客-CSDN博客

java ArratList深拷贝

引用深拷贝 便捷方法 class Test {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();for (int i 0; i < 3; i) {User user new User(i, "name" i);list.add(user);}ArrayList<User> list1 new ArrayList…

超细致的性能测试流程,你get了吗?

性能测试&#xff1a;利用工具模拟大量用户操作&#xff0c;验证系统承受的负载情况。 性能测试的目的&#xff1a;找到潜在的性能问题或瓶颈&#xff0c;分析并解决&#xff1b;找出性能变化趋势&#xff0c;为后续扩展系统提供参考。测试监控&#xff1a;基准测试、配置测试…

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取

Spring的开发要点总结 文章目录 【JavaEE】Spring的开发要点总结&#xff08;1&#xff09;1. DI 和 DL1.1 DI 依赖注入1.2 DL 依赖查询1.3 DI 与 DL的区别1.4 IoC 与 DI/DL 的区别 2. Spring项目的创建2.1 创建Maven项目2.2 设置国内源2.2.1 勾选2.2.2 删除本地jar包2.2.3 re…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…