2023年9月21日下午,在以“加速行业智能化”为主题的华为全联接大会2023(Huawei Connect2023)昇思MindSpore专题论坛上,昇思MindSpore开源社区正式发布MindSpore AI4Science高频模型套件。
昇思MindSpore长期布局AI4Science(科学智能)领域,不断瞄准行业热点与痛点问题,以其卓越的性能和创新的能力为科学智能领域带来了巨大的助力。MindSpore SciAI 0.1版本内置了60+高频SOTA模型,覆盖物理感知(如PINNs、DeepRitz以及PFNN)和神经算子(如FNO、DeepONet、PDENet)等主流模型,模型覆盖度全球第一;提供了高阶API(一键环境配置、自动模型加载、极简训练微调等),开发者和用户开箱即用。MindSpore SciAI为广大开发者和用户提供了高效、易用的AI4Science科学智能套件。点击阅读原文可前往代码仓下载。
图1 MindSpore SciAI套件架构图
1、 SOTA模型
1.1、物理感知
物理感知模型是指将物理学中的先验知识(如方程/初边界条件等)融入到神经网络中的一类模型,较为典型的有PINNs(如图2所示)、Deep Ritz以及PFNN等。该类模型的优势:无需生成离散网格;可基于AI框架的自动微分能力进行导数计算,避免数值微分离散误差;天然适用于反问题及数据同化问题;相比数据驱动具有更强的外插能力和更少的样本量。劣势:缺乏网络结构设计指引,奇异性问题学习困难;损失函数包含多项约束,训练难以收敛;物理约束变化时需要重新训练,缺乏泛化性;计算精度和收敛缺乏理论保证。
针对上述问题,学术界和昇思MindSpore提出了一系列改进方案,如自适应激活函数、时间&空间分解、多尺度优化以及自适应加权等。MindSpore SciAI内置了SOTA物理感知模型,应用领域也涵盖了流体、电磁、声、热、固体等众多领域。
图2 物理感知模型之PINNs
1.2、神经算子
PINNs等物理感知模型主要求解特定方程,神经算子模型则能够学习无限维函数空间的映射,一次求解整个PDEs族。较为典型的有FNO(如图3所示)、DeepONet以及PDENet等。FNO主要利用傅里叶变换的性质,在傅里叶空间中学习函数之间的映射,然后再将结果转回至物理空间。DeepONet通过“branch net”和“trunk net”两个子网络学习函数之间的映射。神经算子模型在流体、气象等领域有较好的表现,MindSpore SciAI因此也内置了SOTA神经算子模型。
图3神经算子模型之FNO
2、总结与展望
昇思MindSpore SciAI 0.1版本正式发布,希望有更多的企业、科研院所携手昇思,共同打造自主创新的AI4Science科学智能套件,加速助力人工智能产业生态繁荣发展。
代码仓地址为:
https://gitee.com/mindspore/mindscience/tree/master/SciAI
附录
附录1、模块及功能
本节主要介绍MindSpore SciAI高阶和基础API。MindSpore SciAI目录结构如下:
├── SciAI
│ ├── cmake # 编译脚本
│ ├── docs # 文档
│ │ ├── FAQ # 常见问题解答
│ ├── sciai # MindSpore SciAI主目录
│ │ ├── architecture # 神经网络基础模块
│ │ ├── common # 通用模块
│ │ ├── context # 上下文设置
│ │ ├── model # **AI4Science高频模型**
│ │ ├── operators # 高阶微分
│ │ └── utils # 其他辅助功能
│ └── tutorial # 教学模型
1.1高阶API
1.2、基础API
1.2.1、基础API
1.2.2、通用模块
1.2.3、上下文设置
1.2.4、高阶求导函数
1.2.5、辅助功能
附录2、网络模型库
MindSpore SciAI提供了丰富的AI4Science高频模型,下图汇总了当前已实现的网络模型及其对应领域。
附录3、使用方式
MindSpore SciAI提供两种模型训练和评估方式,为开发者提供灵活且简洁的使用方式和开发接口。
3.1、高阶API启动(推荐)
3.1.1、使用AutoModel训练、微调模型
根据AutoModel.from_pretrained接口获取已支持的网络模型。使用AutoModel.train实现模型的训练,并且在训练前,可使用AutoModel.update_config调整训练参数或加载.ckpt文件实现模型微调。AutoModel.update_config可选参数依赖于模型类型,具体可参考网络模型库中“MindSpore实现与网络参数链接”。
from sciai.model import AutoModel
# 获取`cpinns`网络模型
model = AutoModel.from_pretrained("cpinns")
# 使用默认参数训练网络,生成的图片、数据与日志将保存至用户的执行目录中
model.train()
# 或者加载`.ckpt`文件
model.update_config(load_ckpt=True, load_ckpt_path="./checkpoints/your_file.ckpt", epochs=500)
# 基于新加载的参数,继续训练模型,实现微调
model.train()
3.1.2、使用AutoModel评估模型
用户可以使用AutoModel.evaluate评估训练结果。该接口将默认加载SciAI模型库中提供的.ckpt文件用于评估,用户也可以调用model.update_config接口自定义加载的文件。
from sciai.model import AutoModel
# 获取`cpinns`网络模型
model = AutoModel.from_pretrained("cpinns")
# 加载网络默认的ckpt文件,评估网络模型
model.evaluate()
# 自定义加载ckpt文件
model.update_config(load_ckpt=True, load_ckpt_path="./checkpoints/your_file.ckpt")
# 评估网络模型
model.evaluate()
3.1.3、恢复参数文件与数据集
用户可能会遇到自动下载的模型参数.ckpt文件或数据集被误删的情况,可以通过如下方式更新参数,强制重新下载。
model.update_config(force_download=True)
3.2、脚本接口
3.2.1、环境准备
首先使用如下命令直接克隆整个仓库并准备环境变量,运行文件.env会将SciAI项目目录添加至环境变量PYTHONPATH中。
git clone https://gitee.com/mindspore/mindscience
source ./mindscience/SciAI/.env
完成后,可以参考网络模型库中各个模型README_CN.md 的快速开始章节,使用源码进行训练与推理。
3.2.2、网络模型训练
使用训练脚本train.py进行网络模型训练。
cd ./mindscience/SciAI/sciai/model/cpinns/
python ./train.py [--parameters]
3.2.3、网络模型加载.ckpt文件微调
python ./train.py --load_ckpt true --load_ckpt_path {your_ckpt_file.ckpt}
[--parameters]
3.2.4、网络模型评估
使用脚本eval.py对已完成训练的网络模型进行评估。
python ./eval.py [--parameters]
可配置参数[--parameters]包括学习率、训练周期、数据读取保存路径、checkpoints文件加载路径等,具体请参考网络模型库中“昇思MindSpore实现与网络参数链接”。
3.2.5、cpinns计算结果如下
参考文献
[1] https://gitee.com/mindspore/mindscience/tree/master.
[2] https://gitee.com/mindspore/mindscience/tree/master/SciAI
[3] Raissi M, Perdikaris P, Karniadakis G E. Physics informed deep learning (part i): Data-driven solutions of nonlinear partial differential equations[J]. arXiv preprint arXiv:1711.10561, 2017.
[4] Yu B. The deep Ritz method: a deep learning-based numerical algorithm for solving variational problems[J]. Communications in Mathematics and Statistics, 2018, 6(1): 1-12.
[5] Sheng H, Yang C. PFNN: A penalty-free neural network method for solving a class of second-order boundary-value problems on complex geometries[J]. Journal of Computational Physics, 2021, 428: 110085.
[6] Li Z, Kovachki N, Azizzadenesheli K, et al. Fourier neural operator for parametric partial differential equations[J]. arXiv preprint arXiv:2010.08895, 2020.
[7] Lu L, Jin P, Karniadakis G E. Deeponet: Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators[J]. arXiv preprint arXiv:1910.03193, 2019.
[8] Long Z, Lu Y, Ma X, et al. Pde-net: Learning pdes from data[C]//International conference on machine learning. PMLR, 2018: 3208-3216.