跳转至

多硬件支持

飞桨生态的繁荣离不开开发者和用户的贡献,我们非常欢迎为飞桨的多硬件适配贡献更多的模型。

1. 硬件支持列表

当前 PaddleScience 中对于各硬件适配模型的列表汇总如下(不包含仅在 AIStudio 上的案例)

问题类型 案例名称 NVIDIA 海光 太初 沐曦
亥姆霍兹方程 SPINN(Helmholtz3D) ✅ ✅ ✅
相场方程 Allen-Cahn ✅ ✅
微分方程 拉普拉斯方程 ✅ ✅ ✅
微分方程 伯格斯方程 ✅ ✅
微分方程 非线性偏微分方程 ✅ ✅
微分方程 洛伦兹方程 ✅ ✅ ✅
微分方程 若斯叻方程 ✅ ✅ ✅
算子学习 DeepONet ✅ ✅ ✅
积分方程 沃尔泰拉积分方程 ✅ ✅ ✅
光纤怪波 Optical rogue wave ✅ ✅ ✅
域分解 XPINN ✅ ✅ ✅
布鲁塞尔扩散系统 3D-Brusselator ✅
符号回归 Transformer4SR ✅
问题类型 案例名称 NVIDIA 海光 太初 沐曦
汽车表面阻力预测 DrivAerNet ✅ ✅
一维线性对流问题 1D 线性对流 ✅ ✅
非定常不可压流体 2D 方腔浮力驱动流 ✅ ✅
定常不可压流体 Re3200 2D 定常方腔流 ✅ ✅
定常不可压流体 2D 达西流 ✅ ✅ ✅
定常不可压流体 2D 管道流 ✅ ✅
定常不可压流体 3D 颅内动脉瘤 ✅ ✅
定常不可压流体 任意 2D 几何体绕流 ✅ ✅ ✅
非定常不可压流体 2D 非定常方腔流 ✅ ✅ ✅
非定常不可压流体 Re100 2D 圆柱绕流 ✅ ✅
非定常不可压流体 Re100~750 2D 圆柱绕流 ✅ ✅
可压缩流体 2D 空气激波 ✅ ✅
通用流场模拟 气动外形设计 ✅
流固耦合 涡激振动 ✅ ✅
多相流 气液两相流 ✅ ✅
流场高分辨率重构 2D 湍流流场重构 ✅ ✅
求解器耦合 CFD-GCN ✅ ✅
受力分析 1D 欧拉梁变形 ✅ ✅ ✅
受力分析 2D 平板变形 ✅ ✅
受力分析 3D 连接件变形 ✅ ✅
受力分析 结构震动模拟 ✅ ✅
受力分析 2D 弹塑性结构 ✅ ✅
受力分析和逆问题 3D 汽车控制臂变形 ✅ ✅
受力分析和逆问题 3D 心脏仿真 ✅ ✅
拓扑优化 2D 拓扑优化 ✅ ✅
热仿真 1D 换热器热仿真 ✅ ✅
热仿真 2D 热仿真 ✅ ✅
热仿真 2D 芯片热仿真 ✅
算子学习 NeuralOperator ✅
汽车表面阻力预测 DrivAerNetPlusPlus ✅
求解器耦合 NSFNets ✅ ✅
流场高分辨率重构 PhyCRNet ✅
求解器耦合 NSFNet4 ✅
问题类型 案例名称 NVIDIA 海光 太初 沐曦
材料设计 散射板设计(反问题) ✅ ✅ ✅
材料设计 CGCNN ✅ ✅
问题类型 案例名称 NVIDIA 海光 太初 沐曦
天气预报 Extformer-MoE 气象预报 ✅ ✅ ✅
天气预报 FourCastNet 气象预报 ✅ ✅
天气预报 NowCastNet 气象预报 ✅ ✅
天气预报 GraphCast 气象预报 ✅ ✅ ✅
天气预报 DGMR 气象预报 ✅
地震波形反演 VelocityGAN 地震波形反演 ✅ ✅
交通预测 TGCN 交通流量预测 ✅ ✅
天气预报 EarthFormer 气象预报 ✅ ✅
交通预测 IOPS 交通流量预测 ✅ ✅
天气预报 Pang-Weather 气象预报 ✅ ✅
天气预报 FengWu 气象预报 ✅ ✅
问题类型 案例名称 NVIDIA 海光 太初 沐曦
化学分子生成 Moflow ✅ ✅
化学反应预测 IFM ✅ ✅

2. 运行指南

针对 PaddleScience 已支持的硬件,我们为每个硬件提供了一个运行示例,以1D 欧拉梁变形为例。

Note

请确保你已经在你的环境中正确安装了计算硬件对应的 PaddlePaddle,否则请参考 PaddleCustomDevice,将你的硬件代码接入到飞桨中。

