From 619caeebc9da442e0cfc52f2e3d3e072a807aaef Mon Sep 17 00:00:00 2001 From: b_rookie Date: Wed, 20 Aug 2025 10:35:12 +0800 Subject: [PATCH 1/3] mod models and diffuser --- cmake/package.cmake | 1 + docs/architecture/mindscience-core.md | 515 ++++++++++-------- mindscience/__init__.py | 2 + mindscience/{models => }/diffuser/__init__.py | 3 +- .../{models => }/diffuser/diffusion.py | 207 +++++-- .../diffuser/diffusion_transformer.py | 2 +- mindscience/models/GraphCast/__init__.py | 6 +- mindscience/models/__init__.py | 8 +- mindscience/models/layers/__init__.py | 10 +- mindscience/models/neural_operator/afno2d.py | 133 +++-- mindscience/models/neural_operator/afnonet.py | 50 +- mindscience/models/neural_operator/dft.py | 117 ++-- mindscience/models/neural_operator/fno.py | 48 +- mindscience/models/transformer/__init__.py | 11 +- mindscience/models/transformer/attention.py | 45 +- mindscience/models/transformer/vit.py | 39 +- .../riemann_computer/rusanov_net.py | 22 +- mindscience/utils/__init__.py | 18 +- mindscience/utils/check_func.py | 108 +++- mindscience/utils/log_utils.py | 22 +- mindscience/utils/time_utils.py | 6 +- models.md | 2 +- models_en.md | 2 +- tests/{models/diffusion => diffuser}/ae.py | 0 .../{models/diffusion => diffuser}/dataset.py | 0 .../{models/diffusion => diffuser}/ddim_gt.py | 0 .../{models/diffusion => diffuser}/ddpm_gt.py | 0 .../diffusion => diffuser}/test_diffusion.py | 4 +- .../test_diffusion_train.py | 2 +- tests/{models/diffusion => diffuser}/utils.py | 0 tests/models/transformer/attention_block.ckpt | Bin 200421 -> 0 bytes .../transformer/attention_block_output.npy | Bin 3968 -> 0 bytes tests/models/transformer/grads.npz | Bin 67558 -> 0 bytes tests/models/transformer/input.npy | Bin 15488 -> 0 bytes tests/models/transformer/label.npy | Bin 15488 -> 0 bytes tests/models/transformer/mask.npy | Bin 14528 -> 0 bytes tests/models/transformer/multihead.ckpt | Bin 66698 -> 0 bytes tests/models/transformer/multihead_output.npy | Bin 7808 -> 0 bytes tests/models/transformer/test_attention.py | 79 +-- tests/models/transformer/test_vit.py | 28 +- 40 files changed, 940 insertions(+), 550 deletions(-) rename mindscience/{models => }/diffuser/__init__.py (88%) rename mindscience/{models => }/diffuser/diffusion.py (91%) rename mindscience/{models => }/diffuser/diffusion_transformer.py (99%) rename tests/{models/diffusion => diffuser}/ae.py (100%) rename tests/{models/diffusion => diffuser}/dataset.py (100%) rename tests/{models/diffusion => diffuser}/ddim_gt.py (100%) rename tests/{models/diffusion => diffuser}/ddpm_gt.py (100%) rename tests/{models/diffusion => diffuser}/test_diffusion.py (99%) rename tests/{models/diffusion => diffuser}/test_diffusion_train.py (98%) rename tests/{models/diffusion => diffuser}/utils.py (100%) delete mode 100644 tests/models/transformer/attention_block.ckpt delete mode 100644 tests/models/transformer/attention_block_output.npy delete mode 100644 tests/models/transformer/grads.npz delete mode 100644 tests/models/transformer/input.npy delete mode 100644 tests/models/transformer/label.npy delete mode 100644 tests/models/transformer/mask.npy delete mode 100644 tests/models/transformer/multihead.ckpt delete mode 100644 tests/models/transformer/multihead_output.npy diff --git a/cmake/package.cmake b/cmake/package.cmake index c85bcb59a..4830e79cc 100644 --- a/cmake/package.cmake +++ b/cmake/package.cmake @@ -34,6 +34,7 @@ install( ${CMAKE_SOURCE_DIR}/mindscience/ccsrc ${CMAKE_SOURCE_DIR}/mindscience/common ${CMAKE_SOURCE_DIR}/mindscience/data + ${CMAKE_SOURCE_DIR}/mindscience/diffuser ${CMAKE_SOURCE_DIR}/mindscience/distributed ${CMAKE_SOURCE_DIR}/mindscience/e3nn ${CMAKE_SOURCE_DIR}/mindscience/gnn diff --git a/docs/architecture/mindscience-core.md b/docs/architecture/mindscience-core.md index 91c9eeae3..dd86d9b1d 100644 --- a/docs/architecture/mindscience-core.md +++ b/docs/architecture/mindscience-core.md @@ -1,6 +1,8 @@ -# **重构设计: 分层架构与模块化方案** + -## **1. 顶层设计** +# 重构设计:分层架构与模块化方案 + +## 1. 顶层设计 ### 顶层设计目标 @@ -13,26 +15,26 @@ ### 设计原则 -1.开放扩展性 -- 提供清晰的接口规范(`ParallelStrategy`、`MemoryTechnique`、`PrecisionManager`、`GradientController`等) -- 支持注册自定义实现(`register_strategy()`,`register_memory_tech()`) +1. 开放扩展性 + - 提供清晰的接口规范(`ParallelStrategy`、`MemoryTechnique`、`PrecisionManager`、`GradientController`等) + - 支持注册自定义实现(`register_strategy()`,`register_memory_tech()`) -2.透明可观测 -- 内置详尽的性能分析工具 -- 所有优化操作可追溯、可禁用 +2. 透明可观测 + - 内置详尽的性能分析工具 + - 所有优化操作可追溯、可禁用 -3.渐进式抽象 -- 基础模式:直接配置驱动(YAML) -- 高级模式:细粒度API控制 -- 专家模式:直接访问底层组件 +3. 渐进式抽象 + - 基础模式:直接配置驱动(YAML) + - 高级模式:细粒度API控制 + - 专家模式:直接访问底层组件 -4.领域友好 -- 物理约束、数值方法等作为可插拔组件 -- 保留科学计算特有的控制流(如PINNS) +4. 领域友好 + - 物理约束、数值方法等作为可插拔组件 + - 保留科学计算特有的控制流(如PINNS) -5.性能优先 -- 所有抽象层保持零开销原则 -- 关键路径直接调用MindSpore原生接口 +5. 性能优先 + - 所有抽象层保持零开销原则 + - 关键路径直接调用MindSpore原生接口 ### 整体架构设计 @@ -41,11 +43,12 @@ MindSpore Science-Core的代码架构设计如下图: ![软件架构](../images/architecture.png) MindScience套件的核心框架为`MindSpore Science-Core`,`MindSpore Science-Core`之上为领域套件,包括`MindFlow`、`MindEarth`等。 + - **注意**:`gnn`和`e3nn`库包含了数据接口/网络等,内容较多,作为独立模块统一开发管理更为合理,能对齐业界方式。 - `MindSpore Science-Core`框架的底层为`speed`加速模块,包含了`sciops`和`distributed`。 - `sciops`目录包含两部分,区别于MindSpore的ops库,使用方式:`from mindscience import sciops`。 -- - 对接了`speed`模块.so文件的自定义算子接口,对应ccsrc目录,使用AscendC实现了`EvoformerAttn`、`FFT`等底层加速算子,不开源的代码开放.so文件。 -- - Python算子接口为基于Python开发的算子,如自动微分、`FFT`、`Irreps`、`SSM`、`FA`等算子。 + - 对接了`speed`模块.so文件的自定义算子接口,对应ccsrc目录,使用AscendC实现了`EvoformerAttn`、`FFT`等底层加速算子,不开源的代码开放.so文件。 + - Python算子接口为基于Python开发的算子,如自动微分、`FFT`、`Irreps`、`SSM`、`FA`等算子。 - `distributed`为并行加速模块,提供科学计算领域常用的并行接口,包括DP/OP/TP/PP等功能。 - `gnn`模块包含了图数据接口和常用GNN网络。 - `pde`模块包含了PINNs网络接口。 @@ -58,7 +61,7 @@ MindScience套件的核心框架为`MindSpore Science-Core`,`MindSpore Science `tests`为测试模块,包含框架的UT、ST用例,大部分为UT用例,由于门禁对用例时长有限制,端到端的ST用例主要在本地看护。 -## **2. 目录结构重构** +## 2. 目录结构重构 ```bash mindscience/ @@ -69,7 +72,7 @@ mindscience/ ├── setup.py # 版本依赖 ├── build.sh # 编译脚本 ├── docker/ # docker配置 -│ ├── Dockerfile +│ ├── Dockerfile ├── mindscience/ │ ├── common/ # 通用基础模块 │ │ ├── schedulers # Learning rate schedulers @@ -78,13 +81,13 @@ mindscience/ │ │ │ ├── primitives_2d/ # Rectangle, Disk, Triangle, Polygon │ │ │ ├── primitives_3d/ # Cuboid, Cylinder, Cone, Tetrahedron │ │ │ ├── primitives_nd/ # HyperCube, FixedPoint -│ │ ├── optimizers/ # 优化器(如LBFGS/PINNs优化器,AdaHessian二阶优化器) +│ │ ├── optimizers/ # 优化器(如LBFGS/PINNs优化器,AdaHessian二阶优化器) │ │ ├── metrics/ # 领域指标 │ │ │ ├── fid.py -│ │ │ ├── accuracy +│ │ │ ├── accuracy │ │ ├── losses/ # 损失函数(L2、物理约束损失) │ ├── data/ # 通用数据集模块 -│ │ ├── elec/ # 通用电磁数据接口 +│ │ ├── elec/ # 通用电磁数据接口 │ │ ├── earth/ # 通用气象数据接口 │ │ ├── flow/ # 通用流体数据接口 │ ├── ccsrc/ # 底层算子文件 @@ -95,53 +98,53 @@ mindscience/ │ │ ├── CMakeLists.txt # CMAKE │ ├── sciops/ # 通用算子库(加速算子、融合算子等) │ │ ├── einsum.py # einsum实现 -│ │ ├── differential.py # gradient, divergence -│ │ ├── evoformer_attention.py # evoformer实现 +│ │ ├── differential.py # gradient, divergence +│ │ ├── evoformer_attention.py # evoformer实现 │ │ ├── dft.py # DFT实现 │ ├── gnn/ # GNN模型库 │ │ ├── graph.py # 图数据接口 -│ │ ├── gat.py -│ │ ├── gcn.py +│ │ ├── gat.py +│ │ ├── gcn.py │ ├── e3nn/ # 等变计算库 │ │ ├── equivariant.py # 等变网络层 │ │ ├── irreps.py # 不可约表示(Irreps)定义 │ ├── pde/ # PINNS库 │ │ ├── pde_node.py # PDE定义 │ │ ├── pde_loss.py # PDE类实现 +│ ├── diffuser/ # 扩散模型 +│ │ ├── ddpm.py/ # DDPM扩散模型 +│ │ ├── ddim.py/ # DDIM扩散模型 │ ├── models/ # 跨领域可复用基础神经网络模块 │ │ ├── neural_operator/ # 通用神经算子库 -│ │ │ ├── fno.py -│ │ │ ├── kno.py -│ │ │ └── sno.py +│ │ │ ├── fno.py +│ │ │ ├── kno.py +│ │ │ └── sno.py │ │ ├── transformer/ # transformer模型 │ │ │ ├── attention.py # 自注意力网络层 -│ │ │ ├── ViT.py # ViT +│ │ │ ├── vit.py # VisionTransformer │ │ │ ├── DiT.py # DiT -│ │ ├── diffuser/ # 扩散模型 -│ │ │ ├── ddpm.py/ # DDPM扩散模型 -│ │ │ ├── ddim.py/ # DDIM扩散模型 │ │ ├── layers/ # 扩散模型 │ │ │ ├── mlp.py # MLP │ │ │ ├── kan.py # KAN │ │ │ ├── siren.py # siren -│ │ ├── PDEFormer/ +│ │ ├── PDEFormer/ │ │ ├── GraphCast/ -│ │ └── pangu/ +│ │ └── pangu/ │ ├── solvers/ # 通用求解器框架 │ │ ├── base_solver.py # Solver抽象基类 -│ │ ├── cbs.py -│ │ ├── cfd.py -│ │ ├── fdtd.py +│ │ ├── cbs.py +│ │ ├── cfd.py +│ │ ├── fdtd.py │ │ └── ... # 通用求解策略(如迭代求解、自适应步长) │ ├── utils/ # 统一工具API入口 │ │ ├── logging/ # 日志 -│ │ ├── config/ +│ │ ├── config/ │ │ ├── visualization/ # 画图 │ │ ├── io/ # IO │ │ ├── config.py # 配置管理 │ │ └── export.py # 模型导出工具(ONNX、MindIR) -│ ├── constants.py # 常量 -│ │ +│ ├── constants.py # 常量 +│ │ ├── mindflow/ # 计算流体动力学套件 │ ├── utils/ # 领域模型(如PINNs、FNO) │ ├── applications/ # 应用案例(圆柱绕流、湍流模拟) @@ -151,19 +154,18 @@ mindscience/ │ │ ├── mindelec/ # 计算电磁套件 │ ├── utils/ # 电磁模型 -│ ├── applications/ +│ ├── applications/ # 电磁应用案例 │ │ ├──src/ # 案例源文件 │ │ ├──train.py # 训练脚本 -│ └── ... -│ │ +│ └── ... ├── mindchemistry/ # 计算化学套件 │ ├── utils/ # 化学模型 -│ ├── applications/ +│ ├── applications/ │ │ ├──src/ # 案例源文件 │ │ ├──train.py # 训练脚本 -│ └── ... -│ -├── owner +│ └── ... +│ +├── owner │ ├── tests/ # 分层测试 │ ├── utils/ # 辅助函数 @@ -189,79 +191,87 @@ mindscience/ ``` +## 3. 核心模块设计 -## **3. 核心模块设计** +### (1) 通用API接口(mindscience/common) -### **(1) 通用API接口(mindscience/common)** - **功能**:提供通用接口,如学习率、数学运算、优化器、并行等接口。 - **示例**: + ```python - # mindscience/core/lr.py - def get_warmup_cosine_annealing_lr(): +# mindscience/core/lr.py +def get_warmup_cosine_annealing_lr(): ... - # mindscience/core/math.py - def get_grid_2d(resolution): - - class AdaHessian(): - +# mindscience/core/math.py +def get_grid_2d(resolution): ... +class AdaHessian(): + ... ``` -### **(2) 通用数据接口(mindscience/data)** +### (2) 通用数据接口(mindscience/data) + - **功能**:提供数据通用接口,包括流体/气象数据等接口。 - **示例**: - ```python - # mindscience/data/base.py - class BaseDataset: - def __init__(self, data_path, split_ratio=(0.7, 0.2, 0.1)): - self.data_path = data_path - self.split_ratio = split_ratio - - @abstractmethod - def load_data(self): - """加载原始数据(需子类实现)""" - - def preprocess(self): - """默认预处理(子类可覆盖)""" - - def split(self): - """按比例划分数据集""" - - # 领域套件实现示例(MindSponge) - class ProteinDataset(BaseDataset): - def load_data(self): - self.raw_data = read_pdb(self.data_path) - - def preprocess(self): - self.graph_data = pdb_to_graph(self.raw_data) - ``` -### 算子层(mindscience/sciops)** +```python +# mindscience/data/base.py +class BaseDataset: + def __init__(self, data_path, split_ratio=(0.7, 0.2, 0.1)): + self.data_path = data_path + self.split_ratio = split_ratio + + @abstractmethod + def load_data(self): + """加载原始数据(需子类实现)""" + + def preprocess(self): + """默认预处理(子类可覆盖)""" + + def split(self): + """按比例划分数据集""" + +# 领域套件实现示例(MindSponge) +class ProteinDataset(BaseDataset): + def load_data(self): + self.raw_data = read_pdb(self.data_path) + + def preprocess(self): + self.graph_data = pdb_to_graph(self.raw_data) +``` + +### 算子层(mindscience/sciops) + - **功能**:提供基于MindSpore开发的科学计算算子,包括底层融合算子和Python算子。 -#### 算子层(mindscience/sciops)** +#### 算子层(mindscience/sciops) + - **功能**:提供基于Python开发的科学计算算子。 - **示例**: - ```python - # mindscience/models/ops/fno.py - def hessian(): - ``` -#### **(3) 底层融合算子(mindscience/ccsrc)** +```python +# mindscience/models/ops/fno.py +def hessian(): + ... +``` + +#### (3) 底层融合算子(mindscience/ccsrc) + - **功能**:提供自定义算子的共享so文件,不开源,供给`sciops`层调用。主要涉及核心数值计算、物理仿真和科学计算基础算子等计算密集型、需要高度优化的算子,如DFT、矩阵分解、微分、信号处理等算子。MindSpore使用pybind11连接Python侧的接口和C++侧的接口,兼顾Python的简单便捷和C++的高性能,无缝继承numpy,减少数据拷贝。采用CPython解释器实现,会有GIL(Global Interpreter Lock,全局解释器锁),多线程并不能利用多核优势。可以通过换其他解释器,或者通过c++实现真正的多线程。 - **示例**: - ```C++ - #include "frontend/ops/ops.h" - #include - #include "include/core/utils/python_adapter.h" - #include "pipeline/jit/ps/parse/data_converter.h" - - namespace mindspore { - // namespace to support primitive operators - namespace prim { - ValuePtr GetPythonOps(const std::string &op_name, const std::string &module_name, bool use_signature) { + +```cpp +#include "frontend/ops/ops.h" +#include +#include "include/core/utils/python_adapter.h" +#include "pipeline/jit/ps/parse/data_converter.h" + +namespace mindspore { +// namespace to support primitive operators +namespace prim { +ValuePtr GetPythonOps(const std::string &op_name, const std::string &module_name, bool use_signature) { py::object obj = python_adapter::GetPyFn(module_name, op_name); ValuePtr node = nullptr; bool succ = parse::ConvertData(obj, &node, use_signature); @@ -269,31 +279,31 @@ mindscience/ MS_LOG(INTERNAL_EXCEPTION) << "Get Python op " << op_name << " from " << module_name << " fail."; } return node; - } - } // namespace prim - } // namespace mindspore - - ``` +} +} // namespace prim +} // namespace mindspore +``` +### 通用PINNS库(mindscience/pde) -### 通用PINNS库(mindscience/pde)** - **功能**:封装可复用的PINNS接口,供各个领域使用。 - **示例**: - ```python - # mindscience/models/transformer/attention.py - class PdeNode: - """PDE节点定义""" - def __init__(self, use_flash=False): - ... - - def construct(self, q, k, v): - ... - # mindscience/models/pde/diffusion.py - class PDEWithLoss: - def __init__(self, use_flash=False): - ... - +```python +# mindscience/models/transformer/attention.py +class PdeNode: + """PDE节点定义""" + def __init__(self, use_flash=False): + ... + + def construct(self, q, k, v): + ... + +# mindscience/models/pde/diffusion.py +class PDEWithLoss: + def __init__(self, use_flash=False): + ... + def pde(self): """ Governing equation based on sympy, abstract method. @@ -309,12 +319,13 @@ mindscience/ def parse_node(self, formula_nodes, inputs=None, norm=None): ... - ``` +``` +#### 并行加速库(mindscience/distributed) -#### 并行加速库(mindscience/distributed)** - **功能**:并行训练接口。 - **示例**: + ```python # mindscience/models/transformer/attention.py class Op: @@ -326,22 +337,24 @@ mindscience/ class Tp: def __init__(self,): ... - ``` -### **(4) 神经网络基础层(mindscience/models)** +### (4) 神经网络基础层(mindscience/models) + 在`sciops`层之上,封装可复用的网络模块,继承自`nn.Cell`,供各个领域使用。 -#### 通用Transformer库(mindscience/models/transformer)** +#### 通用Transformer库(mindscience/models/transformer) + - **功能**:封装可复用的Transformer模块,供各个领域使用。 - **示例**: + ```python # mindscience/models/gnn/Gat.py class Transformer: def __init__(self, use_flash=False): ... - + def construct(self, q, k, v): ... @@ -349,49 +362,55 @@ mindscience/ class Attention: def __init__(self, use_flash=False): ... - + def construct(self, q, k, v): ... ``` -#### 通用diffusion库(mindscience/models/diffuser)** +#### 通用diffusion库(mindscience/models/diffuser) + - **功能**:封装可复用的diffusion模块,供各个领域使用。 - **示例**: + ```python # mindscience/models/diffusion/ddpm.py class DDPM: def __init__(self, use_flash=False): ... - + def add_noise(self, q, k, v): ... ``` -#### 通用网络层库(mindscience/models/layers)** +#### 通用网络层库(mindscience/models/layers) + - **功能**:封装可复用的diffusion模块,供各个领域使用。 - **示例**: + ```python # mindscience/models/diffusion/ddpm.py class MLP: def __init__(self,): ... - + def add_noise(self, x): ... ``` -### 通用等变计算库(mindscience/e3nn)** +### 通用等变计算库(mindscience/e3nn) + - **功能**:封装可复用的等变计算接口,供各个领域使用。 - **示例**: + ```python # mindscience/models/e3nn/irreps.py class Irreps: """不可约表示(兼容e3nn语法)""" def __init__(self, irreps_str): self.irreps = self._parse(irreps_str) - + def _parse(self, s): # 解析字符串如 "5x0e + 3x1o" ... @@ -407,7 +426,7 @@ mindscience/ nn.Dense(64, irreps_out.scalar_dim) ]) self.gate_nn = nn.Dense(irreps_in.vector_dim, irreps_out.gate_dim) - + def construct(self, x_scalar, x_vector): gate = self.gate_nn(x_vector) scalar_out = self.scalar_nn(x_scalar) * gate @@ -425,8 +444,10 @@ mindscience/ ``` ### 通用GNN库(mindscience/gnn)** + - **功能**:封装可复用的GNN模块,供各个领域使用。 - **示例**: + ```python class Graph: def __init__(self, nodes, edges, node_feat, edge_feat): @@ -434,7 +455,7 @@ mindscience/ self.edges = edges # 边列表 (, dst) self.node_feat = node_feat # 节点特征张量 self.edge_feat = edge_feat # 边特征张量 - + def to_mindspore_tensor(self): """转换为MindSpore张量格式""" @@ -444,10 +465,11 @@ mindscience/ """从图中采样k-hop邻居子图""" ``` +### (5) 求解器框架(mindscience/solvers) -### **(5) 求解器框架(mindscience/solvers)** - **功能**:定义通用求解器框架。 - **示例**: + ```python # core/solvers/base_solver.py class BaseSolver(nn.Cell): @@ -455,109 +477,124 @@ mindscience/ self.model = model self.optimizer = optimizer self.loss_fn = loss_fn - + def train_step(self, data): # 标准训练步骤(前向、损失、反向) ... - + def solve(self, inputs): # 推理接口 return self.model(inputs) ``` -### **(6) 工具接口(mindscience/utils)** -- **功能**:定义通用求解器框架。 +### (6) 工具接口(mindscience/utils) + +- **功能**:提供通用工具和辅助函数。 - **示例**: - ```python - # mindscience/utils/logging.py - class Logger(nn.Cell): - def __init__(self, ): - ... - ``` +```python +# mindscience/utils/logging.py +class Logger(nn.Cell): + def __init__(self, ): + ... +``` --- -## **4. 领域套件设计(以MindFlow为例)** +## 4. 领域套件设计(以MindFlow为例) + +### (1) 领域工具(mindflow/utils) -### **(1) 领域工具(mindflow/utils)** - **职责**:领域专用工具(如流场可视化、边界条件生成)。 - **示例**: - ```python - # mindflow/utils/visualization.py - def plot_velocity_field(data, pred): - """绘制速度场对比图""" - ... - ``` -### **(2) 应用案例(mindflow/applications)** +```python +# mindflow/utils/visualization.py +def plot_velocity_field(data, pred): + """绘制速度场对比图""" + ... +``` + +### (2) 应用案例(mindflow/applications) + - **职责**:提供端到端案例(数据、训练、可视化)。 - **示例**: - ```python - # mindflow/applications/cylinder_flow/train.py - def train_cylinder_flow(): - # 加载数据 - data = load_data("cylinder_dataset.h5") - # 初始化模型(使用core模块组件) - model = PINNs(MLP(input_dims=3, hidden_dims=[128, 128])) - solvers = BaseSolver(model, Adam(model.params()), MSE()) - # 训练与评估 - solvers.train(data, epochs=1000) - solvers.export("cylinder_model.mindir") - ``` + +```python +# mindflow/applications/cylinder_flow/train.py +def train_cylinder_flow(): + # 加载数据 + data = load_data("cylinder_dataset.h5") + # 初始化模型(使用core模块组件) + model = PINNs(MLP(input_dims=3, hidden_dims=[128, 128])) + solvers = BaseSolver(model, Adam(model.params()), MSE()) + # 训练与评估 + solvers.train(data, epochs=1000) + solvers.export("cylinder_model.mindir") +``` --- -## **5. 依赖管理与构建优化** -### **(1) 模块化安装** +## 5. 依赖管理与构建优化 + +### (1) 模块化安装 + - **setup.py 配置**: - ```python - # 支持按需安装 - extras_require={ - "mindflow": ["matplotlib", "h5py"], - "mindsponge": ["biopython"], - "all": ["matplotlib", "h5py", "biopython"] - } - ``` -### **(2) 动态导入机制** +```python +# 支持按需安装 +extras_require={ + "mindflow": ["matplotlib", "h5py"], + "mindsponge": ["biopython"], + "all": ["matplotlib", "h5py", "biopython"] +} +``` + +### (2) 动态导入机制 + - **延迟加载领域模块**: - ```python - # core/api/__init__.py - def get_solver(solver_type): - if solver_type == "mindflow": - from mindflow.solvers import FlowSolver - return FlowSolver - elif solver_type == "mindsponge": - from mindsponge.solvers import MDsolver - return MDsolver - ``` + +```python +# core/api/__init__.py +def get_solver(solver_type): + if solver_type == "mindflow": + from mindflow.solvers import FlowSolver + return FlowSolver + elif solver_type == "mindsponge": + from mindsponge.solvers import MDsolver + return MDsolver +``` --- -## **6. 测试与文档策略** +## 6. 测试与文档策略 + +### (1) 门禁测试 -### **(1) 门禁测试** gitee门禁上需要大修改,要联系门禁组增加需求。 + - **基础模块测试**:覆盖core下的所有算子与组件。 - ```python - # tests/core/test_attention.py - def test_multihead_attention(): - attn = MultiHeadAttention(use_flash=True) - output = attn(q, k, v) - assert output.shape == expected_shape - ``` + +```python +# tests/core/test_attention.py +def test_multihead_attention(): + attn = MultiHeadAttention(use_flash=True) + output = attn(q, k, v) + assert output.shape == expected_shape +``` + 测试目录 - **领域测试**:验证领域模型与案例。 - ```python - # tests/mindflow/test_pinn.py - def test_pinn_convergence(): - loss = train_pinn(...) - assert loss < 1e-3 - ``` -### **(2) 文档统一化** +```python +# tests/mindflow/test_pinn.py +def test_pinn_convergence(): + loss = train_pinn(...) + assert loss < 1e-3 +``` + +### (2) 文档统一化 当前每个领域套件都有自己的一个页面,展示案例和API,重构后每个套件只展示领域案例,框架的API统一展示。 @@ -566,52 +603,57 @@ gitee门禁上需要大修改,要联系门禁组增加需求。 --- -## **7. 性能优化与生态集成** +## 7. 性能优化与生态集成 + +### (1) MindSpore特性利用 -### **(1) MindSpore特性利用** - **图算融合**:通过`nn.Cell`、`@ms_function`、`@lazy_inline`、`@jit`、`@jit_class`优化计算图。 - **原生并行**:在底层集成分布式策略,领域套件无需关注细节。 - ```python - # core/parallel/config.py - def auto_parallel(model, data_parallel=4, model_parallel=2): - model = auto_parallel(model) - ... - ``` -### **(2) 软硬件适配** +```python +# core/parallel/config.py +def auto_parallel(model, data_parallel=4, model_parallel=2): + model = auto_parallel(model) + ... +``` + +### (2) 软硬件适配 -主要针对Ascend910B+Mindspore2.6.0版本 +主要针对Ascend+Mindspore2.6.0版本 - **多后端支持**:在core层封装CPU/Ascend算子差异。 - ```python - # mindscience/models/ops/math_ops/fft.py - def fft2d(x): - if get_device() == "CPU": - return cufft.fft2d(x) - else: - return ascend_fft.fft2d(x) - ``` + +```python +# mindscience/models/ops/math_ops/fft.py +def fft2d(x): + if get_device() == "CPU": + return cufft.fft2d(x) + else: + return ascend_fft.fft2d(x) +``` --- -## **8. 实施步骤** +## 8. 实施步骤 + 由于`MindEnergy`套件开源的需求急迫,因此先按照重构后的方式开发`MindEnergy`套件。 + 1. **代码分层拆分** - - 将现有代码按功能拆分为`mindscience`核心模块和领域套件。 + - 将现有代码按功能拆分为`mindscience`核心模块和领域套件。 2. **接口标准化** - - 定义通用基类(如`BaseSolver`)并重构现有模型。 + - 定义通用基类(如`BaseSolver`)并重构现有模型。 3. **依赖解耦** - - 确保领域套件仅依赖`mindscience`,无横向依赖。 + - 确保领域套件仅依赖`mindscience`,无横向依赖。 4. **测试迁移** - - 将原有测试按模块归属迁移到对应的`tests/modules`和`tests/mindflow`等。 + - 将原有测试按模块归属迁移到对应的`tests/modules`和`tests/mindflow`等。 5. **CI/CD适配** - - 更新CI流程,分模块运行测试与构建。 + - 更新CI流程,分模块运行测试与构建。 6. **文档迁移与更新** - - 重构文档结构,突出分层设计。 + - 重构文档结构,突出分层设计。 -## **9. 负责人** +## 9. 负责人 -### 责任田负责人: +### 责任田负责人 责任田负责人负责模块的开发合入,相关代码的重构和合入优先找特性的第一责任人开发,其次找对应领域的开发人员。 @@ -639,5 +681,6 @@ committer:刘红升、郭伯强、张毅、龚玥 --- -## **总结** -通过以上设计,MindScience将实现**高内聚、低耦合**的架构,各领域套件可快速复用核心能力,同时专注于领域创新。此方案平衡了灵活性与统一性,为后续扩展(如新增MindEnergy套件)提供了清晰路径。 \ No newline at end of file +## 总结 + +通过以上设计,MindScience将实现**高内聚、低耦合**的架构,各领域套件可快速复用核心能力,同时专注于领域创新。此方案平衡了灵活性与统一性,为后续扩展(如新增MindEnergy套件)提供了清晰路径。 diff --git a/mindscience/__init__.py b/mindscience/__init__.py index 056989625..341e30e6c 100644 --- a/mindscience/__init__.py +++ b/mindscience/__init__.py @@ -20,6 +20,7 @@ import time from .common import * from .data import * +from .diffuser import * from .distributed import * from .e3nn import * from .gnn import * @@ -74,6 +75,7 @@ _mindspore_version_check() __all__ = [] __all__.extend(common.__all__) __all__.extend(data.__all__) +__all__.extend(diffuser.__all__) __all__.extend(distributed.__all__) __all__.extend(e3nn.__all__) __all__.extend(gnn.__all__) diff --git a/mindscience/models/diffuser/__init__.py b/mindscience/diffuser/__init__.py similarity index 88% rename from mindscience/models/diffuser/__init__.py rename to mindscience/diffuser/__init__.py index b87f7c937..1d1296671 100644 --- a/mindscience/models/diffuser/__init__.py +++ b/mindscience/diffuser/__init__.py @@ -18,4 +18,5 @@ init from .diffusion import DDPMPipeline, DiffusionScheduler, DDPMScheduler, DDIMPipeline, DDIMScheduler, DiffusionTrainer from .diffusion_transformer import DiffusionTransformer, ConditionDiffusionTransformer -__all__ = ["DiffusionScheduler", "DDPMPipeline", "DDPMScheduler", "DDIMPipeline", "DDIMScheduler", "DiffusionTrainer", "DiffusionTransformer", "ConditionDiffusionTransformer"] \ No newline at end of file +__all__ = ["DiffusionScheduler", "DDPMPipeline", "DDPMScheduler", "DDIMPipeline", + "DDIMScheduler", "DiffusionTrainer", "DiffusionTransformer", "ConditionDiffusionTransformer"] diff --git a/mindscience/models/diffuser/diffusion.py b/mindscience/diffuser/diffusion.py similarity index 91% rename from mindscience/models/diffuser/diffusion.py rename to mindscience/diffuser/diffusion.py index a407ca81f..2f1bee7c4 100644 --- a/mindscience/models/diffuser/diffusion.py +++ b/mindscience/diffuser/diffusion.py @@ -28,7 +28,10 @@ def extract(a, t, x_shape): return out.reshape(b, *((1,) * (len(x_shape) - 1))) -def betas_for_alpha_bar(num_diffusion_timesteps, max_beta=0.999, alpha_transform_type="cosine"): +def betas_for_alpha_bar( + num_diffusion_timesteps, + max_beta=0.999, + alpha_transform_type="cosine"): """ Create a beta schedule that discretizes the given alpha_t_bar function, which defines the cumulative product of (1-beta) over time from t = [0,1]. @@ -180,15 +183,19 @@ class DiffusionScheduler: posterior_variance = self.betas * \ (1. - alphas_cumprod_prev) / (1. - alphas_cumprod) - # above: equal to 1. / (1. / (1. - alpha_cumprod_tm1) + alpha_t / beta_t) + # above: equal to 1. / (1. / (1. - alpha_cumprod_tm1) + alpha_t / + # beta_t) posterior_variance = np.clip(posterior_variance, 1e-20, None) self.posterior_variance = Tensor( posterior_variance, dtype=compute_dtype) - # below: log calculation clipped because the posterior variance is 0 at the beginning of the diffusion chain - self.posterior_log_variance_clipped = Tensor(np.log( - posterior_variance), dtype=compute_dtype) # Tensor(np.log(posterior_variance)) - # See formula (7) from `Denoising Diffusion Probabilistic Models `_ + # below: log calculation clipped because the posterior variance is 0 at + # the beginning of the diffusion chain + self.posterior_log_variance_clipped = Tensor( + np.log(posterior_variance), + dtype=compute_dtype) # Tensor(np.log(posterior_variance)) + # See formula (7) from `Denoising Diffusion Probabilistic Models + # `_ self.posterior_mean_coef1 = Tensor( self.betas * np.sqrt(alphas_cumprod_prev) / (1. - alphas_cumprod), dtype=compute_dtype) self.posterior_mean_coef2 = Tensor( @@ -196,7 +203,10 @@ class DiffusionScheduler: self.num_inference_steps = None self.dynamic_thresholding_ratio = dynamic_thresholding_ratio - def _init_betas(self, beta_schedule="squaredcos_cap_v2", rescale_betas_zero_snr=False): + def _init_betas( + self, + beta_schedule="squaredcos_cap_v2", + rescale_betas_zero_snr=False): """init noise beta schedule Args: @@ -218,7 +228,9 @@ class DiffusionScheduler: elif beta_schedule == "scaled_linear": # this schedule is very specific to the latent diffusion model. betas = np.linspace( - self.beta_start**0.5, self.beta_end**0.5, self.num_train_timesteps) ** 2 + self.beta_start**0.5, + self.beta_end**0.5, + self.num_train_timesteps) ** 2 elif beta_schedule == "squaredcos_cap_v2": # Glide cosine schedule betas = betas_for_alpha_bar(self.num_train_timesteps) @@ -251,8 +263,7 @@ class DiffusionScheduler: raise ValueError( f"`num_inference_steps`: {num_inference_steps} cannot be larger than `num_train_timesteps`:" f" {self.num_train_timesteps} as the diffusion model trained with this scheduler can only handle" - f" maximal {self.num_train_timesteps} timesteps." - ) + f" maximal {self.num_train_timesteps} timesteps.") self.num_inference_steps = num_inference_steps # "linspace", "leading", "trailing" corresponds to annotation of Table 2. of if self.timestep_spacing == "linspace": @@ -266,15 +277,17 @@ class DiffusionScheduler: elif self.timestep_spacing == "leading": step_ratio = self.num_train_timesteps // num_inference_steps # creates integer timesteps by multiplying by ratio - # casting to int to avoid issues when num_inference_step is power of 3 + # casting to int to avoid issues when num_inference_step is power + # of 3 timesteps = (np.arange(0, num_inference_steps) * step_ratio).round()[::-1].astype(np.int32) elif self.timestep_spacing == "trailing": step_ratio = self.num_train_timesteps // num_inference_steps # creates integer timesteps by multiplying by ratio - # casting to int to avoid issues when num_inference_step is power of 3 - timesteps = np.round( - np.arange(self.num_train_timesteps, 0, -step_ratio)).astype(np.int32) + # casting to int to avoid issues when num_inference_step is power + # of 3 + timesteps = np.round(np.arange( + self.num_train_timesteps, 0, -step_ratio)).astype(np.int32) timesteps -= 1 else: raise ValueError( @@ -309,7 +322,11 @@ class DiffusionScheduler: return sample - def _pred_origin_sample(self, model_output: Tensor, sample: Tensor, timestep: Tensor): + def _pred_origin_sample( + self, + model_output: Tensor, + sample: Tensor, + timestep: Tensor): """ Predict x_0 with x_t. @@ -329,23 +346,26 @@ class DiffusionScheduler: elif self.prediction_type == "sample": pred_original_sample = model_output elif self.prediction_type == "v_prediction": - pred_original_sample = extract(self.sqrt_alphas_cumprod, timestep, sample.shape)*sample - \ - extract(self.sqrt_one_minus_alphas_cumprod, - timestep, sample.shape)*model_output + pred_original_sample = extract( + self.sqrt_alphas_cumprod, timestep, sample.shape) * sample - extract( + self.sqrt_one_minus_alphas_cumprod, timestep, sample.shape) * model_output else: raise ValueError( f"prediction_type given as {self.prediction_type} must be one of `epsilon`, `sample`, or" - " `v_prediction`" - ) + " `v_prediction`") # 2. Clip or threshold "predicted x_0" if self.thresholding: pred_original_sample = self._threshold_sample(pred_original_sample) elif self.clip_sample: - pred_original_sample = pred_original_sample.clamp(-self.clip_sample_range, - self.clip_sample_range) + pred_original_sample = pred_original_sample.clamp( + -self.clip_sample_range, self.clip_sample_range) return pred_original_sample - def add_noise(self, original_samples: Tensor, noise: Tensor, timesteps: Tensor): + def add_noise( + self, + original_samples: Tensor, + noise: Tensor, + timesteps: Tensor): """ Diffusion add noise process. @@ -357,8 +377,17 @@ class DiffusionScheduler: Returns: Tensor, the noised sample of the next step. """ - return (extract(self.sqrt_alphas_cumprod, timesteps, original_samples.shape)*original_samples + - extract(self.sqrt_one_minus_alphas_cumprod, timesteps, original_samples.shape)*noise) + return ( + extract( + self.sqrt_alphas_cumprod, + timesteps, + original_samples.shape) * + original_samples + + extract( + self.sqrt_one_minus_alphas_cumprod, + timesteps, + original_samples.shape) * + noise) def step(self, model_output: Tensor, sample: Tensor, timestep: Tensor): """ @@ -479,7 +508,8 @@ class DDPMScheduler(DiffusionScheduler): # hacks - were probably added for training stability if self.variance_type == "fixed_small": pass - # for rl-diffuser `Planning with Diffusion for Flexible Behavior Synthesis `_ + # for rl-diffuser `Planning with Diffusion for Flexible Behavior + # Synthesis `_ elif self.variance_type == "fixed_small_log": variance = ops.log(variance) variance = ops.exp(0.5 * variance) @@ -534,11 +564,19 @@ class DDPMScheduler(DiffusionScheduler): pred_original_sample = self._pred_origin_sample( model_output, sample, timestep) # 2. Compute predicted previous sample µ_t - # See formula (7) from `Denoising Diffusion Probabilistic Models `_ + # See formula (7) from `Denoising Diffusion Probabilistic Models + # `_ pred_prev_sample = ( - extract(self.posterior_mean_coef1, timestep, sample.shape)*pred_original_sample + - extract(self.posterior_mean_coef2, timestep, sample.shape)*sample - ) + extract( + self.posterior_mean_coef1, + timestep, + sample.shape) * + pred_original_sample + + extract( + self.posterior_mean_coef2, + timestep, + sample.shape) * + sample) # 3. Add noise v = self._get_variance(sample, timestep, predicted_variance) @@ -660,7 +698,11 @@ class DDIMScheduler(DiffusionScheduler): return variance - def _pred_epsilon(self, model_output: Tensor, sample: Tensor, timestep: Tensor): + def _pred_epsilon( + self, + model_output: Tensor, + sample: Tensor, + timestep: Tensor): """ Predict epsilon. @@ -748,17 +790,21 @@ class DDIMScheduler(DiffusionScheduler): std_dev_t = (eta * ops.sqrt(variance)).astype(dtype) if use_clipped_model_output: - # the pred_epsilon is always re-derived from the clipped x_0 in Glide + # the pred_epsilon is always re-derived from the clipped x_0 in + # Glide pred_epsilon = ( (sample - (alpha_prod_t ** (0.5)).astype(dtype) * pred_original_sample) / beta_prod_t ** (0.5) ).astype(dtype) - # 5. compute "direction pointing to x_t" of formula (12) from `Denoising Diffusion Implicit Models `_ - pred_sample_direction = ( - (1 - alpha_prod_t_prev - std_dev_t**2) ** (0.5)).reshape(batch_size, 1, 1) * pred_epsilon + # 5. compute "direction pointing to x_t" of formula (12) from + # `Denoising Diffusion Implicit Models + # `_ + pred_sample_direction = ((1 - alpha_prod_t_prev - std_dev_t**2) + ** (0.5)).reshape(batch_size, 1, 1) * pred_epsilon - # 6. compute x_t without "random noise" of formula (12) from `Denoising Diffusion Implicit Models `_ + # 6. compute x_t without "random noise" of formula (12) from `Denoising + # Diffusion Implicit Models `_ coef = ops.sqrt(alpha_prod_t_prev).reshape(batch_size, 1, 1) prev_sample = coef * pred_original_sample + pred_sample_direction if eta > 0: @@ -826,7 +872,14 @@ class DiffusionPipeline: """ - def __init__(self, model, scheduler, batch_size, seq_len, num_inference_steps=1000, compute_dtype=mstype.float32): + def __init__( + self, + model, + scheduler, + batch_size, + seq_len, + num_inference_steps=1000, + compute_dtype=mstype.float32): self.model = model self.scheduler = scheduler self.seq_len = seq_len @@ -863,8 +916,12 @@ class DiffusionPipeline: Returns: Tensor, Predicted original samples. """ - sample = Tensor(np.random.randn(self.batch_size, self.seq_len, - self.model.in_channels), dtype=self.compute_dtype) + sample = Tensor( + np.random.randn( + self.batch_size, + self.seq_len, + self.model.in_channels), + dtype=self.compute_dtype) if condition is not None: condition = condition.reshape(self.batch_size, -1) @@ -932,11 +989,19 @@ class DDPMPipeline(DiffusionPipeline): """ # pylint: disable=W0235 - def __init__(self, model, scheduler, batch_size, seq_len, num_inference_steps=1000, compute_dtype=mstype.float32): + def __init__( + self, + model, + scheduler, + batch_size, + seq_len, + num_inference_steps=1000, + compute_dtype=mstype.float32): if not isinstance(scheduler, DDPMScheduler): raise TypeError('scheduler type must be DDPMScheduler') if num_inference_steps != scheduler.num_train_timesteps: - raise ValueError('num_inference_steps must equal to num_train_timesteps') + raise ValueError( + 'num_inference_steps must equal to num_train_timesteps') super().__init__(model, scheduler, batch_size, seq_len, num_inference_steps, compute_dtype) @@ -1001,17 +1066,34 @@ class DDIMPipeline(DiffusionPipeline): """ # pylint: disable=W0235 - def __init__(self, model, scheduler, batch_size, seq_len, num_inference_steps=1000, compute_dtype=mstype.float32): + def __init__( + self, + model, + scheduler, + batch_size, + seq_len, + num_inference_steps=1000, + compute_dtype=mstype.float32): if not isinstance(scheduler, DDIMScheduler): raise TypeError('scheduler type must be DDIMScheduler') super().__init__(model, scheduler, batch_size, seq_len, num_inference_steps, compute_dtype) # pylint: disable=W0221 - def _sample_step(self, sample, condition, timesteps, eta, use_clipped_model_output): + def _sample_step( + self, + sample, + condition, + timesteps, + eta, + use_clipped_model_output): model_output = self._pred_noise(sample, condition, timesteps) - sample = self.scheduler.step(model_output=model_output, sample=sample, timestep=timesteps, - eta=eta, use_clipped_model_output=use_clipped_model_output) + sample = self.scheduler.step( + model_output=model_output, + sample=sample, + timestep=timesteps, + eta=eta, + use_clipped_model_output=use_clipped_model_output) return sample def __call__(self, condition=None, eta=0., use_clipped_model_output=False): @@ -1034,15 +1116,23 @@ class DDIMPipeline(DiffusionPipeline): """ if not 0 <= eta <= 1: raise ValueError('eta must in range [0, 1]') - sample = Tensor(np.random.randn(self.batch_size, self.seq_len, - self.model.in_channels), dtype=self.compute_dtype) + sample = Tensor( + np.random.randn( + self.batch_size, + self.seq_len, + self.model.in_channels), + dtype=self.compute_dtype) if condition is not None: condition = condition.reshape(self.batch_size, -1) for t in self.scheduler.num_timesteps: batched_times = ops.ones((self.batch_size,), mstype.int32) * int(t) sample = self._sample_step( - sample, condition, batched_times, eta, use_clipped_model_output) + sample, + condition, + batched_times, + eta, + use_clipped_model_output) return sample @@ -1134,7 +1224,12 @@ class DiffusionTrainer: else: raise ValueError(f'invalid loss type {self.loss_type}') - def get_loss(self, original_samples: Tensor, noise: Tensor, timesteps: Tensor, condition: Tensor = None): + def get_loss( + self, + original_samples: Tensor, + noise: Tensor, + timesteps: Tensor, + condition: Tensor = None): r""" Calculate the forward loss of diffusion process. @@ -1160,9 +1255,17 @@ class DiffusionTrainer: elif self.objective == 'pred_x0': target = original_samples elif self.objective == 'pred_v': - target = (extract(self.scheduler.sqrt_alphas_cumprod, timesteps, original_samples.shape)*noise - - extract(self.scheduler.sqrt_one_minus_alphas_cumprod, timesteps, - original_samples.shape)*original_samples) + target = ( + extract( + self.scheduler.sqrt_alphas_cumprod, + timesteps, + original_samples.shape) * + noise - + extract( + self.scheduler.sqrt_one_minus_alphas_cumprod, + timesteps, + original_samples.shape) * + original_samples) else: target = noise diff --git a/mindscience/models/diffuser/diffusion_transformer.py b/mindscience/diffuser/diffusion_transformer.py similarity index 99% rename from mindscience/models/diffuser/diffusion_transformer.py rename to mindscience/diffuser/diffusion_transformer.py index 4d18af80d..c6baea62a 100644 --- a/mindscience/models/diffuser/diffusion_transformer.py +++ b/mindscience/diffuser/diffusion_transformer.py @@ -19,7 +19,7 @@ import math import numpy as np from mindspore import nn, ops, Tensor from mindspore import dtype as mstype -from ..transformer import TransformerBlock +from ..models import TransformerBlock class Mlp(nn.Cell): diff --git a/mindscience/models/GraphCast/__init__.py b/mindscience/models/GraphCast/__init__.py index ccc0beecd..1f46ab524 100644 --- a/mindscience/models/GraphCast/__init__.py +++ b/mindscience/models/GraphCast/__init__.py @@ -12,7 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""init""" +"""GraphCast Models Package + +This package contains implementations of GraphCast models for weather forecasting. +GraphCast is a machine learning model for weather forecasting that uses graph neural networks. +""" from .graphcastnet import GraphCastNet __all__ = ['GraphCastNet'] diff --git a/mindscience/models/__init__.py b/mindscience/models/__init__.py index e33e2ab90..2cc514aa9 100644 --- a/mindscience/models/__init__.py +++ b/mindscience/models/__init__.py @@ -13,16 +13,18 @@ # limitations under the License. # ============================================================================ """ -init +Models Package + +This package contains various neural network models and related components. +It includes implementations of popular architectures such as Vision Transformer, +Graph Neural Networks, and other domain-specific models. """ -from .diffuser import * from .GraphCast import * from .layers import * from .neural_operator import * from .transformer import * __all__ = [] -__all__.extend(diffuser.__all__) __all__.extend(GraphCast.__all__) __all__.extend(layers.__all__) __all__.extend(neural_operator.__all__) diff --git a/mindscience/models/layers/__init__.py b/mindscience/models/layers/__init__.py index 929173e0f..203fc4563 100644 --- a/mindscience/models/layers/__init__.py +++ b/mindscience/models/layers/__init__.py @@ -13,10 +13,16 @@ # limitations under the License. # ============================================================================ """ -init +Layers Package + +This package contains various neural network layers and building blocks +that are used across different models in the MindScience toolkit. +It includes activation functions, basic blocks, and specialized layers +like UNet2D. """ from .activation import get_activation from .basic_block import LinearBlock, ResBlock, InputScale, FCSequential, MultiScaleFCSequential, DropPath from .unet2d import UNet2D -__all__ = ["get_activation", "LinearBlock", "ResBlock", "InputScale", "FCSequential", "MultiScaleFCSequential", "DropPath", "UNet2D"] \ No newline at end of file +__all__ = ["get_activation", "LinearBlock", "ResBlock", "InputScale", "FCSequential", + "MultiScaleFCSequential", "DropPath", "UNet2D"] diff --git a/mindscience/models/neural_operator/afno2d.py b/mindscience/models/neural_operator/afno2d.py index a10cece18..b3e78739b 100644 --- a/mindscience/models/neural_operator/afno2d.py +++ b/mindscience/models/neural_operator/afno2d.py @@ -77,12 +77,20 @@ class Mlp(nn.Cell): dropout_rate=1.0, compute_dtype=mstype.float16): super(Mlp, self).__init__() - self.fc1 = nn.Dense(embed_dims, embed_dims * mlp_ratio, - weight_init=initializer(Normal(sigma=0.02), shape=(embed_dims * mlp_ratio, embed_dims)), - ).to_float(compute_dtype) - self.fc2 = nn.Dense(embed_dims * mlp_ratio, embed_dims, - weight_init=initializer(Normal(sigma=0.02), shape=(embed_dims, embed_dims * mlp_ratio)), - ).to_float(compute_dtype) + self.fc1 = nn.Dense( + embed_dims, embed_dims * mlp_ratio, + weight_init=initializer( + Normal(sigma=0.02), + shape=(embed_dims * mlp_ratio, embed_dims) + ), + ).to_float(compute_dtype) + self.fc2 = nn.Dense( + embed_dims * mlp_ratio, embed_dims, + weight_init=initializer( + Normal(sigma=0.02), + shape=(embed_dims, embed_dims * mlp_ratio) + ), + ).to_float(compute_dtype) self.act_fn = nn.GELU() self.dropout = nn.Dropout(dropout_rate) @@ -130,12 +138,14 @@ class AFNOBlock(nn.Cell): self.ffn_norm = nn.LayerNorm([embed_dims], epsilon=1e-6).to_float(compute_dtype) self.mlp = Mlp(embed_dims, mlp_ratio, dropout_rate, compute_dtype=compute_dtype) - self.filter = AFNO2D(h_size=h_size // patch_size, - w_size=w_size // patch_size, - embed_dims=embed_dims, - num_blocks=num_blocks, - high_freq=high_freq, - compute_dtype=compute_dtype) + self.filter = AFNO2D( + h_size=h_size // patch_size, + w_size=w_size // patch_size, + embed_dims=embed_dims, + num_blocks=num_blocks, + high_freq=high_freq, + compute_dtype=compute_dtype + ) self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() def construct(self, x): @@ -218,15 +228,27 @@ class ForwardFeatures(nn.Cell): dropout_rate=1.0, compute_dtype=mstype.float16): super(ForwardFeatures, self).__init__() - self.patch_embed = PatchEmbed(in_channels, embed_dims, patch_size, compute_dtype=compute_dtype) + self.patch_embed = PatchEmbed( + in_channels, embed_dims, patch_size, compute_dtype=compute_dtype + ) self.pos_embed = Parameter( - initializer(TruncatedNormal(sigma=0.02), [1, grid_size[0] * grid_size[1], embed_dims], dtype=compute_dtype), + initializer( + TruncatedNormal(sigma=0.02), + [1, grid_size[0] * grid_size[1], embed_dims], + dtype=compute_dtype + ), requires_grad=True) self.layer = nn.CellList([]) self.encoder_norm = nn.LayerNorm([embed_dims], epsilon=1e-6).to_float(compute_dtype) for _ in range(depth): - self.layer.append(AFNOBlock(embed_dims, mlp_ratio, dropout_rate, h_size=h_size, w_size=w_size, - patch_size=patch_size, compute_dtype=compute_dtype)) + self.layer.append( + AFNOBlock( + embed_dims, mlp_ratio, dropout_rate, + h_size=h_size, w_size=w_size, + patch_size=patch_size, + compute_dtype=compute_dtype + ) + ) self.pos_drop = nn.Dropout(keep_prob=dropout_rate) self.h = grid_size[0] @@ -283,22 +305,45 @@ class AFNO2D(nn.Cell): self.h_size = h_size self.w_size = w_size - self.dft2_cell = dft2(shape=(h_size, w_size), dim=(-3, -2), - modes=(h_size // 2, w_size // 2 + 1), compute_dtype=compute_dtype) - self.idft2_cell = idft2(shape=(h_size, w_size), dim=(-3, -2), - modes=(h_size // 2, w_size // 2 + 1), compute_dtype=compute_dtype) + self.dft2_cell = dft2( + shape=(h_size, w_size), dim=(-3, -2), + modes=(h_size // 2, w_size // 2 + 1), compute_dtype=compute_dtype + ) + self.idft2_cell = idft2( + shape=(h_size, w_size), dim=(-3, -2), + modes=(h_size // 2, w_size // 2 + 1), compute_dtype=compute_dtype + ) self.scale = 0.02 self.num_blocks = num_blocks self.block_size = embed_dims // self.num_blocks self.hidden_size_factor = 1 - w1 = self.scale * Tensor(np.random.randn( - 2, self.num_blocks, self.block_size, self.block_size * self.hidden_size_factor), dtype=compute_dtype) - b1 = self.scale * Tensor(np.random.randn(2, self.num_blocks, self.block_size * self.hidden_size_factor), - dtype=compute_dtype) - w2 = self.scale * Tensor(np.random.randn( - 2, self.num_blocks, self.block_size * self.hidden_size_factor, self.block_size), dtype=compute_dtype) - b2 = self.scale * Tensor(np.random.randn(2, self.num_blocks, self.block_size), dtype=compute_dtype) + w1 = self.scale * Tensor( + np.random.randn( + 2, self.num_blocks, self.block_size, + self.block_size * self.hidden_size_factor + ), + dtype=compute_dtype + ) + b1 = self.scale * Tensor( + np.random.randn( + 2, self.num_blocks, self.block_size * self.hidden_size_factor + ), + dtype=compute_dtype + ) + w2 = self.scale * Tensor( + np.random.randn( + 2, self.num_blocks, self.block_size * self.hidden_size_factor, + self.block_size + ), + dtype=compute_dtype + ) + b2 = self.scale * Tensor( + np.random.randn( + 2, self.num_blocks, self.block_size + ), + dtype=compute_dtype + ) self.w1 = Parameter(w1, requires_grad=True) self.b1 = Parameter(b1, requires_grad=True) @@ -341,21 +386,43 @@ class AFNO2D(nn.Cell): x_ft_re, x_ft_im = self.dft2_cell((x_re, x_im)) - x_ft_re = x_ft_re.reshape(b, x_ft_re.shape[1], x_ft_re.shape[2], self.num_blocks, self.block_size) - x_ft_im = x_ft_im.reshape(b, x_ft_im.shape[1], x_ft_im.shape[2], self.num_blocks, self.block_size) + x_ft_re = x_ft_re.reshape( + b, x_ft_re.shape[1], x_ft_re.shape[2], + self.num_blocks, self.block_size + ) + x_ft_im = x_ft_im.reshape( + b, x_ft_im.shape[1], x_ft_im.shape[2], + self.num_blocks, self.block_size + ) kept_modes = h // 2 + 1 - o1_real = self.relu(self.mul2d(x_ft_re, self.w1[0]) - self.mul2d(x_ft_im, self.w1[1]) + self.b1[0]) + o1_real = self.relu( + self.mul2d(x_ft_re, self.w1[0]) - + self.mul2d(x_ft_im, self.w1[1]) + + self.b1[0] + ) o1_real[:, :, kept_modes:] = 0.0 - o1_imag = self.relu(self.mul2d(x_ft_im, self.w1[0]) + self.mul2d(x_ft_re, self.w1[1]) + self.b1[1]) + o1_imag = self.relu( + self.mul2d(x_ft_im, self.w1[0]) + + self.mul2d(x_ft_re, self.w1[1]) + + self.b1[1] + ) o1_imag[:, :, kept_modes:] = 0.0 - o2_real = (self.mul2d(o1_real, self.w2[0]) - self.mul2d(o1_imag, self.w2[1]) + self.b2[0]) + o2_real = ( + self.mul2d(o1_real, self.w2[0]) - + self.mul2d(o1_imag, self.w2[1]) + + self.b2[0] + ) o2_real[:, :, kept_modes:] = 0.0 - o2_imag = (self.mul2d(o1_imag, self.w2[0]) + self.mul2d(o1_real, self.w2[1]) + self.b2[1]) + o2_imag = ( + self.mul2d(o1_imag, self.w2[0]) + + self.mul2d(o1_real, self.w2[1]) + + self.b2[1] + ) o2_imag[:, :, kept_modes:] = 0.0 o2_real = self.cast(o2_real, self.compute_type) diff --git a/mindscience/models/neural_operator/afnonet.py b/mindscience/models/neural_operator/afnonet.py index 8f7b41320..6c50416b7 100644 --- a/mindscience/models/neural_operator/afnonet.py +++ b/mindscience/models/neural_operator/afnonet.py @@ -38,8 +38,8 @@ class AFNONet(nn.Cell): encoder_embed_dim (int): The encoder embedding dimension of encoder layer. Default: 768. mlp_ratio (int): The rate of mlp layer. Default: 4. dropout_rate (float): The rate of dropout layer. Default: 1.0. - compute_dtype (dtype): The data type for encoder, decoding_embedding, decoder and dense layer. - Default: mindspore.float32. + compute_dtype (dtype): The data type for encoder, decoding_embedding, + decoder and dense layer. Default: mindspore.float32. Inputs: - **x** (Tensor) - Tensor of shape :math:`(batch\_size, feature\_size, image\_height, image\_width)`. @@ -77,7 +77,8 @@ class AFNONet(nn.Cell): super(AFNONet, self).__init__() image_size = to_2tuple(image_size) try: - grid_size = (image_size[0] // patch_size, image_size[1] // patch_size) + grid_size = (image_size[0] // patch_size, + image_size[1] // patch_size) except ZeroDivisionError: ops.Print()("Patch size can't be Zero") @@ -91,25 +92,40 @@ class AFNONet(nn.Cell): self.transpose = ops.Transpose() - self.forward_features = ForwardFeatures(grid_size=grid_size, - h_size=image_size[0], - w_size=image_size[1], - in_channels=in_channels, - patch_size=patch_size, - depth=encoder_depths, - embed_dims=encoder_embed_dim, - mlp_ratio=mlp_ratio, - dropout_rate=dropout_rate, - compute_dtype=compute_dtype) + self.forward_features = ForwardFeatures( + grid_size=grid_size, + h_size=image_size[0], + w_size=image_size[1], + in_channels=in_channels, + patch_size=patch_size, + depth=encoder_depths, + embed_dims=encoder_embed_dim, + mlp_ratio=mlp_ratio, + dropout_rate=dropout_rate, + compute_dtype=compute_dtype + ) self.compute_type = compute_dtype - self.head = nn.Dense(encoder_embed_dim, patch_size ** 2 * out_channels, - weight_init=initializer(Normal(sigma=0.02), - shape=(patch_size ** 2 * out_channels, encoder_embed_dim)), - has_bias=False).to_float(compute_dtype) + self.head = nn.Dense( + encoder_embed_dim, patch_size ** 2 * out_channels, + weight_init=initializer( + Normal(sigma=0.02), + shape=(patch_size ** 2 * out_channels, encoder_embed_dim) + ), + has_bias=False + ).to_float(compute_dtype) def construct(self, x): + """ + Forward pass of the AFNONet model. + + Args: + x (Tensor): Input tensor of shape (batch_size, feature_size, image_height, image_width). + + Returns: + Tensor: Output tensor of shape (batch_size, patch_size, embed_dim). + """ x = self.forward_features(x) x = self.head(x) diff --git a/mindscience/models/neural_operator/dft.py b/mindscience/models/neural_operator/dft.py index 7da6d6483..24fe07b9d 100644 --- a/mindscience/models/neural_operator/dft.py +++ b/mindscience/models/neural_operator/dft.py @@ -12,7 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ - +""" +DFT +""" import numpy as np from scipy.linalg import dft @@ -61,7 +63,7 @@ class DFT1d(nn.Cell): else: self.dft_mat_res = self.dft_mat[:, -modes + 1:] - mat = Tensor(np.zeros(n, ), dtype=compute_dtype).reshape(n, 1) + mat = Tensor(np.zeros(n,), dtype=compute_dtype).reshape(n, 1) self.a_re_res = mindspore.numpy.flip( Tensor(self.dft_mat_res.real, dtype=compute_dtype), axis=-1) self.a_im_res = mindspore.numpy.flip( @@ -92,6 +94,7 @@ class DFT1d(nn.Cell): return y_re, y_im def construct(self, x): + """construct""" x_re, x_im = x x_re, x_im = P.Cast()(x_re, self.compute_dtype), P.Cast()(x_im, self.compute_dtype) if not self.inv: @@ -600,15 +603,27 @@ class SpectralConv2dDft(SpectralConvDft): x_im = ops.zeros_like(x_re) x_ft_re, x_ft_im = self._dft2_cell((x_re, x_im)) - out_ft_re1 = self._einsum(x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_re1) - self._einsum( - x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_im1) - out_ft_im1 = self._einsum(x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_im1) + self._einsum( - x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_re1) - - out_ft_re2 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_re2) - self._einsum( - x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_im2) - out_ft_im2 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_im2) + self._einsum( - x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_re2) + out_ft_re1 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_re1 + ) - self._einsum( + x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_im1 + ) + out_ft_im1 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_im1 + ) + self._einsum( + x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1]], self._w_re1 + ) + + out_ft_re2 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_re2 + ) - self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_im2 + ) + out_ft_im2 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_im2 + ) + self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1]], self._w_re2 + ) batch_size = x.shape[0] mat = self._mat.repeat(batch_size, 0) @@ -681,30 +696,62 @@ class SpectralConv3dDft(SpectralConvDft): x_im = ops.zeros_like(x_re) x_ft_re, x_ft_im = self._dft3_cell((x_re, x_im)) - out_ft_re1 = self._einsum(x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], - self._w_re1) - self._einsum(x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1], - :self.n_modes[2]], self._w_im1) - out_ft_im1 = self._einsum(x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], - self._w_im1) + self._einsum(x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1], - :self.n_modes[2]], self._w_re1) - out_ft_re2 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], - self._w_re2) - self._einsum(x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1], - :self.n_modes[2]], self._w_im2) - out_ft_im2 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], - self._w_im2) + self._einsum(x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1], - :self.n_modes[2]], self._w_re2) - out_ft_re3 = self._einsum(x_ft_re[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], - self._w_re3) - self._einsum(x_ft_im[:, :, :self.n_modes[0], -self.n_modes[1]:, - :self.n_modes[2]], self._w_im3) - out_ft_im3 = self._einsum(x_ft_re[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], - self._w_im3) + self._einsum(x_ft_im[:, :, :self.n_modes[0], -self.n_modes[1]:, - :self.n_modes[2]], self._w_re3) - out_ft_re4 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], - self._w_re4) - self._einsum(x_ft_im[:, :, -self.n_modes[0]:, -self.n_modes[1]:, - :self.n_modes[2]], self._w_im4) - out_ft_im4 = self._einsum(x_ft_re[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], - self._w_im4) + self._einsum(x_ft_im[:, :, -self.n_modes[0]:, -self.n_modes[1]:, - :self.n_modes[2]], self._w_re4) + out_ft_re1 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], + self._w_re1 + ) - self._einsum( + x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], + self._w_im1 + ) + out_ft_im1 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], + self._w_im1 + ) + self._einsum( + x_ft_im[:, :, :self.n_modes[0], :self.n_modes[1], :self.n_modes[2]], + self._w_re1 + ) + out_ft_re2 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], + self._w_re2 + ) - self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], + self._w_im2 + ) + out_ft_im2 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], + self._w_im2 + ) + self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, :self.n_modes[1], :self.n_modes[2]], + self._w_re2 + ) + out_ft_re3 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], + self._w_re3 + ) - self._einsum( + x_ft_im[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], + self._w_im3 + ) + out_ft_im3 = self._einsum( + x_ft_re[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], + self._w_im3 + ) + self._einsum( + x_ft_im[:, :, :self.n_modes[0], -self.n_modes[1]:, :self.n_modes[2]], + self._w_re3 + ) + out_ft_re4 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], + self._w_re4 + ) - self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], + self._w_im4 + ) + out_ft_im4 = self._einsum( + x_ft_re[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], + self._w_im4 + ) + self._einsum( + x_ft_im[:, :, -self.n_modes[0]:, -self.n_modes[1]:, :self.n_modes[2]], + self._w_re4 + ) batch_size = x.shape[0] mat_x = self._mat_x.repeat(batch_size, 0) diff --git a/mindscience/models/neural_operator/fno.py b/mindscience/models/neural_operator/fno.py index 257aa5d29..d4b254f76 100644 --- a/mindscience/models/neural_operator/fno.py +++ b/mindscience/models/neural_operator/fno.py @@ -119,33 +119,21 @@ class FNOBlocks(nn.Cell): ).to_float(self.fno_compute_dtype) elif len(self.resolutions) == 2: self._convs = SpectralConv2dDft( - self.in_channels, - self.out_channels, - self.n_modes, - self.resolutions, - compute_dtype=self.dft_compute_dtype + self.in_channels, self.out_channels, self.n_modes, + self.resolutions, compute_dtype=self.dft_compute_dtype ) self._fno_skips = nn.Conv2d( - self.in_channels, - self.out_channels, - kernel_size=1, - has_bias=False, - weight_init="HeUniform" + self.in_channels, self.out_channels, kernel_size=1, + has_bias=False, weight_init="HeUniform" ).to_float(self.fno_compute_dtype) elif len(self.resolutions) == 3: self._convs = SpectralConv3dDft( - self.in_channels, - self.out_channels, - self.n_modes, - self.resolutions, - compute_dtype=self.dft_compute_dtype + self.in_channels, self.out_channels, self.n_modes, + self.resolutions, compute_dtype=self.dft_compute_dtype ) self._fno_skips = nn.Conv3d( - self.in_channels, - self.out_channels, - kernel_size=1, - has_bias=False, - weight_init="HeUniform" + self.in_channels, self.out_channels, kernel_size=1, + has_bias=False, weight_init="HeUniform" ).to_float(self.fno_compute_dtype) else: raise ValueError("The length of input resolutions dimensions should be in [1, 2, 3], but got: {}".format( @@ -531,12 +519,14 @@ class FNO2D(FNO): resolutions = [resolutions, resolutions] if len(n_modes) != 2: raise ValueError( - "The dimension of n_modes should be equal to 2 when using FNO2D\ - but got dimension of n_modes {}".format(len(n_modes))) + "The dimension of n_modes should be equal to 2 when using FNO2D " + "but got dimension of n_modes {}".format(len(n_modes)) + ) if len(resolutions) != 2: raise ValueError( - "The dimension of resolutions should be equal to 2 when using FNO2D\ - but got dimension of resolutions {}".format(len(resolutions))) + "The dimension of resolutions should be equal to 2 when using FNO2D " + "but got dimension of resolutions {}".format(len(resolutions)) + ) super().__init__( in_channels, out_channels, @@ -647,12 +637,14 @@ class FNO3D(FNO): resolutions = [resolutions, resolutions, resolutions] if len(n_modes) != 3: raise ValueError( - "The dimension of n_modes should be equal to 3 when using FNO3D\ - but got dimension of n_modes {}".format(len(n_modes))) + "The dimension of n_modes should be equal to 3 when using FNO3D " + "but got dimension of n_modes {}".format(len(n_modes)) + ) if len(resolutions) != 3: raise ValueError( - "The dimension of resolutions should be equal to 3 when using FNO3D\ - but got dimension of resolutions {}".format(len(resolutions))) + "The dimension of resolutions should be equal to 3 when using FNO3D " + "but got dimension of resolutions {}".format(len(resolutions)) + ) super().__init__( in_channels, out_channels, diff --git a/mindscience/models/transformer/__init__.py b/mindscience/models/transformer/__init__.py index b7300a82d..9774942d0 100644 --- a/mindscience/models/transformer/__init__.py +++ b/mindscience/models/transformer/__init__.py @@ -12,8 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ -"""init""" +""" +Transformer Models Package + +This package contains implementations of various Transformer architectures, +including Vision Transformer (ViT) and related attention mechanisms. +""" from .attention import Attention, MultiHeadAttention, TransformerBlock -from .vit import ViT +from .vit import VisionTransformer -__all__ = ["Attention", "MultiHeadAttention", "TransformerBlock", "ViT"] +__all__ = ["Attention", "MultiHeadAttention", "TransformerBlock", "VisionTransformer"] diff --git a/mindscience/models/transformer/attention.py b/mindscience/models/transformer/attention.py index d19fff9cb..72e9ef258 100644 --- a/mindscience/models/transformer/attention.py +++ b/mindscience/models/transformer/attention.py @@ -31,7 +31,8 @@ class Attention(nn.Cell): Inputs: - **x** (Tensor) - Tensor with shape :math:`(batch\_size, sequence\_len, in\_channels)`. - **attn_mask** (Tensor, optional) - Tensor with shape :math:`(sequence\_len, sequence\_len)` or - or :math:`(batch\_size, 1, sequence\_len, sequence\_len)`. Default: ``None``. + or :math:`(batch\_size, 1, sequence\_len, sequence\_len)`. + Default: ``None``. - **key_padding_mask** (Tensor, optional) - Tensor with shape :math:`(batch\_size, sequence\_len)`. Default: ``None``. @@ -72,14 +73,17 @@ class Attention(nn.Cell): elif len(attn_mask.shape) == 4: pass else: - raise Exception(f'attn_mask shape {attn_mask.shape} not support') + raise Exception( + f'attn_mask shape {attn_mask.shape} not support') mask = mask + attn_mask.astype(mstype.uint8) if key_padding_mask is not None: batch, node = key_padding_mask.shape[0], key_padding_mask.shape[-1] if len(key_padding_mask.shape) == 2: - key_padding_mask = ops.broadcast_to(key_padding_mask.unsqueeze(1), (batch, node, node)).unsqueeze(1) + key_padding_mask = ops.broadcast_to( + key_padding_mask.unsqueeze(1), (batch, node, node)).unsqueeze(1) else: - raise Exception(f'key_padding_mask shape {attn_mask.shape} not support') + raise Exception( + f'key_padding_mask shape {attn_mask.shape} not support') mask = mask + key_padding_mask.astype(mstype.uint8) return mask @@ -95,8 +99,8 @@ class Attention(nn.Cell): """get qkv value""" b, n, _ = x.shape qkv = ( - self.qkv(x).reshape(b, n, 3, self.num_heads, - - 1).transpose((2, 0, 3, 1, 4)) + self.qkv(x).reshape(b, n, 3, self.num_heads, + - 1).transpose((2, 0, 3, 1, 4)) ) return qkv[0], qkv[1], qkv[2] @@ -168,7 +172,8 @@ class FlashAttn(nn.Cell): self.scale = scale def construct(self, query: Tensor, key: Tensor, value: Tensor, mask: Optional[Tensor] = None): - query, key, value = query.astype(self.fa_dtype), key.astype(self.fa_dtype), value.astype(self.fa_dtype) + query, key, value = query.astype(self.fa_dtype), key.astype( + self.fa_dtype), value.astype(self.fa_dtype) if mask is not None: mask = mask.astype(mstype.uint8) scores = ops.flash_attention_score(query, key, value, input_layout='BNSD', head_num=self.num_heads, @@ -183,18 +188,22 @@ class MultiHeadAttention(Attention): in_channels (int): The input channels. num_heads (int): The number of attention heads. enable_flash_attn (bool): Whether use flash attention. FlashAttention only supports Ascend backend. - FlashAttention proposed in `FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness `_. + FlashAttention proposed in + `FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness + `_. Default: ``False``. fa_dtype (mindspore.dtype): FlashAttention compute dtype. Choose from `mstype.bfloat16`, `mstype.float16`. Default: ``mstype.bfloat16``, indicates ``mindspore.bfloat16``. - drop_mode (str): Dropout method, ``dropout`` or ``droppath``. Default: ``dropout``. + drop_mode (str): Dropout method, ``dropout`` or ``droppath``. + Default: ``dropout``. dropout_rate (float): The drop rate of dropout layer, greater than 0 and less equal than 1. Default: ``0.0``. compute_dtype (mindspore.dtype): Compute dtype. Default: ``mstype.float32``, indicates ``mindspore.float32``. Inputs: - **x** (Tensor) - Tensor with shape :math:`(batch\_size, sequence\_len, in\_channels)`. - - **attn_mask** (Tensor, optional) - Tensor with shape :math:`(sequence\_len, sequence\_len)` or - or :math:`(batch\_size, 1, sequence\_len, sequence\_len)`. Default: ``None``. + - **attn_mask (Tensor, optional) - Tensor with shape :math:`(sequence\_len, sequence\_len)` or + :math:`(batch\_size, 1, sequence\_len, sequence\_len)`. + Default: ``None``. - **key_padding_mask** (Tensor, optional) - Tensor with shape :math:`(batch\_size, sequence\_len)`. Default: ``None``. @@ -232,7 +241,8 @@ class MultiHeadAttention(Attention): self.proj = nn.Dense(in_channels, in_channels).to_float(compute_dtype) if enable_flash_attn: print('use flash attention') - self.attn = FlashAttn(num_heads=num_heads, scale=scale, fa_dtype=fa_dtype) + self.attn = FlashAttn(num_heads=num_heads, + scale=scale, fa_dtype=fa_dtype) else: self.attn = ScaledDot(scale=scale) if drop_mode == "dropout": @@ -254,10 +264,13 @@ class MultiHeadAttention(Attention): class FeedForward(nn.Cell): """FeedForward""" + def __init__(self, in_channels, dropout_rate=0.0, compute_dtype=mstype.float16): super().__init__() - self.fc1 = nn.Dense(in_channels, in_channels * 4).to_float(compute_dtype) - self.fc2 = nn.Dense(in_channels * 4, in_channels).to_float(compute_dtype) + self.fc1 = nn.Dense(in_channels, in_channels + * 4).to_float(compute_dtype) + self.fc2 = nn.Dense( + in_channels * 4, in_channels).to_float(compute_dtype) self.act_fn = nn.GELU() self.dropout = nn.Dropout(p=dropout_rate) @@ -278,7 +291,9 @@ class TransformerBlock(nn.Cell): in_channels (int): The input channels. num_heads (int): The number of attention heads. enable_flash_attn (bool): Whether use flash attention. FlashAttention only supports Ascend backend. - FlashAttention proposed in `FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness `_. + FlashAttention proposed in + `FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness + `_. Default: ``False``. fa_dtype (mindspore.dtype): FlashAttention compute dtype. Choose from `mstype.bfloat16`, `mstype.float16`. Default: ``mstype.bfloat16``, indicates ``mindspore.bfloat16``. diff --git a/mindscience/models/transformer/vit.py b/mindscience/models/transformer/vit.py index 9923a668c..ac7250b2d 100644 --- a/mindscience/models/transformer/vit.py +++ b/mindscience/models/transformer/vit.py @@ -13,7 +13,7 @@ # limitations under the License. # ============================================================================ """ -The ViT model +The VisionTransformer model """ from mindspore import ops, Parameter, Tensor, nn @@ -62,9 +62,9 @@ class PatchEmbedding(nn.Cell): return x -class VitEncoder(nn.Cell): +class VisionTransformerEncoder(nn.Cell): r""" - ViT Encoder module with multi-layer stacked of `MultiHeadAttention`, + VisionTransformer Encoder module with multi-layer stacked of `MultiHeadAttention`, including multihead self attention and feedforward layer. Args: @@ -76,7 +76,7 @@ class VitEncoder(nn.Cell): num_heads (int): The encoder heads' number of encoder layer. Default: ``16``. dropout_rate (float): The rate of dropout layer. Default: ``0.0``. compute_dtype (dtype): The data type for encoder, encoding_embedding, encoder and dense layer. - Default: ``mstype.float16``. + Default: ``mstype.float16``. Inputs: - **input** (Tensor) - Tensor of shape :math:`(batch\_size, feature\_size, image\_height, image\_width)`. @@ -90,11 +90,11 @@ class VitEncoder(nn.Cell): Examples: >>> from mindspore import ops - >>> from mindflow.cell.vit import VitEncoder + >>> from mindflow.cell.vision_transformer import VisionTransformerEncoder >>> input_tensor = ops.rand(32, 3, 192, 384) >>> print(input_tensor.shape) (32, 3, 192, 384) - >>>encoder = VitEncoder(grid_size=(192 // 16, 384 // 16), + >>>encoder = VisionTransformerEncoder(grid_size=(192 // 16, 384 // 16), >>> in_channels=3, >>> patch_size=16, >>> depths=6, @@ -150,9 +150,9 @@ class VitEncoder(nn.Cell): return x -class VitDecoder(nn.Cell): +class VisionTransformerDecoder(nn.Cell): r""" - ViT Decoder module with multi-layer stacked of `MultiHeadAttention`, + VisionTransformer Decoder module with multi-layer stacked of `MultiHeadAttention`, including multihead self attention and feedforward layer. Args: @@ -162,7 +162,7 @@ class VitDecoder(nn.Cell): num_heads (int): The decoder heads' number of decoder layer. dropout_rate (float): The rate of dropout layer. Default: ``0.0``. compute_dtype (dtype): The data type for encoder, decoding_embedding, decoder and dense layer. - Default: ``mstype.float16``. + Default: ``mstype.float16``. Inputs: - **input** (Tensor) - Tensor of shape :math:`(batch\_size, patchify\_size, embed\_dim)`. @@ -176,17 +176,17 @@ class VitDecoder(nn.Cell): Examples: >>> from mindspore import ops - >>> from mindflow.cell.vit import VitDecoder + >>> from mindflow.cell.vision_transformer import VisionTransformerDecoder >>> input_tensor = ops.rand(32, 288, 512) >>> print(input_tensor.shape) (32, 288, 768) - >>> decoder = VitDecoder(grid_size=grid_size, + >>> decoder = VisionTransformerDecoder(grid_size=grid_size, >>> depths=6, >>> hidden_channels=512, >>> num_heads=16, >>> dropout_rate=0.0, >>> compute_dtype=mstype.float16) - >>> output_tensor = VitDecoder(input_tensor) + >>> output_tensor = VisionTransformerDecoder(input_tensor) >>> print("output_tensor:",output_tensor.shape) (32, 288, 512) """ @@ -229,9 +229,10 @@ class VitDecoder(nn.Cell): return x -class ViT(nn.Cell): +class VisionTransformer(nn.Cell): r""" - This module based on ViT backbone which including encoder, decoding_embedding, decoder and dense layer. + This module based on VisionTransformer backbone which including encoder, decoding_embedding, + decoder and dense layer. Args: image_size (tuple[int]): The image size of input. Default: ``(192, 384)``. @@ -246,7 +247,7 @@ class ViT(nn.Cell): decoder_num_heads (int): The decoder heads' number of decoder layer. Default: ``16``. dropout_rate (float): The rate of dropout layer. Default: ``0.0``. compute_dtype (dtype): The data type for encoder, decoding_embedding, decoder and dense layer. - Default: ``mstype.float16``. + Default: ``mstype.float16``. Inputs: - **input** (Tensor) - Tensor of shape :math:`(batch\_size, feature\_size, image\_height, image\_width)`. @@ -260,11 +261,11 @@ class ViT(nn.Cell): Examples: >>> from mindspore import ops - >>> from mindflow.cell import ViT + >>> from mindflow.cell import VisionTransformer >>> input_tensor = ops.rand(32, 3, 192, 384) >>> print(input_tensor.shape) (32, 3, 192, 384) - >>> model = ViT(in_channels=3, + >>> model = VisionTransformer(in_channels=3, >>> out_channels=3, >>> encoder_depths=6, >>> encoder_embed_dim=768, @@ -310,7 +311,7 @@ class ViT(nn.Cell): self.transpose = ops.Transpose() - self.encoder = VitEncoder( + self.encoder = VisionTransformerEncoder( in_channels=in_channels, hidden_channels=encoder_embed_dim, patch_size=patch_size, @@ -328,7 +329,7 @@ class ViT(nn.Cell): weight_init="XavierUniform", ).to_float(compute_dtype) - self.decoder = VitDecoder( + self.decoder = VisionTransformerDecoder( hidden_channels=decoder_embed_dim, grid_size=grid_size, depths=decoder_depths, diff --git a/mindscience/solvers/cfd/space_solver/riemann_computer/rusanov_net.py b/mindscience/solvers/cfd/space_solver/riemann_computer/rusanov_net.py index d3a99a1a9..354b9fe2e 100644 --- a/mindscience/solvers/cfd/space_solver/riemann_computer/rusanov_net.py +++ b/mindscience/solvers/cfd/space_solver/riemann_computer/rusanov_net.py @@ -23,8 +23,10 @@ from .base import RiemannComputer @jit_class class RusanovNet(RiemannComputer): r""" - Rusanov Riemann computer with network. The network is inspired by Rusanov_Net from paper "JAX-FLUIDS: A - fully-differentiable high-order computational fluid dynamics solver for compressible two-phase flows" + Rusanov Riemann computer with network. The network is inspired by Rusanov_Net + from paper "JAX-FLUIDS: A fully-differentiable high-order computational + fluid dynamics solver for compressible two-phase flows" + https://arxiv.org/pdf/2203.13760.pdf Args: @@ -69,23 +71,29 @@ class RusanovNet(RiemannComputer): pri_var_left = cal_pri_var(con_var_left, self.material) pri_var_right = cal_pri_var(con_var_right, self.material) - flux_left = cal_flux(con_var_left, pri_var_left, axis) - flux_right = cal_flux(con_var_right, pri_var_right, axis) + flux_left = cal_flux(con_var_left, pri_var_left, + axis) + flux_right = cal_flux(con_var_right, pri_var_right, + axis) sound_speed_left = self.material.sound_speed(pri_var_left) sound_speed_right = self.material.sound_speed(pri_var_right) mean_sound_speed = 0.5 * (sound_speed_left + sound_speed_right) delta_vel = mnp.abs(pri_var_right[axis + 1] - pri_var_left[axis + 1]) - mean_vel = 0.5 * (mnp.abs(pri_var_right[axis + 1]) + mnp.abs(pri_var_left[axis + 1])) + mean_vel = 0.5 * \ + (mnp.abs(pri_var_right[axis + 1]) + + mnp.abs(pri_var_left[axis + 1])) delta_sound_speed = mnp.abs(sound_speed_left - sound_speed_right) - var = mnp.stack([delta_vel, mean_vel, mean_sound_speed, delta_sound_speed], axis=0) + var = mnp.stack([delta_vel, mean_vel, mean_sound_speed, + delta_sound_speed], axis=0) var = self.transpose(var, (3, 1, 2, 0)) net_out = mnp.exp(self.net(var)) net_out = self.transpose(net_out, (3, 1, 2, 0)) - flux = 0.5 * (flux_left + flux_right) - net_out * (con_var_right - con_var_left) + flux = 0.5 * (flux_left + flux_right) - net_out * \ + (con_var_right - con_var_left) return flux diff --git a/mindscience/utils/__init__.py b/mindscience/utils/__init__.py index b12ee36e7..ed45dda22 100644 --- a/mindscience/utils/__init__.py +++ b/mindscience/utils/__init__.py @@ -12,13 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ -"""init""" +"""Utilities Package + +This package contains various utility functions and classes used across the +MindScience toolkit. It includes configuration loading, logging utilities, +time utilities, and parameter checking functions. +""" from .load_config import load_yaml_config from .log_utils import print_log, log_config from .time_utils import log_timer -from .check_func import check_dict_type, check_dict_value, check_param_type, check_param_type_value, check_param_value, check_dict_type_value - -__all__ = ["load_yaml_config", "print_log", "log_config", "log_timer", "check_param_type", "check_param_type_value",\ - "check_param_value", "check_dict_type_value", "check_dict_type", "check_dict_value"] - +from .check_func import (check_dict_type, check_dict_value, check_param_type, + check_param_type_value, check_param_value, + check_dict_type_value) +__all__ = ["load_yaml_config", "print_log", "log_config", "log_timer", + "check_param_type", "check_param_type_value", "check_param_value", + "check_dict_type_value", "check_dict_type", "check_dict_value"] diff --git a/mindscience/utils/check_func.py b/mindscience/utils/check_func.py index d5513016e..9cc5c051a 100644 --- a/mindscience/utils/check_func.py +++ b/mindscience/utils/check_func.py @@ -12,13 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""functions""" +""" +Parameter Checking Functions + + +This module provides utility functions for checking parameters in the MindScience toolkit. +It includes functions for validating parameter types, values, and dictionary structures. +""" +# pylint: disable=C0123 from __future__ import absolute_import from mindspore import context _SPACE = " " -__all__ = ["check_param_type", "check_param_type_value", "check_param_value", "check_dict_type_value", "check_dict_type"] +__all__ = ["check_param_type", "check_param_type_value", + "check_param_value", "check_dict_type_value", "check_dict_type"] def _convert_to_tuple(params): @@ -37,25 +45,32 @@ def check_param_type(param, param_name, data_type=None, exclude_type=None): exclude_type = _convert_to_tuple(exclude_type) if data_type and not isinstance(param, data_type): - raise TypeError("The type of {} should be instance of {}, but got {} with type {}".format( - param_name, data_type, param, type(param))) + raise TypeError( + "The type of {} should be instance of {}, but got {} " + "with type {}".format(param_name, data_type, param, type(param)) + ) if exclude_type and type(param) in exclude_type: - raise TypeError("The type of {} should not be instance of {}, but got {} with type {}".format( - param_name, exclude_type, param, type(param))) - return None + raise TypeError( + "The type of {} should not be instance of {}, but got {} " + "with type {}".format(param_name, exclude_type, param, type(param)) + ) def check_param_value(param, param_name, valid_value): """check parameter's value""" valid_value = _convert_to_tuple(valid_value) if param not in valid_value: - raise ValueError("The value of {} should be in {}, but got {}".format( - param_name, valid_value, param)) + raise ValueError( + "The value of {} should be in {}, but got {}".format( + param_name, valid_value, param + ) + ) def check_param_type_value(param, param_name, valid_value, data_type=None, exclude_type=None): """check both data type and value""" - check_param_type(param, param_name, data_type=data_type, exclude_type=exclude_type) + check_param_type(param, param_name, data_type=data_type, + exclude_type=exclude_type) check_param_value(param, param_name, valid_value) @@ -65,12 +80,16 @@ def check_dict_type(param_dict, param_name, key_type=None, value_type=None): for key in param_dict.keys(): if key_type: - check_param_type(key, _SPACE.join(("key of", param_name)), data_type=key_type) + check_param_type( + key, _SPACE.join(("key of", param_name)), + data_type=key_type + ) if value_type: values = _convert_to_tuple(param_dict[key]) for value in values: - check_param_type(value, _SPACE.join(("value of", param_name)), data_type=value_type) - return None + check_param_type( + value, _SPACE.join(("value of", param_name)), data_type=value_type + ) def check_dict_value(param_dict, param_name, key_value=None, value_value=None): @@ -79,55 +98,84 @@ def check_dict_value(param_dict, param_name, key_value=None, value_value=None): for key in param_dict.keys(): if key_value: - check_param_value(key, _SPACE.join(("key of", param_name)), key_value) + check_param_value( + key, _SPACE.join(("key of", param_name)), + key_value + ) if value_value: values = _convert_to_tuple(param_dict[key]) for value in values: - check_param_value(value, _SPACE.join(("value of", param_name)), value_value) - return None + check_param_value( + value, _SPACE.join(("value of", param_name)), value_value + ) def check_dict_type_value(param_dict, param_name, key_type=None, value_type=None, key_value=None, value_value=None): """check values for key and value of specified dict""" - check_dict_type(param_dict, param_name, key_type=key_type, value_type=value_type) - check_dict_value(param_dict, param_name, key_value=key_value, value_value=value_value) - return None + check_dict_type(param_dict, param_name, + key_type=key_type, value_type=value_type) + check_dict_value(param_dict, param_name, + key_value=key_value, value_value=value_value) def check_mode(api_name): """check running mode""" if context.get_context("mode") == context.PYNATIVE_MODE: - raise RuntimeError("{} is only supported GRAPH_MODE now but got PYNATIVE_MODE".format(api_name)) + raise RuntimeError( + "{} is only supported GRAPH_MODE now but got PYNATIVE_MODE".format(api_name)) def check_param_no_greater(param, param_name, compared_value): """ Check whether the param less than the given compared_value""" if param > compared_value: - raise ValueError("The value of {} should be no greater than {}, but got {}".format( - param_name, compared_value, param)) + raise ValueError( + "The value of {} should be no greater than {}, but got {}".format( + param_name, compared_value, param + ) + ) def check_param_odd(param, param_name): """ Check whether the param is an odd number""" if param % 2 == 0: - raise ValueError("The value of {} should be an odd number, but got {}".format( - param_name, param)) + raise ValueError( + "The value of {} should be an odd number, but got {}".format( + param_name, param + ) + ) def check_param_even(param, param_name): """ Check whether the param is an even number""" for value in param: if value % 2 != 0: - raise ValueError("The value of {} should be an even number, but got {}".format( - param_name, param)) + raise ValueError( + "The value of {} should be an even number, but got {}".format( + param_name, param + ) + ) -def check_lr_param_type_value(param, param_name, param_type, thresh_hold=0, restrict=False, exclude=None): +def check_lr_param_type_value(param, param_name, param_type, thresh_hold=0, + restrict=False, exclude=None): + """Check the type and value of the learning rate parameter.""" if (exclude and isinstance(param, exclude)) or not isinstance(param, param_type): - raise TypeError("the type of {} should be {}, but got {}".format(param_name, param_type, type(param))) + raise TypeError( + "the type of {} should be {}, but got {}".format( + param_name, param_type, type(param) + ) + ) if restrict: if param <= thresh_hold: - raise ValueError("the value of {} should be > {}, but got: {}".format(param_name, thresh_hold, param)) + raise ValueError( + "the value of {} should be > {}, but got: {}".format( + param_name, thresh_hold, param + ) + ) else: if param < thresh_hold: - raise ValueError("the value of {} should be >= {}, but got: {}".format(param_name, thresh_hold, param)) + raise ValueError( + "the value of {} should be >= {}, but got: {}".format( + param_name, thresh_hold, param + ) + ) diff --git a/mindscience/utils/log_utils.py b/mindscience/utils/log_utils.py index a284a40ae..9f9b96560 100644 --- a/mindscience/utils/log_utils.py +++ b/mindscience/utils/log_utils.py @@ -1,4 +1,9 @@ -"""log utils""" +"""Logging Utilities + +This module provides utility functions for logging in the MindScience toolkit. +It includes functions for configuring logging and printing messages to both +standard output and log files. +""" import logging import os @@ -13,11 +18,12 @@ def log_config(log_dir='./logs', model_name="model", permission=0o644): if not os.path.exists(log_dir): os.mkdir(log_dir) log_path = os.path.join(log_dir, f"{model_name}.log") - logging.basicConfig(level=logging.INFO, - format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', - datefmt='%a, %d %b %Y %H:%M:%S', - filename=log_path, - filemode='w') + logging.basicConfig( + level=logging.INFO, + format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', + datefmt='%a, %d %b %Y %H:%M:%S', + filename=log_path, + filemode='w') os.chmod(log_path, permission) @@ -27,8 +33,8 @@ def print_log(*msg, level=logging.INFO, enable_log=True): Args: *msg (any): Message(s) to print and log. level (int): Log level. Default: logging.INFO. - enable_log (bool): Whether to log the message. In some cases, like before logging configuration, this flag would - be set as False. Default: ``True``. + enable_log (bool): Whether to log the message. In some cases, like before logging + configuration, this flag would be set as False. Default: ``True``. """ def log_help_func(*messages): diff --git a/mindscience/utils/time_utils.py b/mindscience/utils/time_utils.py index c119baf3e..5704b58cb 100644 --- a/mindscience/utils/time_utils.py +++ b/mindscience/utils/time_utils.py @@ -1,4 +1,8 @@ -"""time utils""" +"""Time Utilities + +This module provides utility functions for time-related operations in the MindScience toolkit. +It includes a decorator for measuring execution time of functions. +""" import time from .log_utils import print_log diff --git a/models.md b/models.md index 5da891b29..68914d997 100644 --- a/models.md +++ b/models.md @@ -62,7 +62,7 @@ | 计算流体 | [CAE-LSTM](https://doi.org/10.13700/j.bh.1001-5965.2022.0085) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/cae_lstm/README_CN.md#) | ✅ | ✅ | | 计算流体 | [eHDNN](https://doi.org/10.1016/j.ast.2022.107636) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/transonic_buffet_ehdnn/README_CN.md#) | ✅ | ✅ | | 计算流体 | [HDNN](https://doi.org/10.1016/j.ast.2022.107636) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/move_boundary_hdnn/README_CN.md#) | ✅ | ✅ | -| 计算流体 | [ViT](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/2D_steady_CN.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/README_CN.md#) | ✅ | ✅ | +| 计算流体 | [VisionTransformer](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/2D_steady_CN.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/README_CN.md#) | ✅ | ✅ | | 计算流体 | [PeRCNN](https://www.nature.com/articles/s42256-023-00685-7) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_mechanism_fusion/percnn/README_CN.md#) | ✅ | ✅ | | 计算流体 | [Burgers1D](https://www.sciencedirect.com/science/article/abs/pii/S0021999118307125) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/burgers/README_CN.md#) | ✅ | ✅ | | 计算流体 | [Cylinder Flow](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/navier_stokes/cylinder_flow_forward/navier_stokes2D_CN.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/navier_stokes/cylinder_flow_forward/README_CN.md#) | ✅ | ✅ | diff --git a/models_en.md b/models_en.md index 4842f9dee..fbe8c9c7c 100644 --- a/models_en.md +++ b/models_en.md @@ -62,7 +62,7 @@ | Computational Fluid Dynamics | [CAE-LSTM](https://doi.org/10.13700/j.bh.1001-5965.2022.0085) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/cae_lstm/README.md#) | ✅ | ✅ | | Computational Fluid Dynamics | [eHDNN](https://doi.org/10.1016/j.ast.2022.107636) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/transonic_buffet_ehdnn/README.md#) | ✅ | ✅ | | Computational Fluid Dynamics | [HDNN](https://doi.org/10.1016/j.ast.2022.107636) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/research/move_boundary_hdnn/README.md#) | ✅ | ✅ | -| Computational Fluid Dynamics | [ViT](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/2D_steady.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/README.MD#) | ✅ | ✅ | +| Computational Fluid Dynamics | [VisionTransformer](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/2D_steady.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_driven/airfoil/2D_steady/README.MD#) | ✅ | ✅ | | Computational Fluid Dynamics | [PeRCNN](https://www.nature.com/articles/s42256-023-00685-7) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/data_mechanism_fusion/percnn/README.md#) | ✅ | ✅ | | Computational Fluid Dynamics | [Burgers1D](https://www.sciencedirect.com/science/article/abs/pii/S0021999118307125) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/burgers/README.md#) | ✅ | ✅ | | Computational Fluid Dynamics | [Cylinder Flow](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/navier_stokes/cylinder_flow_forward/navier_stokes2D.ipynb) | [Link](https://gitee.com/mindspore/mindscience/blob/master/MindFlow/applications/physics_driven/navier_stokes/cylinder_flow_forward/README.md#) | ✅ | ✅ | diff --git a/tests/models/diffusion/ae.py b/tests/diffuser/ae.py similarity index 100% rename from tests/models/diffusion/ae.py rename to tests/diffuser/ae.py diff --git a/tests/models/diffusion/dataset.py b/tests/diffuser/dataset.py similarity index 100% rename from tests/models/diffusion/dataset.py rename to tests/diffuser/dataset.py diff --git a/tests/models/diffusion/ddim_gt.py b/tests/diffuser/ddim_gt.py similarity index 100% rename from tests/models/diffusion/ddim_gt.py rename to tests/diffuser/ddim_gt.py diff --git a/tests/models/diffusion/ddpm_gt.py b/tests/diffuser/ddpm_gt.py similarity index 100% rename from tests/models/diffusion/ddpm_gt.py rename to tests/diffuser/ddpm_gt.py diff --git a/tests/models/diffusion/test_diffusion.py b/tests/diffuser/test_diffusion.py similarity index 99% rename from tests/models/diffusion/test_diffusion.py rename to tests/diffuser/test_diffusion.py index 864131718..e413c9107 100644 --- a/tests/models/diffusion/test_diffusion.py +++ b/tests/diffuser/test_diffusion.py @@ -22,11 +22,11 @@ import numpy as np from mindspore import Tensor, ops, context from mindspore import dtype as mstype -from mindscience.models import DiffusionScheduler, DDPMPipeline, DDIMPipeline, DDPMScheduler, DDIMScheduler, \ +from mindscience.diffuser import DiffusionScheduler, DDPMPipeline, DDIMPipeline, DDPMScheduler, DDIMScheduler, \ DiffusionTransformer, ConditionDiffusionTransformer PROJECT_ROOT = os.path.abspath(os.path.join( - os.path.dirname(__file__), "../../")) + os.path.dirname(__file__), "../")) sys.path.append(PROJECT_ROOT) from tools import FP32_RTOL, FP32_ATOL diff --git a/tests/models/diffusion/test_diffusion_train.py b/tests/diffuser/test_diffusion_train.py similarity index 98% rename from tests/models/diffusion/test_diffusion_train.py rename to tests/diffuser/test_diffusion_train.py index 47567bd48..a235a862e 100644 --- a/tests/models/diffusion/test_diffusion_train.py +++ b/tests/diffuser/test_diffusion_train.py @@ -20,7 +20,7 @@ import numpy as np from mindspore import Tensor, ops, amp, nn, jit from mindspore import dtype as mstype -from mindscience.models import DiffusionTransformer, DiffusionTrainer, DDPMScheduler, DDIMScheduler, DDPMPipeline, \ +from mindscience.diffuser import DiffusionTransformer, DiffusionTrainer, DDPMScheduler, DDIMScheduler, DDPMPipeline, \ DDIMPipeline, ConditionDiffusionTransformer from dataset import get_latent_dataset from ae import LATENT_DIM, generate_image diff --git a/tests/models/diffusion/utils.py b/tests/diffuser/utils.py similarity index 100% rename from tests/models/diffusion/utils.py rename to tests/diffuser/utils.py diff --git a/tests/models/transformer/attention_block.ckpt b/tests/models/transformer/attention_block.ckpt deleted file mode 100644 index b8726dcaf271d1f9de31e215f595997fb36595a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200421 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
50b>n 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 diff --git a/tests/models/transformer/attention_block_output.npy b/tests/models/transformer/attention_block_output.npy deleted file mode 100644 index b4507ee642080df94ad38323fcfc40f3ed5fbc41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 zcmbW3`(Kpxw#UiT*xo`zLPaA(ZVtoDGvDWXUEgP>wz@q^>TZ*%n-mZ|XlR6_ZbT1i za?E2!N=9i)sKlMQJTvnE1BX}Mc$pVcLNheBsac{anj6iR9rnL))^DHn(^{|Bdwo7@ z*R0oHoiqQbpw&U^VltMjTAUNZBV%Bx5@U*tS^9QPZcf_DMQ`V1EcthTT3XhsCH?(X znQ7Te`gN>ginOYxNQ~l4k?SM>KQ&~n=?CL~d1^u`zF-U!U5T-t5=%BaVXlGww8h^m zu0yDGD(O`W+eEaZA&;)(vjoPD35f23EV0$IpmC-xO1=PJsK^1zm5$@fF zPI`0Tnw;h}RYY4pGS=39z$Vyk>#31@v{U#YKH^zPpOD#nJZaN{;-cJpMdYF1M3q`l z9;^;#$Mxr>)Af_*8&U>g%59=C;r2m-{~8UFo8>#Cg}h0BW+Q2YZwnMemqHI~hi)T9 zRiFTmV!<%c=%hey$Wf3(I(TS&2F*kzc!njn;XHC^5prz84)zKZ;!WnAHV#SteKed7 zHU2`M2?!d3N~r^9LX;)Ky@3@%n`MSFhhOB2$a1|dzLZ|%Pil_Io5aQI)$h@pS`nV* zT}GQwL1PD=1ZB{v|BZj^JyO?&Ggy$E4zcc_gnca1?SS`qnRzt9_Fy^RU*%3CuR#Fa zV%4(8NZ~!g8Ea!YnZ)-ZllFi#L#nUaSxkdi2ux(lp`?BQ!TwUwNj3>bbfkMV{hIEl zbIg;muYuqR^u9gCtFs55fRgWg!@f5V&oJ%cZZw9jRdSSn>Mu~Y*Ux|BQ}KPZo#pw? zIm1P<8m9cp%Gm>N3cIJpXg|SUjWt>jJ<3882eQwsn`oEmrfB4AP>2}n`JLrEV}!HP z18wY|4Iv4$c^3SPF7WQycJe#Uwg)RkMv>aVOyV_>?9s(~y1IYkHxeRj1;f5W196&h zoc*q@fl;zV9bDNbRM9Kyeb2U;O%y&DfNqc%`&q9O%UL>*33->5(olMZ*2)<5ChlyU#v^dJmo{ zBLmKmZayzA!y0gf+FBzc%Usr-o-!UlS0Gk|(0c^cT=o1XJ58S_0=D8P{kB$&rYSK^ z-?Iogo3zvR@~yr~ONeZNF=C5tg)pNFiP_2ssj-=c{yvup0{d2YD(u|blePh^USvgR^NmDyT^^Z5Px z6myZw#E-&AkAs^VN3(JKIC)q9SYMA;X0%rqr%d9sVrUtA=nKXU+mHOMKqR}($2jBYx(1iL?XMRzjU;?l>&2z9!RkkW zFkG(8Wn&-@en9^vW{YKkHE_t##85WM4(yVvLn!i~}g2F`;`vlNBLs6w}ijUXYv3+1ZtF#nBf^_&c`zC*6uJZ)2kP*3nIfO2 zb-0tx5Od)h@euXGzxXB^D=yNNuv+;*zlgtL8){PIVH}V_UsP*|q(Dm5+v+NQ32lcv zXtBJHK9df<7C$kteTF+3pP{`p(C<0#&?)s8t&x|sw;|lsM>FUayxsCt)c_Xc?W}EM z(>6_>zCJcuhOO z`ph?7bF~=xIUd13g(UOi%F}$V>xKova?%1sEb~q;t7WUW!@iL|OAa=#5_|OkTg(Z* z5XU8DH)t7e#VcfzX$c&nhFGJUDq1Whav#b5qFA)Yl&KbLn{7tZRd$PxAjfE~c9fb) zB0XmHP&2ite;0Sz?#TiBa(Sq(Al3?D{n=)RA01(8B(Jd`{ZsOeFWsIjSD*})sYBU0 zm{+k?c;#}QgIB;1wb#>Y%dQ#+Pgt}_F-|axC>6(OpLjzF3WN%*niC4;D(G%{7uFeV z-cf|3f=Q*d(c~q%6W)Y0TZdi;AbXq_kw6#70b*GqYtQQ`R)q|l%A8#tf0 z){i7FlQ0;lo+jt`P5MB9>k9i`?D1_BU(n6smi$>dpwnI&wa!;7KY$(dlzv|uq2$Ri zd=ZPS`yVmD6Q|u}iy_>+0IsToX^B|U|GV6h-wIp90X7nC@rK0y20>vuKWST{rbDZL z2>;Idq8`J~%5+*_4W;0-$tT8H-o+O?F6x&dMBAXAbYIYJqYiBkyUR<+&{tBcZs8%? zTwW{N5?_b+DdWlVvQmX6>aQA2;vfEXFvpbcDfJ$vCS?F^p+ScpX;qNQI@o#l6dJ{@ zn+KsF=Nlx}VW}%%V|~MMDddYmGRYH998Gf}5SZ_mbfZ4Oq#L*76n=xbw29(dHH&^O zYvCoHDbjc+4);ZfYYmw&vp+XExnlXUrho3T_R6g=2)-tZ8{2Kse7gM2awjphdV)B} zMky+w#%f5?EBPJv2agJ5AxuM{!+Ki`*It5MBE>QT26zKf1f~S0(_)lmOOl77L>_0G zq4mp5x<~HkU*KNH$Ii@#0N2GnktcS`VE=vfO%=g)+^+1F$Lv?>voypyft&2ZaZ$Ci z;juG{UnGTE80nxxp-#TeXX=;vI$!CbgDf5WMeiejz!IWx1gR*=+Ff;pZLxCODIV-N zDTO?Yo`rdERyqz%uPt*Hdw0skbSjI5@9f#tvDFQ}9k81Jp)Qrl5Z+ix7xpLZHFt!} zj(6;Rk8CvNKqGnxg^B4}q586KpBkDtNlBqSbg$)m@rXY`A2$5KqHu9j2c1Q>;j2wv zUQWM;QH_0Mg6M@K}#FPrPh@M3d>js+s&Px|9!hRL~s#gt}L2g97`m>ROTugZUG2 z8gdg)_WSS#`v_UW*3$sG$g#B2f|mwbef?ZabuN_Gt)=*~$mPlOIS5Mhv-jyrR$=>0 z%*X97w$@%#-&ObVXgPpsbdK!>IkI^hchno|Jo{6;MT9aFFURxQMJ9{#-Lxdz!aS{t2hST4e=v0;ijx7_DX%t{+K71IF$0k=mg@!)C!-yb{gQD*SgK z*^7S%yCRFXiDCSKzn6|RCDl5eF1=jMAqL;z`Vb$L zi`Z^*OWkZd2V?umsi1lGGqj&)nCO2*Tdl+T^XU!P%Kz2>8C*$xD5{i55zo6TzvSz+ z@}}%bor;xz44a|MvXuw9T2WEuYW~P^mOd{Ou!?OgTI)-A)tZNT)v>Of-dm*8@_&a| BEU5qh diff --git a/tests/models/transformer/grads.npz b/tests/models/transformer/grads.npz deleted file mode 100644 index 7426de8db2435ef77de457c6af1e74b434726562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67558 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 zre�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
    4Xonnxcp6O_c)1)&+(#$%|TTBRyqv{j-Xuw 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 diff --git a/tests/models/transformer/label.npy b/tests/models/transformer/label.npy deleted file mode 100644 index 2e11f8d6d8fb76fb07e8f9e22e02808d2b1a43bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15488 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 G_5T3jZ+xl% diff --git a/tests/models/transformer/mask.npy b/tests/models/transformer/mask.npy deleted file mode 100644 index 2458fe287ad7847e4bc0ca4d1faa4f5bb0f15c28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14528 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 +D^CXZCFUhVhf$fW%d0 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 diff --git a/tests/models/transformer/multihead_output.npy b/tests/models/transformer/multihead_output.npy deleted file mode 100644 index 27b6d8a4bbe3d0f0befe95e778211e36b4cc6900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7808 zcmbW6=|7jx+lM7mj~!adLCd^&T?>wUZ@YV(dw=DQ~Go#S&`cB~dJDCb z7TTRS?R@&c@qH&wA3FShbJGJ(XAV!y&o~@7d3a*4wp2@L$ucda<$CH`N|%)WKWj=X z+(ogwyWsrxI9QhdfmD7h$K19} zt$))+euj7`cM(Z1n-7{bazKVp;GCBM#9FeHK92VS`BxvXO@BW2nt9>HN#8+qhA5ZK zg%CwUN$lJZLY1=8z@W4c2mEu4^4iM@Br(Dqy-6wkSV24lZ*!KrsNw5Je5K8y%@}Vw;uE641%TlOElWtL#jr0&}93Mg>C@{p~3_4)#>T5UB&~_ zE?Q%3tP=ZBr;LuO>?I3D=V19N8{*^7hq`%j80ujG$urB))i(v37S%zO0uP(d^`LLp zAIhiy7iS(@3niz#kg0QrUG=*;ukrh+QKv+l<}QI)O;HSY;ivv~rWpBVDwjEB295c4 z9)2#oj{c3O!SP->eBCDs8SAETgK5HGbmKdW6VRp~l zAzU#vfyiCk!0cZbMdachzzb2-)wA%p%?xh!?F63L?*Q(3{kQ1>H>8!F>D!6T@XBFb8o{KEacRzy`w2KO3DV2Sz^=zm&;I!TT^ z?xqop*|=d)f+oA!YvPVp1rW(~yD|9EJQ(>n%6ohy9aC-vkiFW``1@Z74yJyELs9SW z(Ung0QuC&f1r*)Q;z7&R8b7HVfrEmCi)ng*%|^#~I&tYR`gT5ZWxfJh9TLE=5<=Ye zgz4lmctE$!eKff~7s762!>f~8Q0Dsu-HoG3s_kTUq(KkgL`}jB2T7*0;x|dYWXUjx z4A|TxLWBpd(HE)&V+WbG$7IkQD@JHq8B1G0`F?}f)1f|L%oU-gF{XWwWBfZCA zPsxAyDY}3#RTt@Ks{yH%_JIR>6$1ltYkN_8C8x)+=k+L7;F6xJ49XKq*EX&#<{|o2Pe5Z z<4Krv$%+>+M-e{dD&yX+2+D7>3|(*cV0iw!LIvw!2%Hgy3YK~xopu3aY$bvBW(4mR zx|4{UHV`?ijCNAmxa6S~k&q_v(D(`&3O8bpR)|2!;|Q9~s^Zt<<3#Ao7P8V!2wt;l zC@3yQ@>`@Z!_E>szfzQ{KY(XaJ@EKFMOI>!5cjzF4oPn^qT$YL&MFnZju zzCU@}JRW1e$3N1T^cD@zd_>z1FlM|_(DVhwl})s*jo#**LLB0 zyAI;C{bsZ%%NgWm>(WIQadf$fh}6`YX_E5;h^^2bq>Po=c*<0mJ~oTovRwC3`bX1d}`izv7^R*Nv$j|n^5A@XB3 z7KHxBJ$vq8u4Ey6l6MvZ?k0;4R z8l;fkq8vDIya6SjFfe1k2MBaqkTjoWZ1NLHFITjH8QX+6h55J^6>apAuf)H42GF?50c)y~A;Zg! z+xX-f8olAsPtF|STWf+tla^7flk4!xn-=so7l!(&Yhd5!My#l|fi<F8x9y?2eLs*TTsVCqnk98?qMG{ABs+TeRncGp2N$CEquslH(gz zgFt&Ej(Uz6X>RhSjLAP|kjhDy;(C&zEo{Fdulf{c05`&-k zhY`@yVfUopB;|6)sg3JN)TRnxEh_-6Cl*43b`+Xv2$Rm$w!HqHF!1yrz>GvA+lrFN{`FL%YyM9O<|MRfgX9r928s zw>faDARD_&oOuna1)(}(0~+-`r0blGaoyqxex%x%quu8rG5rBb4f}vyKpc3F_mY!F zeB49LDq_4$hCRB$9i^|v(nOtT;;V3$G)HYD?T^*jB5@TMs1QJhNA5VXT?^(Yz9XA6 zw*lv+i86`%=~(ugLK&sYkUg~ui@J?**|VG2pZ^VByR{;@JVFxoBr*c`uQ4@o=b_T! zH)egwA^U@Z;LT!X6e6muNvjmb{xal!yzhj3sx^gL`ySEkcXx5~wudm{_jBT`zu=qX zVPGWQV%6H;sC54lR`H7P;EyoK5b(#gk{HO{eVIEM%)_gXHK^0fYVuiNJ67H{p?&IU zv^en(wm(_HILG)vlFmcSQ`ZC8hAMa;upFen4xzQ$6lkuU!yai5#>>fyxIk+Lk9nX9 zdcm2bcCRKY#|kim>l&%^&P`Z);R!JbGJ&?;r=Uk>30|Dv%xpR|hrWMj4G9L5xzP?5 zN7gMzr~Q8*)cq?SbeRJqIfThrw4T&_w}SN_8}Y*10@A3T0>Q&91}H3GQ&op4?~o@? zveFOz6AXBuD_A9UKGMH;Q!c(<~m@tCYQy!$U5m&R10 z)ANt8!2AZLMfTyzcRn<}d$ zabp?okC@G6SmyHT=cj@(^x>GT8Elz*3%D1VM8>olK}?67lb*pEyFa22OYcz`-v=b= z-dylk>nB6!v{=<3dl*cgj3WoN(Bbd~=yr-GeELSt!&mQN9^7xM>`o$RJ$n%rq7n(uAlArGi)cgc8hQ$ zyX*11Y9Sc7{J<$?v$>SA+f*le9Ib}0f$qvW?3&V5T;bX51V)nEInq`a0!RC+n?P&*7^HqxdY37E~txvJu zS`kS`6i9pxrWHwg>^f0ll;Ms$9W;CVAi9``fSCM0 zv^O@#Ou-gfxoZ^oFa5@a-6Ax(<4xgjsTDBt{5mjBw=gs(l61|Cg|2{G=znW7>vhN) zdE29T4|8-ey*!pEonDE3Q$OLMG6gUlZ^O1}Z7ASa15aYx@mkG1&cCjcwsh3u?$@>; z?3;n{gcd zB@Z*nTU9{ZYX3xjNyU>I#Z>*l6x6xt3dY8tusvKCH*MOEUp@NaN8VJfHtG(~spBAZ zDexf$&H?h?7s3fUT*qFW-S47MQ4}D`iZc&cnE&D;o z?<xE+L7m@I$h2%h35TsR8{C8q0{T-r)MJs$@ zWJ51fwL=)|YlanB@~qJ7c^oR%@jOiaGg>`Wi1gKW!K|OxaF0eJF>t&A(O1e*ZG#DW z>byQm+vL#&qkLGDlT7k@^{}*T6pwZAfrb2JPQc?A>iz8iMz9LUugP&jGDyRn|3jO( zZ^>NqWUTdl246~!ayqFUm~P@q9)HLq9;5rIarxcC3ldUz*Q6H>Jg4KVKc7hMwFp!L zP1u}&6bfV(K%{5`?mz5T7|W=z!s1D&^DGDNH1MHb@By&D*1#)@Q)P7ysX|bM8}6`m z!0E%vH2lz6A|jO!PW*8gn-pJYY1&6`m)pZC>6h3v$r4L%>tdtmSI|5u%=zXBp`^oQ zTBNSdd>smbT<#$b_WJS?8pB~`T@5aMXT_d9VvfxR&r)eIev}E9f_KrvXj5H->m9XV zn#~k0O}GiyzitGfm?m8DLz!!F^Q2#W8d2P1F$C4zN3+{GpnhsUSNr)jdNjS@4Q`wZ z`n@BJQsMz4Gp$`%6D-S}5+9;xURguQ?nE3_xDFd0`@uek8zk_^bF6+#$opApY{t$s zTozxA59M2_>L-8DvNh&?O`6Xtc{&=6x5^>^^s89uJr(#~?I22TpFxJ@L*%(!GxQax zr;*>3;9Xif#xTLSF@Gzz^?idyR>EB6T0Zi?EuOSLxkeP1#sa@g30nT^AsF)jRDVCl zJpHZg0#!>?s1N38x39!$A9IOzl@3PU{DWyOPH;b%k2}~{i4c_vdt8PwYfzEfY}Zbk zch+LdvP`JT&qwt)(cr{g;P~<uo>qnUaP=|J6Xn)#IGAE28pApqupOc4Bt=EwU?K zhjoMdxFD$kKT40${huR1saS`++#Ke3KqP>lQG+H#yNXTY3&4u+953bZbrME^ojMxtwf|^3z#1(K;hGT@ToH# zT!Z7#@94Sy$$ZXqsVTFo`^8}xUEa-k!LJHJ(U?~m)$`WM$>uqD{OGxCRt8Y;~`Cm z`a}l!2QhHs9oCl2g;hF_$VG))XeYCrnHeg^ZZh`ApeeqX_Ry5l>nUKnw24<@ro-A_ zh#>Ou1Ju#=F528ICcF9yiT1Ovu$+B?i37!qYo;7F^hiR-o=#L3bVSi8X>52S%r-rd z;%-mRA?7jeM%#vhN&A}{(AF7^89$ndllOh-{`Ub7pIOg#JD6aRqZK`Ew-tW`@_~D* zG8+2{bF&1d!gqmboVj5QHi%sV!=0UYV6qCQSThwD%}Ph1yrs^e_VrvzdBf_hv?{C` zwRNwPZQ2^}q^ldR{<#3o=PE&Y!F66(SPWYDSkSDqv)N=W7~iYsVCS**%*vApLo3&i z3&zH5PMsMYZrzPXZ`h%%%oO-O8Vp@TY(Hee8Z^0K&F`&rYm*Kt z^hOXTlOUQ9_zkJ~T&P@Ai$a|eo1zvvk@u#@oO=I2mk6loNbN?4gY0c1(ZAoW`qhmGPMq+`(|vR)${ ztP1W;xMUr1Q3;{Fe&)~_JcbF2k7Ca6W6mwQFSstU8n~;}NJn**9FM4jj0Y=z~aCLLkA+=kSb85-M=P3=4 zR?~pjZcgKv$dxbQH`TSR!jzz{=T3k60aET)Ht-X zn#rv@wFallM1%9Z4ouUs1qZEoXb{>)diwLQ%V7&yk*>}fXtv;*#vIg{{+&AQ$b{40 z8;G>{UUuZ-d}1<53%7K7qk)Pkcq;rMI*X5i@gojvq$qR4t&vL1Ism-mgLrLz(8M2+ zGgjKqWXJj@ai(+BiNFUTaD}PlY~o%xu{r}CcCUqVhG#&g)&rZ50;`u4i$|+WQSI$i z^yv9**!$xubvDby(mAaT5pAy zUsIt`CkvtMJatfp2Z6 zqE*~%O#7$E_6&-0@7`6B^0HQP^YVSN!=(mR&Z|X_E0kQG=z=p>Kfwi`kFw5LZn!$q zpV_!L0-wVI*i|itVh4&*+*TiS=gr{mj*D}h2lHX;w{BcJYc|&%5>JzACv*9wiqLc= t8QFiyz>eB+0|&}c@6i{=U(t{R%^sm Date: Wed, 20 Aug 2025 11:29:33 +0800 Subject: [PATCH 2/3] fix --- tests/{ => models}/diffuser/ae.py | 0 tests/{ => models}/diffuser/dataset.py | 0 tests/{ => models}/diffuser/ddim_gt.py | 0 tests/{ => models}/diffuser/ddpm_gt.py | 0 tests/{ => models}/diffuser/test_diffusion.py | 2 +- tests/{ => models}/diffuser/test_diffusion_train.py | 0 tests/{ => models}/diffuser/utils.py | 0 tests/models/transformer/test_attention.py | 12 ++++++------ 8 files changed, 7 insertions(+), 7 deletions(-) rename tests/{ => models}/diffuser/ae.py (100%) rename tests/{ => models}/diffuser/dataset.py (100%) rename tests/{ => models}/diffuser/ddim_gt.py (100%) rename tests/{ => models}/diffuser/ddpm_gt.py (100%) rename tests/{ => models}/diffuser/test_diffusion.py (99%) rename tests/{ => models}/diffuser/test_diffusion_train.py (100%) rename tests/{ => models}/diffuser/utils.py (100%) diff --git a/tests/diffuser/ae.py b/tests/models/diffuser/ae.py similarity index 100% rename from tests/diffuser/ae.py rename to tests/models/diffuser/ae.py diff --git a/tests/diffuser/dataset.py b/tests/models/diffuser/dataset.py similarity index 100% rename from tests/diffuser/dataset.py rename to tests/models/diffuser/dataset.py diff --git a/tests/diffuser/ddim_gt.py b/tests/models/diffuser/ddim_gt.py similarity index 100% rename from tests/diffuser/ddim_gt.py rename to tests/models/diffuser/ddim_gt.py diff --git a/tests/diffuser/ddpm_gt.py b/tests/models/diffuser/ddpm_gt.py similarity index 100% rename from tests/diffuser/ddpm_gt.py rename to tests/models/diffuser/ddpm_gt.py diff --git a/tests/diffuser/test_diffusion.py b/tests/models/diffuser/test_diffusion.py similarity index 99% rename from tests/diffuser/test_diffusion.py rename to tests/models/diffuser/test_diffusion.py index e413c9107..39c50f08c 100644 --- a/tests/diffuser/test_diffusion.py +++ b/tests/models/diffuser/test_diffusion.py @@ -26,7 +26,7 @@ from mindscience.diffuser import DiffusionScheduler, DDPMPipeline, DDIMPipeline, DiffusionTransformer, ConditionDiffusionTransformer PROJECT_ROOT = os.path.abspath(os.path.join( - os.path.dirname(__file__), "../")) + os.path.dirname(__file__), "../../")) sys.path.append(PROJECT_ROOT) from tools import FP32_RTOL, FP32_ATOL diff --git a/tests/diffuser/test_diffusion_train.py b/tests/models/diffuser/test_diffusion_train.py similarity index 100% rename from tests/diffuser/test_diffusion_train.py rename to tests/models/diffuser/test_diffusion_train.py diff --git a/tests/diffuser/utils.py b/tests/models/diffuser/utils.py similarity index 100% rename from tests/diffuser/utils.py rename to tests/models/diffuser/utils.py diff --git a/tests/models/transformer/test_attention.py b/tests/models/transformer/test_attention.py index c2280d2ed..924df2d07 100644 --- a/tests/models/transformer/test_attention.py +++ b/tests/models/transformer/test_attention.py @@ -36,15 +36,15 @@ from tools import ( ) BATCH_SIZE, NUM_HEADS, SEQ_LEN, IN_CHANNELS = 2, 4, 15, 64 -DATA_PATH = '/home/workspace/mindspore_dataset/mindscience' -MHA_CKPT_FILE = os.path.join(DATA_PATH, './multihead.ckpt') -ATB_CKPT_FILE = os.path.join(DATA_PATH, './attention_block.ckpt') -ATB_OUT_FILE = os.path.join(DATA_PATH, './attention_block_output.npy') -MHO_OUT_FILE = os.path.join(DATA_PATH, './multihead_output.npy') +DATA_PATH = '/home/workspace/mindspore_dataset/mindscience/attention' +MHA_CKPT_FILE = os.path.join(DATA_PATH, 'multihead.ckpt') +ATB_CKPT_FILE = os.path.join(DATA_PATH, 'attention_block.ckpt') +ATB_OUT_FILE = os.path.join(DATA_PATH, 'attention_block_output.npy') +MHO_OUT_FILE = os.path.join(DATA_PATH, 'multihead_output.npy') INPUT_FILE = os.path.join(DATA_PATH, 'input.npy') MASK_FILE = os.path.join(DATA_PATH, 'mask.npy') LABEL_FILE = os.path.join(DATA_PATH, 'label.npy') -GRAD_FILE = os.path.join(DATA_PATH, './grads.npz') +GRAD_FILE = os.path.join(DATA_PATH, 'grads.npz') def load_inputs(): -- Gitee From fc5294a387d4d1f65585ce7cfb6a7c715c9b6a01 Mon Sep 17 00:00:00 2001 From: b_rookie Date: Wed, 20 Aug 2025 11:49:55 +0800 Subject: [PATCH 3/3] fix1 --- tests/models/transformer/test_attention.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/models/transformer/test_attention.py b/tests/models/transformer/test_attention.py index 924df2d07..7c3a664a2 100644 --- a/tests/models/transformer/test_attention.py +++ b/tests/models/transformer/test_attention.py @@ -32,7 +32,8 @@ PROJECT_ROOT = os.path.abspath(os.path.join( sys.path.append(PROJECT_ROOT) from tools import ( - compare_output, validate_checkpoint, validate_model_infer, validate_output_dtype + compare_output, validate_checkpoint, validate_model_infer, validate_output_dtype, + FP16_ATOL, FP16_RTOL, FP32_ATOL, FP32_RTOL ) BATCH_SIZE, NUM_HEADS, SEQ_LEN, IN_CHANNELS = 2, 4, 15, 64 -- Gitee