# 安装 PaddleScience
git clone -b develop https://github.com/PaddlePaddle/PaddleScience.git
# 若 github clone 速度比较慢,可以使用 gitee clone
# git clone -b develop https://gitee.com/paddlepaddle/PaddleScience.git

cd PaddleScience

# install paddlesci with editable mode
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
cd examples/euler_beam
python euler_beam.py
python euler_beam.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/euler_beam/euler_beam_pretrained.pdparams
python euler_beam.py mode=export
python euler_beam.py mode=infer
# 安装 PaddleScience
git clone -b develop https://github.com/PaddlePaddle/PaddleScience.git
# 若 github clone 速度比较慢,可以使用 gitee clone
# git clone -b develop https://gitee.com/paddlepaddle/PaddleScience.git

cd PaddleScience

# install paddlesci with editable mode
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
cd examples/euler_beam
python euler_beam.py
# 测试自己训练的模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=$YOUR_MODEL_PATH
# 测试官方提供的预训练模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/euler_beam/euler_beam_pretrained.pdparams
python euler_beam.py mode=export
python euler_beam.py mode=infer
# 安装 PaddleScience
git clone -b develop https://github.com/PaddlePaddle/PaddleScience.git
# 若 github clone 速度比较慢,可以使用 gitee clone
# git clone -b develop https://gitee.com/paddlepaddle/PaddleScience.git

cd PaddleScience

# install paddlesci with editable mode
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
cd examples/euler_beam
python euler_beam.py
# 测试自己训练的模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=$YOUR_MODEL_PATH
# 测试官方提供的预训练模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/euler_beam/euler_beam_pretrained.pdparams
python euler_beam.py mode=export
python euler_beam.py mode=infer INFER.device=sdaa
# 安装 PaddleScience
git clone -b develop https://github.com/PaddlePaddle/PaddleScience.git
# 若 github clone 速度比较慢,可以使用 gitee clone
# git clone -b develop https://gitee.com/paddlepaddle/PaddleScience.git

cd PaddleScience

# install paddlesci with editable mode
python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
cd examples/euler_beam
python euler_beam.py
# 测试自己训练的模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=$YOUR_MODEL_PATH
# 测试官方提供的预训练模型
python euler_beam.py mode=eval EVAL.pretrained_model_path=https://paddle-org.bj.bcebos.com/paddlescience/models/euler_beam/euler_beam_pretrained.pdparams
python euler_beam.py mode=export
python euler_beam.py mode=infer

3. 贡献指南

我们在公开的案例文档开头提供了基于 NVIDIA CUDA 训练的参考精度和对应的预训练模型权重,如果需要在指定的硬件上运行,可以参考如下步骤:

  1. 如果你的硬件类型尚未接入 PaddlePaddle,则可以参考 PaddleCustomDevice 官方文档,接入飞桨框架。如果你的硬件类型已接入 PaddlePaddle,但尚未添加到 PaddleScience 的硬件支持列表中,请在 ppsci/utils/config.py 和 deploy/python_infer/base.py 中添加你的硬件类型。

  2. 按照案例文档给出的步骤,准备好必要的数据集。

  3. 如果模型文档中提供了模型训练命令,则需要在你的硬件上进行全量训练,保存训练日志,记录最佳模型精度以及最佳模型权重,这些内容一般会在训练过程中,自动保存在案例文件夹下。

  4. 如果模型文档中提供了模型评估命令,则需要在你的硬件上对第三步所保存的最佳模型进行精度评估,保存评估日志,记录评估精度,这些内容一般会在评估过程中,自动保存在案例文件夹下。

    Note

    对于模型全量训练精度,默认要求最佳精度与 NVIDIA CUDA 精度对齐。具体地,如果案例精度指标为相对误差(如 L2 相对误差),则指标不能超过参考值 ± 0.5%,如果案例精度指标为 MSE/MAE 一类的误差,则与参考值应保持在同一量级。

  5. 如果模型文档中提供了模型导出和推理命令,请按照模型导出和推理命令,验证在新硬件上模型导出和推理是否能够正常执行并对齐 CUDA 的推理结果。

  6. 上述步骤完成后,可以在 1. 硬件支持列表 的表格中,给对应模型添加你的硬件支持信息(✅),然后提交 PR 到 PaddleScience。你的 PR 应该至少包括以下内容:

    • 在 2. 运行指南 中添加基于你的硬件环境使用模型的运行说明文档
    • 训练保存的最佳模型权重文件(.pdparams 文件)
    • 训练/评估等运行日志(.log 文件)
    • 验证模型精度所用到的软件版本,包括但不限于:
      • PaddlePaddle 版本
      • PaddleCustomDevice 版本(如果有)
    • 验证模型精度所用到的机器环境,包括但不限于:
      • 芯片型号
      • 系统版本
      • 硬件驱动版本
      • 算子库版本等

4. 更多文档

更多关于飞桨多硬件适配和使用的相关文档,可以参考: