面向工业领域,聚焦计算仿真、预测两大核心场景,构建面向流程工业"机理+数据"双轮驱动的领域计算层,推动AI for Science在材料化学领域的深度应用。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
新增第一批 10个 时序预测模型相关 CANN/Ascend C 算子 Co-authored-by: aliutec<aliutec@163.com> # message auto-generated for no-merge-commit merge: !23 merge feature/cann-ops into master 新增第一批 10个 时序预测模型相关 CANN/Ascend C 算子 Created-by: haikuo Commit-by: aliutec Merged-by: cann-robot Description: 摘要 本 PR 新增一批 10 个面向时序预测模型的 CANN/Ascend C 自定义算子,覆盖 Mamba/SSM、Autoformer、Koopa、TiRex/xLSTM、CfC、coRNN、SRU、UnICORNN 和 LTC 等模型或模型族。 这些算子解决两类问题: 1. 将时间维递归、状态扫描或 lag 聚合从框架侧的 Python 循环和多次小算子调用,改为单个 NPU kernel 内部推进,减少 kernel launch、框架调度和中间 Tensor 物化。 2. 补齐框架当前无法在 NPU 上执行的模型路径。Koopa 使用的 torch.linalg.lstsq 会回落到 CPU,BatchSpdInvFp32 将该关键计算替换为全程驻留 NPU 的实现。 除 Koopa 外,本 PR 的性能基线均为同一 Ascend NPU 上的 PyTorch/torch_npu 框架实现,而不是 CPU。进一步补充的 TorchAir fullgraph=True 测试表明:即使与图编译后的框架路径相比,自定义算子在正式 shape 下仍有 1.39x-7.39x 的稳态运行优势。 ## 背景与价值 时序模型中的 scan、递归单元和 lag aggregation 具有明显的前后依赖:第 t 步需要读取第 t-1 步状态。框架通常会把每一步拆成若干独立 NPU 算子,因此一次序列推理可能产生数百到数万次小算子调度。单次计算量不大时,launch、同步、读写中间 Tensor 的成本会超过有效计算本身。 本 PR 将这些具有明确边界的热子图下沉为 Ascend C kernel,使中间状态保留在 kernel 内部或片上缓冲区中,并在一个 kernel 生命周期内完成时间维推进。该方式不改变模型公式和输出语义,模型接入层只需把目标子图替换为对应 ACLNN 调用。 ## 变更范围 text prediction/ProcessControl/TimeSeriesForecast/ ├── README.md ├── CANN_OPERATOR_LLM_PROMPT_TEMPLATE.md ├── PR_DESCRIPTION_first_batch_cann_ops.md ├── docs/ ├── deliverables/ ├── selective_scan_1d/ ├── s6scan_fused/ ├── autocorr_fused_aggregate/ ├── batch_spd_inv_fp32/ ├── tirex_slstm_cell/ ├── cfc_scan_fused/ ├── cornn_scan_fused/ ├── sru_scan_fused/ ├── unicornn_scan_fused/ └── ltc_scan_fused/ 同时更新: text prediction/ProcessControl/README.md ## 性能对比口径 性能数据按以下三种口径分别报告,不混合计算: 1. **历史 eager NPU 基线**:在 Ascend NPU 上使用 PyTorch/torch_npu 原始算子组合表达同一计算,包含时间循环和多次小算子 launch。该结果反映不开发自定义算子时的直接框架路径。 2. **TorchAir 强基线**:使用 fullgraph=True、dynamic=False 对完整框架子图编译,在 warmup 后比较稳态运行时延。首次图编译时间不计入下表运行时延。 3. **Koopa CPU fallback 基线**:torch.linalg.lstsq 当前不支持 NPU,原路径会回落 CPU。该项衡量的是从 unsupported/fallback 到全程 NPU 可执行的收益,不能与普通 NPU framework baseline 混写。 测试环境:Ascend 910B3、CANN 8.1.RC1、PyTorch 2.5.0、torch_npu 2.5.1。 ## 算子与性能总表 | 算子 | 服务模型/模型族 | 历史 eager torch_npu 对比 | TorchAir 或 fallback 强基线 | 精度与执行范围 | |---|---|---|---|---| | SelectiveScan1D | Mamba / SSM | Mamba block 9.02x;模型 validation loop 10.22x | 原表达直接 fullgraph:27.952/20.077 ms,custom 快 1.39x | prediction max diff 1.431e-06,MSE/MAE diff 0 | | S6ScanFused | S6 / Mamba-style SSM | 组件 136.56x;3 层 encoder 44.15x | 原表达缺少 aten.softplus.default converter;等价基础算子改写后 4.372/0.674 ms,custom 快 6.48x | 3 层 encoder max diff 5.22e-08;图基线 diff 4.47e-08 | | AutoCorrFusedAggregate | Autoformer | validation loop 10.06x;聚合子图 28.06x | 原表达缺少 aten.roll.default converter;等价 slice+cat 改写后 4.568/0.618 ms,custom 快 7.39x | prediction max diff 5.96e-08;图基线 diff 7.45e-09,宽动态范围 1.43e-05 | | BatchSpdInvFp32 | Koopa / DMD | 不适用:框架路径无法保持在 NPU | DMD:CPU fallback 4341.75 ms,custom 0.339 ms,12823.56x;Koopa 完整推理:5300.64/8.80 ms,602.19x | DMD max diff 6.80e-08;Koopa prediction max diff 2.38e-07 | | TirexSlstmCell | TiRex / xLSTM | sLSTM cell 14.31x;完整 sLSTM layer 10.46x | 原表达缺少 aten.log_sigmoid_forward.default converter;等价稳定公式改写后 6.318/3.542 ms,custom 快 1.78x | cell max diff 约 1.45e-06;图基线 diff 7.45e-08 | | CfcScanFused | CfC / continuous-time RNN | 组件 84.83x;3 层 encoder 70.26x | 原表达直接 fullgraph:8.090/1.265 ms,custom 快 6.40x | encoder max diff 2.33e-07;图基线 diff 2.38e-07 | | CornnScanFused | coRNN | 组件 56.73x;3 层 encoder 54.15x | 原表达直接 fullgraph:3.579/1.718 ms,custom 快 2.08x | encoder max diff 1.49e-07;图基线 diff 1.04e-07 | | SruScanFused | SRU | 组件 163.48x;3 层 encoder 71.46x | 原表达直接 fullgraph:5.272/0.884 ms,custom 快 5.97x | encoder max diff 1.04e-07;图基线 diff 1.79e-07 | | UnicornnScanFused | UnICORNN | 组件 160.68x;3 层 encoder 100.43x | 原表达直接 fullgraph:3.544/0.521 ms,custom 快 6.80x | encoder max diff 2.68e-07;图基线 diff 1.90e-07 | | LtcScanFused | LTC / continuous-time RNN | 组件 82.44x;3 层 encoder 76.90x | 原表达直接 fullgraph:10.227/4.909 ms,custom 快 2.08x | encoder max diff 2.53e-07;图基线 diff 1.34e-07 | 表中 框架/custom ms 均为同一正式 shape 下的稳态时延。详细 shape、warmup、重复次数和原始结果见 [docs/torchair_first_batch_report.md](docs/torchair_first_batch_report.md) 及各算子的 docs/benchmark.md、docs/test_report.md。 ## TorchAir 结论说明 - SelectiveScan1D、CfcScanFused、CornnScanFused、SruScanFused、UnicornnScanFused、LtcScanFused 共 6 个原模型表达无需改写即可直接 fullgraph=True 成图;custom 相对图模式仍快 1.39x-6.80x。 - AutoCorrFusedAggregate、S6ScanFused、TirexSlstmCell 的原模型表达当前不能直接完整成图,原因分别是缺少 aten.roll.default、aten.softplus.default、aten.log_sigmoid_forward.default converter。 - 为避免使用较弱的 eager 路径作为唯一基线,测试将上述 3 个表达人工改写为数学等价、TorchAir 可转换的基础算子组合。custom 与这种改写后的强图基线相比仍快 7.39x、6.48x、1.78x。 - 因此这 3 组结果不能写成“原模型直接 TorchAir 成图”。框架路径需要额外改写模型表达,自定义算子则直接实现目标语义,接入时只替换为 ACLNN 调用。 - Koopa 不属于图优化问题:底层 torch.linalg.lstsq 本身不支持 NPU,TorchAir 无法把 CPU fallback 自动转换为 NPU 图。 ## 算子实现逻辑 第一批算子主要采用三类实现方式: 1. **时间扫描融合**:SelectiveScan1D、S6ScanFused、CfC/coRNN/SRU/UnICORNN/LTC 将时间步循环放入单个 Ascend C kernel,状态在 kernel 内持续更新,避免每个时间步重新 launch 一组 NPU 算子。 2. **lag 聚合融合**:AutoCorrFusedAggregate 在一个 kernel 中完成相关性筛选、lag 权重计算和时移聚合,避免框架侧反复执行 roll/gather/reduce。 3. **不支持路径替换**:BatchSpdInvFp32 利用批量 SPD 矩阵求逆替换 Koopa/DMD 中会回落 CPU 的最小二乘关键路径;TirexSlstmCell 将 sLSTM 的门控、稳定化和状态更新合并执行。 每个算子的公式、输入输出、tiling、GM/UB 数据流和误差说明均记录在对应的 docs/algorithm.md 与 docs/api_reference.md 中。 ## 交付件完整度 10 个正式算子均提供以下核心交付内容: - CMakeLists.txt、README.md - op_host/、op_kernel/ - docs/algorithm.md、docs/api_reference.md - docs/benchmark.md、docs/test_report.md - examples/、tests/ - 按算子构建方式提供的 msopgen 配置、构建脚本或直接 CMake/host API 接入文件 项目级补充交付件包括: - TorchAir 第一批统一报告和原始结果 JSON - 第一批 10 个算子合入评审材料与逐页讲稿(Markdown) - CANN 算子开发规则、SCA 排查经验和 LLM 研发提示词模板 ## 验证情况 - 10 个算子已在 Ascend 910B3 完成 CMake/msopgen 构建、ACLNN runtime、正确性和 benchmark 验证。 - 9 个可由 torch_npu 表达的算子完成 eager NPU 对照;其中 6 个完成原表达直接 TorchAir fullgraph,3 个完成 converter 缺失确认及等价改写后的 TorchAir 强基线。 - Koopa 完成 CPU fallback、DMD 子图和完整模型推理对照,证明自定义算子消除了 NPU 不支持路径。 - 本地完成 Python 语法、JSON 解析、选择性扫描单测及 git diff --check。 本地检查命令: bash python -m compileall -q prediction/ProcessControl/TimeSeriesForecast python -m pytest prediction/ProcessControl/TimeSeriesForecast/selective_scan_1d/tests/test_selective_scan_1d.py -q git diff --check CANN 环境构建示例: bash source /usr/local/Ascend/ascend-toolkit/set_env.sh cd prediction/ProcessControl/TimeSeriesForecast/<op> rm -rf build cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DSOC_VERSION=Ascend910B1 cmake --build build -j 2 带 msopgen 的算子可按各目录 README.md 或 docs/api_reference.md 重新生成 ACLNN 包,并运行 tests/ 下的 probe、模型适配或 benchmark 脚本。 ## 结论 本 PR 的价值不只是“把 CPU 代码移到 NPU”。其中 9 个算子是在同一 NPU 上,相对 eager torch_npu 或 TorchAir 图模式减少框架拆分和调度开销;Koopa 则补齐了框架当前不支持、必须回落 CPU 的关键计算。这一批 10 个算子均具有明确模型入口、可复现性能数据、正确性验证和完整交付目录,可作为后续时序模型 Ascend 适配与算子扩展的基础。 See merge request: cann/mat-chem-sim-pred!23 | 1 天前 | |
【安全修复】修复9个安全漏洞:整数溢出、空指针解引用、缓冲区溢出 Co-authored-by: LiizzMM<1404537011@qq.com> # message auto-generated for no-merge-commit merge: !22 merge master into master 【安全修复】修复9个安全漏洞:整数溢出、空指针解引用、缓冲区溢出 Created-by: LiizzMM Commit-by: LiizzMM Merged-by: cann-robot Description: ## 类型 - [x] Bug修复 - [ ] 新功能 - [ ] 代码风格更新 - [ ] 代码重构 - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 概述 本 PR 修复了代码安全扫描发现的 **9个安全漏洞**,涉及 **6个文件**。所有修复均针对 C++ 层面的内存安全问题,包括整数溢出(CWE-190)、空指针解引用(CWE-476)和缓冲区溢出(CWE-120)。 **变更统计**:6个文件,+139 行,-47 行 --- ## 漏洞修复清单 ### 1. vv_host.cpp — 2个漏洞(M-06、M-18) **文件路径**: simulation/AI4MD/velocity-verlet/op_host/vv_host.cpp | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | M-06 | 中危 | CWE-476 | Initialize() 中3处 aclrtMalloc 调用未检查返回值,分配失败时指针为 NULL,后续使用导致空指针解引用 | | M-18 | 中危 | CWE-190 | StepVRescale() 中 n_atoms_ * 3 使用 int32 计算,当 n_atoms_ > ~7.15亿时整数溢出;同时 new float[] 抛异常会导致整个模拟崩溃 | **修复方案**: - Initialize():3处 aclrtMalloc 全部增加返回值检查,失败时释放已分配的内存并返回 -1,避免内存泄漏和空指针使用 - StepVRescale():用 size_t 计算 n_atoms_ * 3 避免溢出;改用 new (std::nothrow) + 空指针检查替代抛异常的 new[],分配失败时优雅返回而非崩溃 - 新增 #include <new> 以支持 std::nothrow --- ### 2. dpd_host_continued.cpp — 1个漏洞(M-16) **文件路径**:simulation/AI4MD/Dissipative_particle_dynamics/op_host/dpd_host_continued.cpp | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | M-16 | 中危 | CWE-190 | create_cubic_lattice() 中 particles_per_side^3 使用 int32 计算,当 particles_per_side > 1290 时溢出(1291³ ≈ 21.6亿 > INT32_MAX),导致分配过小的数组 | **修复方案**: - 用 int64_t 计算 particles_per_side 的立方值 - 增加 particles_per_side <= 0 的输入验证 - 检查结果是否超过 INT32_MAX,超过则返回空 ParticleData(0) 避免溢出 --- ### 3. pme_host2.cpp — 3个漏洞(M-05、M-04、H-04) **文件路径**:simulation/AI4MD/PME/op_host/pme_host2.cpp | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | M-05 | 中危 | CWE-190 | Initialize() 中 mesh_dim^3 * sizeof(float) 等5处 size 计算使用 int32,mesh_dim > 2150 时溢出 | | M-04 | 中危 | CWE-476 | Initialize() 中5处 malloc 调用未检查返回值(host_dft_matrix_、host_influence_ 等),分配失败时空指针被使用 | | H-04 | 高危 | CWE-120 | SetCharges() 中 memcpy 使用调用方传入的 n_atoms 而非初始化时的 n_atoms_,当传入值大于缓冲区大小时导致堆缓冲区溢出 | **修复方案**: - 所有 size 变量从 int32_t 改为 int64_t,乘法前用 static_cast 提升到64位 - 增加 n_atoms/mesh_dim 的输入验证(<= 0 或 > 65535) - 5处 malloc 调用后统一增加空指针检查,失败时利用 free(NULL) 安全特性清理所有已分配内存并返回 -1 - 7处 aclrtMalloc 的 size 参数改为 static_cast<size_t> 传递 - SetCharges() 增加 n_atoms != n_atoms_ 检查,不一致时拒绝操作,防止缓冲区溢出 --- ### 4. shake_host.cpp — 1个漏洞(H-10) **文件路径**:simulation/AI4MD/SHAKE/op_host/shake_host.cpp | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | H-10 | 高危 | CWE-190 | AllocateDeviceMemory() 中 n_atoms_ * 3 * sizeof(float) 使用 int32 计算,当 n_atoms_ > ~7.15亿时溢出,导致 aclrtMalloc 分配过小的设备内存,后续写入越界 | **修复方案**: - 增加 n_atoms_ <= 0 输入验证 - 所有 n_atoms_ * 3 和 n_atoms_ * sizeof(float) 计算前用 static_cast<size_t>(n_atoms_) 提升,确保64位算术 --- ### 5. gaff2_host.h — 1个漏洞(H-05) **文件路径**:simulation/AI4MD/GAFF2/op_host/gaff2_host.h | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | H-05 | 高危 | CWE-120 | UploadExclusion() 中 aclrtMemcpy 的大小使用调用方传入的 n_atoms 计算,而非初始化时 config_.n_atoms。当传入值大于实际分配的缓冲区大小时,导致设备内存堆溢出 | **修复方案**: - 增加 n_atoms != config_.n_atoms 检查,不一致时返回 -1 - size 计算改为 int64_t 64位算术,避免 n_atoms * n_atoms * sizeof(int32_t) 溢出 - aclrtMemcpy 的 size 参数用 (size_t) 显式转换 --- ### 6. gaff2_host.cpp — 1个漏洞(C-01) **文件路径**:simulation/AI4MD/GAFF2/op_host/gaff2_host.cpp | 漏洞编号 | 严重级别 | CWE 类型 | 问题描述 | |---------|---------|---------|---------| | C-01 | 严重 | CWE-190 | Initialize() 中 n_atoms * n_atoms * sizeof(int32_t) 使用 int32 计算,当 n_atoms > ~23170 时溢出(23171² × 4 ≈ 2.15GB > INT32_MAX),导致 aclrtMalloc 分配远小于预期的内存,后续 aclrtMemset 越界写入 | **修复方案**: - size 变量从 int32_t 改为 int64_t,乘法前用 static_cast<int64_t>(n_atoms) 提升 - 增加 excl_sz <= 0 验证,异常时调用 Finalize() 清理并返回 -1 - aclrtMalloc、aclrtMemset 的 size 参数用 (size_t) 显式转换 - fprintf 的 size 格式符从 %d 改为 %lld(配合 long long 转换) --- ## 修复原则 1. **64位安全算术**:所有涉及数组大小计算的乘法,先用 static_cast 将操作数提升到 int64_t 或 size_t,避免 int32 溢出 2. **内存分配检查**:所有 malloc/aclrtMalloc/new 调用后均检查返回值,失败时清理已分配资源并返回错误码 3. **缓冲区边界验证**:所有接受外部 n_atoms 参数的函数,检查其与初始化时记录的值是否一致,防止越界访问 4. **最小侵入**:仅修改与漏洞直接相关的代码行,不改变函数签名和业务逻辑,不引入新依赖(仅 vv_host.cpp 新增标准库 <new>) 5. **清晰注释**:每处修复均添加 CWE-xxx fix: 注释说明修复原因,便于代码审查 --- ## 测试建议 - [ ] 编译验证:确认6个文件均能通过编译(C++11及以上) - [ ] 小规模回归:使用原有测试用例运行,确认功能无退化 - [ ] 边界输入测试: - 传入 n_atoms = 0 或负值,确认返回错误而非崩溃 - 传入超大 n_atoms(如 100000),确认不会因溢出分配过小内存 - SetCharges() / UploadExclusion() 传入与初始化不一致的 n_atoms,确认返回 -1 See merge request: cann/mat-chem-sim-pred!22 | 18 天前 | |
feat: add 6 sub-domain READMEs, templates, rename milestone to roadmap, refresh main README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !16 merge roadmap-hjx into master feat: add 6 sub-domain READMEs, templates, rename milestone to roadmap, refresh main README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 新功能 - [x] 文档内容更新 ## 描述 本次变更对仓库进行了一次全面重构与扩展,涵盖以下核心内容: ### 仓库结构重组 - 将 milestone.md 重命名为 roadmap.md,更新内部引用 - 在 simulation/ 下划分 3 个子领域目录:MaterialPropertyPrediction/、AI4MD/、AI4PDE/ - 在 prediction/ 下划分 3 个子领域目录:TabularData/、TimeSeries/、SmallData/ - 创建 template/ 目录,包含算子贡献四件套模板 ### 各子领域 README 新增 为 6 个子领域分别撰写 README.md,每篇包含: - 领域简介与背景 - 关键模型与算法的技术原理解析 - 典型化工应用场景与推荐方法 - 相关资源和开源实现 - 本仓库规划中的算子/模型列表 ### 贡献模板 template/ 目录提供 4 个标准模板: - algorithm.md —— 算法说明文档模板 - references.md —— 参考文献模板 - operator_example.md —— 算子示例代码模板 - test_architecture.md —— 测试架构模板 ### 主 README 刷新 - 删除具体算子列表,改为按领域方向组织介绍 - 新增贡献模板章节和仓库结构示意图 - 引用 roadmap.md 作为详细算子开发路线图 ## 如何测试 本次变更为文档和目录结构调整,不涉及算子代码变更。可通过以下方式验证: 1. 浏览 simulation/ 和 prediction/ 下各子目录的 README.md 确认内容完整 2. 查看 template/ 下的四个模板文件格式是否正确 3. 在浏览器中打开 README.md 确认渲染效果 4. 对比 roadmap.md 与原 milestone.md 内容是否一致 ## Checklist: - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 该 PR 的分支为 roadmap-hjx,定位为规划未来功能和仓库范围的开发分支。后续该方向的全部算子开发将在此框架下逐步推进。 See merge request: cann/mat-chem-sim-pred!16 | 1 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
/lgtm Co-authored-by: LiizzMM<1404537011@qq.com> # message auto-generated for no-merge-commit merge: !12 merge master into master 新建OAT.xml .clang-format .pre-commit-config.yaml文件 Created-by: LiizzMM Commit-by: LiizzMM Merged-by: cann-robot Description: 代码仓中新建OAT.xml .clang-format .pre-commit-config.yaml文件 See merge request: cann/mat-chem-sim-pred!12 | 2 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
/lgtm Co-authored-by: LiizzMM<1404537011@qq.com> # message auto-generated for no-merge-commit merge: !12 merge master into master 新建OAT.xml .clang-format .pre-commit-config.yaml文件 Created-by: LiizzMM Commit-by: LiizzMM Merged-by: cann-robot Description: 代码仓中新建OAT.xml .clang-format .pre-commit-config.yaml文件 See merge request: cann/mat-chem-sim-pred!12 | 2 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
new: 新建文件 LICENSE 新建license文件,选取Apache 2.0 许可证 Signed-off-by: LiizzMM <1404537011@qq.com> | 2 个月前 | |
/lgtm Co-authored-by: LiizzMM<1404537011@qq.com> # message auto-generated for no-merge-commit merge: !12 merge master into master 新建OAT.xml .clang-format .pre-commit-config.yaml文件 Created-by: LiizzMM Commit-by: LiizzMM Merged-by: cann-robot Description: 代码仓中新建OAT.xml .clang-format .pre-commit-config.yaml文件 See merge request: cann/mat-chem-sim-pred!12 | 2 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
feat(PIDModelFit): 新增 9个 PID 整定算子 + E2E 验证(系列共 12个,完整覆盖 PID 整定流程) Co-authored-by: liuhaidong<aliutec@163.com> # message auto-generated for no-merge-commit merge: !21 merge devin/1781921853-pid-modelfit-ops into master feat(PIDModelFit): 新增 9个 PID 整定算子 + E2E 验证(系列共 12个,完整覆盖 PID 整定流程) Created-by: haikuo Commit-by: liuhaidong Merged-by: cann-robot Description: ## Summary 本次为 **PIDModelFit** 算子系列提交:当前正式口径共 **12 个 NPU 自定义算子**,其中包括前序已提交的 **3 个 *_basis_gemm_fit 模型辨识算子**,以及本轮新增并保留的 **9 个诊断、整定、候选仿真、特征提取和评估类算子**。这 12 个算子共同覆盖 PID 整定主流程:模型辨识 → 模型诊断 → PID 参数生成 → 候选闭环仿真/评分/选优 → 候选特征提取 → 控制性能与过程能力评估。 > 重点(committer 第一眼):本次正式合入范围已从早期探索口径收敛为 **12 个正式算子**。前序 3 个 *_basis_gemm_fit 辨识算子作为模型辨识基础能力保留,并补充 benchmark、docs/benchmark.md 与 README 描述;本轮新增并保留 9 个下游算子,补齐 PIDModelFit 从“能辨识模型”到“能诊断、能整定、能仿真选优、能验收评估”的完整工程链路。探索/历史原型算子不进入本次正式提交范围。 ## 算子清单(9 新 + 3 已有 = 12),按 PID 整定 6 阶段 1. **模型辨识**:pid_fopdt_basis_gemm_fit · pid_ipdt_basis_gemm_fit · pid_sopdt_basis_gemm_fit 2. **模型质量诊断**:pid_residual_diagnostics · pid_windowed_residual_diagnostics 3. **PID 参数生成**:pid_tuning_rule_batch(Ziegler-Nichols / IMC / Cohen-Coon) 4. **候选闭环仿真、评分与选优**:pid_fopdt_batch_rollout_score · pid_ipdt_batch_rollout_score · pid_sopdt_batch_rollout_score 5. **候选响应特征提取**:pid_step_response_features 6. **控制性能与过程能力评估**:pid_control_performance_metrics · pid_process_capability_metrics → 新增的 IPDT / SOPDT rollout 补齐了候选仿真阶段对 FOPDT / IPDT / SOPDT 三类模型的覆盖;三个 batch rollout 算子已融合候选特征、候选评分和 best 选择,直接输出每条回路的最优 PID 候选结果。 ## E2E 验证:算子有效且具备 NPU resident 链路价值(Ascend910B3 / node202 真编真跑) - **有效(精度)**:12/12 算子均提供 Python/CPU reference、精度测试或 NPU smoke/benchmark 入口;NPU 输出与 CPU reference 在 float32 容差内对齐。FOPDT 全链路 E2E 覆盖 fit -> tuning_rule -> fopdt_rollout -> performance_metrics,分阶段与 CPU reference 对齐,链路语义自洽。 - **高效(vs CPU 64 线程)**:模型辨识 pipeline 是最明确 NPU 价值点,MatMul + reduce resident e2e 约 28x-180x;三类 batch rollout 在典型候选规模下约 4x-7x;残差诊断、窗口残差、候选特征和指标类算子适合作为 NPU resident 后处理,避免中间轨迹回传 CPU。 - **工程定位清晰**:pid_tuning_rule_batch 算术强度较低,不作为单独性能卖点,但它支撑 E2E 中“模型参数 -> PID 候选”的 device 侧候选生成阶段;评估类算子推荐挂在 NPU resident 流水线后端使用。 ## 主要改动 - 9 个新增正式算子目录,均包含 op_host / op_kernel / examples / tests / docs / README 等标准交付件结构。 - 3 个前序 *_basis_gemm_fit 模型辨识算子作为基础能力保留,并补充 benchmark、README 和文档说明。 - common/ 提供 CPU / NumPy reference 与共享辅助实现。 - e2e/ 提供全链路验证驱动,包括 e2e_perf、e2e_orchestrator.py 和 build_e2e.sh。 - 顶层 docs/ 收敛为正式交付文档:design.md、test_report.md、pid_operator_catalog_by_purpose.md。 ## 验证环境 Ascend910B3,CANN toolkit,g++ 10.3.1 See merge request: cann/mat-chem-sim-pred!21 | 19 天前 | |
feature: add PID basis GEMM fit operators Co-authored-by: liuhaidong<aliutec@163.com> # message auto-generated for no-merge-commit merge: !20 merge pid-basis-gemm-fit-score into master feature: add PID basis GEMM fit operators Created-by: haikuo Commit-by: liuhaidong Merged-by: cann-robot Description: ## 类型 - [x] 新功能 - [x] 构建过程或辅助工具的变动 - [x] 文档内容更新 ## 描述 本 PR 在 prediction/ProcessControl/PIDModelFit/ 下新增工业过程控制 PID 模型辨识算子组,面向 PID 整定、自整定和数字孪生仿真中的多回路、多候选模型筛选场景。 本次提交包含三个工程上独立的 Ascend C 算子: | 算子 | 目录 | 公开接口 | 模型语义 | |------|------|----------|----------| | FOPDT basis-GEMM fit | pid_fopdt_basis_gemm_fit/ | aclnnPidFopdtBasisGemmFit | 一阶惯性加纯滞后模型 | | IPDT basis-GEMM fit | pid_ipdt_basis_gemm_fit/ | aclnnPidIpdtBasisGemmFit | 积分加纯滞后模型 | | SOPDT basis-GEMM fit | pid_sopdt_basis_gemm_fit/ | aclnnPidSopdtBasisGemmFit | 二阶惯性加纯滞后模型 | 三个算子均具备独立的 CMakeLists.txt、README.md、docs/algorithm.md、docs/api_reference.md、op_host/、op_kernel/、examples/、tests/。公共目录 common/ 只复用数学等价的 basis-GEMM best reduce 底座,避免把三类模型混成一个带 family 参数的算子。 ### 算法路线 将传统逐回路、逐候选的模型辨识改写为: text dot[B, M] = y_centered[B, N] x basis_t[N, M] K_hat[b, m] = dot[b, m] / basis_norm[m] SSE[b, m] = y_energy[b] - dot[b, m]^2 / basis_norm[m] best_idx[b] = argmin_m SSE[b, m] 其中 GEMM 主计算复用 CANN 内置 MatMul,自定义算子融合完成 K_hat/SSE/best_idx reduce,输出每条回路的 best_sse、best_k、best_idx,避免输出完整评分矩阵。 ### 目录结构 text prediction/ProcessControl/ ├── README.md └── PIDModelFit/ ├── README.md ├── docs/ │ ├── design.md │ └── test_report.md ├── common/ │ ├── pid_basis_gemm_fit_common.h │ ├── pid_basis_gemm_fit_host_impl.h │ ├── pid_basis_gemm_fit_kernel.h │ ├── pid_basis_gemm_acl_smoke.h │ └── pid_basis_gemm_reference.py ├── pid_fopdt_basis_gemm_fit/ ├── pid_ipdt_basis_gemm_fit/ └── pid_sopdt_basis_gemm_fit/ ## 如何测试 ### 1. 本地 Python 精度测试 bash python -m pytest \ prediction/ProcessControl/PIDModelFit/pid_fopdt_basis_gemm_fit/tests/test_pid_fopdt_basis_gemm_fit.py \ prediction/ProcessControl/PIDModelFit/pid_ipdt_basis_gemm_fit/tests/test_pid_ipdt_basis_gemm_fit.py \ prediction/ProcessControl/PIDModelFit/pid_sopdt_basis_gemm_fit/tests/test_pid_sopdt_basis_gemm_fit.py \ -q 结果: text 6 passed ### 2. Python 语法检查 bash python -m compileall -q prediction/ProcessControl/PIDModelFit 结果:通过。 ### 3. Ascend C 编译与 NPU smoke 已在 node202 / Ascend 910B1 环境验证: bash for op in pid_fopdt_basis_gemm_fit pid_ipdt_basis_gemm_fit pid_sopdt_basis_gemm_fit; do cd prediction/ProcessControl/PIDModelFit/$op rm -rf build cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DSOC_VERSION=Ascend910B1 cmake --build build -j 2 done 三个算子均编译通过,并完成 ACL smoke: text PidFopdtBasisGemmFit smoke best_sse=[1, 12] best_k=[1.5, 2] best_idx=[2, 1] PASSED PidIpdtBasisGemmFit smoke best_sse=[1, 12] best_k=[1.5, 2] best_idx=[2, 1] PASSED PidSopdtBasisGemmFit smoke best_sse=[1, 12] best_k=[1.5, 2] best_idx=[2, 1] PASSED ### 4. 性能验证记录 Ascend 910B1 原型验证中,典型规模下 NPU cached 端到端路径相对 CPU 多线程完整 fit 有明显优势: | 模型 | 配置 | CPU 多线程完整 fit | NPU cached 端到端 | NPU cold 端到端 | |------|------|--------------------|-------------------|-----------------| | FOPDT | B=64,N=1024,M=256 | 9.22 ms | 0.43 ms | 0.87 ms | | IPDT | B=64,N=1024,M=256 | 9.64 ms | 0.40 ms | 0.63 ms | | SOPDT | B=64,N=1024,M=256 | 8.46 ms | 0.57 ms | 0.87 ms | | FOPDT | B=128,N=1024,M=512 | 31.55 ms | 0.99 ms | 1.02 ms | | IPDT | B=128,N=1024,M=512 | 32.63 ms | 0.64 ms | 1.30 ms | | SOPDT | B=128,N=1024,M=512 | 33.40 ms | 0.87 ms | 1.19 ms | 详细测试说明见 prediction/ProcessControl/PIDModelFit/docs/test_report.md。 ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志/测试记录 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 本 PR 的核心设计原则是:FOPDT/IPDT/SOPDT 保持工程独立,便于评审、验收、单独测试和后续分别优化;公共底座只复用等价数学逻辑,不影响算子边界。 See merge request: cann/mat-chem-sim-pred!20 | 1 个月前 | |
fix: remove TimeSeries and MeshGraphNet references, update README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !19 merge roadmap-hjx into master fix: remove TimeSeries and MeshGraphNet references, update README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 代码修复 - [x] 代码重构 - [x] 文档内容更新 - [x] SCA 合规修复 ## 概述 本 PR 是上一轮大型架构 PR 的后续修复,主要解决 CI/CD 流水线中暴露的 **SCA 许可证合规问题**、**Python 编译产物误提交问题** 以及 **贝叶斯优化器逻辑缺陷**。共提交 5 个 commit,87 个文件变更,+1,081 / -1,939 行。 --- ## 一、贝叶斯优化器逻辑修复 ### 1.1 BayesianOptimizer.suggest() 初始阶段修复 **问题**:当 x_train 为 None(无观测数据)时,原代码生成 n_candidates 个候选点后尝试用 y_train.argmax() 索引,但此时 y_train 也必然为 None,导致条件判断逻辑混乱。 **修复**:直接生成 1 个随机点并返回,移除冗余的候选点生成和无效的条件分支。 python # 修改前 if x_train is None: x_cand = torch.rand(n_candidates, self.bounds.shape[0]) x_cand = x_cand * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_cand[y_train.argmax() if y_train is not None else 0] # 修改后 if x_train is None: x_next = torch.rand(self.bounds.shape[0]) x_next = x_next * (self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0] return x_next --- ## 二、CI/CD 基础设施修复 ### 2.1 移除 Git 追踪的 Python 编译产物 - 使用 git rm --cached 移除已追踪的 .pyc 文件 - 更新 .gitignore,新增忽略规则: - __pycache__/、*.pyc、*.pyo、*.pyd、.Python - PR-error/(CI 错误日志目录) ### 2.2 SCA 许可证头批量添加 为 simulation/AI4PDE/ 目录下全部 **57 个文件** 添加 CANN Open Software License Agreement Version 2.0 版权声明头,覆盖以下文件类型: | 文件类型 | 版权头风格 | 覆盖目录 | |---------|-----------|---------| | .cpp / .h | C/C++ 块注释 | pinn/, fno/, deeponet/, mesh_graph_net/, pde_common/ | | .py | Python 行注释 | pinn/, fno/, deeponet/, mesh_graph_net/ | | .sh | Shell 行注释 | 根目录 build.sh | | .md | HTML 注释 | README.md, SCHEDULER.md | | CMakeLists.txt | 行注释 | 各子目录 CMakeLists.txt | --- ## 三、SCA 问题目录清理 经 SCA 检查发现 prediction/TabularData/、prediction/TimeSeries/ 和 simulation/AI4PDE/mesh_graph_net/ 三个目录下的文件存在合规问题,暂时清空: | 目录 | 删除文件数 | 说明 | |------|:---------:|------| | prediction/TabularData/ | 36 | 6 个子类(tabular_foundation_models / deep_learning_architectures / self_supervised_pretraining / llm_based / pretraining_transfer / gradient_boosting_alternatives) | | prediction/TimeSeries/ | 39 | 6 个子类(ts_foundation_models / transformer_architectures / efficient_architectures / ssm_operator_models / llm_based_ts / anomaly_detection) | | simulation/AI4PDE/mesh_graph_net/ | 13 | examples / op_host / op_kernel / tests | --- ## 四、文档同步更新 ### 4.1 主 README.md 更新 - 移除目录树中 TabularData/、TimeSeries/、mesh_graph_net/ 的条目 - 移除"重点关注领域"表格中表格类数据预训练模型和时序类数据预训练模型两行 - 移除 AI for PDE 行中 MeshGraphNet 的引用 ### 4.2 SmallData README.md 增强 prediction/SmallData/README.md 大幅扩展,新增以下内容: - 高斯过程回归:SVGP(稀疏 GP)、RFF-GP(随机傅里叶特征) - 贝叶斯神经网络:Bayes by Backprop、Laplace Redux、SNGP、Deep Ensembles - 多保真度 GP:NARGP、ResGP/MF-DGP、co-kriging - 贝叶斯优化:TuRBO(高维 BO)、SAASBO、HEBO、SMAC3、Optuna - 小样本迁移学习:MAML、Reptile、OT Transfer - 主动学习:BatchBALD、BADGE - 深度核学习(DKL)、物理信息 GP(PIGP) - 综合对比矩阵(14 个模型的成熟度/效果/迁移难度/优先级评估) --- ## 如何测试 ### 1. 贝叶斯优化器修复验证 bash cd prediction python -m pytest SmallData/test_gpr.py -v -k "test_bayesian" ### 2. SCA 检查 提交 PR 后 CI 流水线自动执行 SCA 扫描,确认 unconfirmedFileNum 为 0。 --- ## Checklist - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经根据需要更新了对应的变更日志 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 ### 变更统计 - **87 个文件变更** - **+1,081 行插入** / **-1,939 行删除** - **5 个 commit** ### Commit 列表 | Commit | 说明 | |--------|------| | ccca9b4 | fix: remove __pycache__/.pyc files and update .gitignore | | 6311ca9 | fix: add CANN license headers to simulation/AI4PDE files | | 8311e86 | feat: add TabularData and TimeSeries model directories with README updates | | 39c4f81 | fix: remove TabularData and mesh_graph_net for SCA compliance | | 5a1b6ad | fix: remove TimeSeries and MeshGraphNet references, update README | ### 后续计划 1. TabularData/TimeSeries 模型目录在解决 SCA 合规问题后重新提交 2. MeshGraphNet 算子在添加完整版权声明后恢复 3. 继续推进预测优化方向算子的 Ascend C 迁移 ### Reviewer 关注点 - prediction/SmallData/gpr.py 中 BayesianOptimizer.suggest() 的修改确保初始阶段行为正确 - simulation/AI4PDE/ 下的版权头添加均为标准模板,未修改任何算子逻辑 - 三个目录的清空是临时措施,后续将通过合规流程重新提交 See merge request: cann/mat-chem-sim-pred!19 | 1 个月前 | |
feat: add 6 sub-domain READMEs, templates, rename milestone to roadmap, refresh main README Co-authored-by: Huang-jianxing<huangjianxing4@huawei.com> # message auto-generated for no-merge-commit merge: !16 merge roadmap-hjx into master feat: add 6 sub-domain READMEs, templates, rename milestone to roadmap, refresh main README Created-by: Huang-jianxing Commit-by: Huang-jianxing Merged-by: cann-robot Description: ## 类型 - [x] 新功能 - [x] 文档内容更新 ## 描述 本次变更对仓库进行了一次全面重构与扩展,涵盖以下核心内容: ### 仓库结构重组 - 将 milestone.md 重命名为 roadmap.md,更新内部引用 - 在 simulation/ 下划分 3 个子领域目录:MaterialPropertyPrediction/、AI4MD/、AI4PDE/ - 在 prediction/ 下划分 3 个子领域目录:TabularData/、TimeSeries/、SmallData/ - 创建 template/ 目录,包含算子贡献四件套模板 ### 各子领域 README 新增 为 6 个子领域分别撰写 README.md,每篇包含: - 领域简介与背景 - 关键模型与算法的技术原理解析 - 典型化工应用场景与推荐方法 - 相关资源和开源实现 - 本仓库规划中的算子/模型列表 ### 贡献模板 template/ 目录提供 4 个标准模板: - algorithm.md —— 算法说明文档模板 - references.md —— 参考文献模板 - operator_example.md —— 算子示例代码模板 - test_architecture.md —— 测试架构模板 ### 主 README 刷新 - 删除具体算子列表,改为按领域方向组织介绍 - 新增贡献模板章节和仓库结构示意图 - 引用 roadmap.md 作为详细算子开发路线图 ## 如何测试 本次变更为文档和目录结构调整,不涉及算子代码变更。可通过以下方式验证: 1. 浏览 simulation/ 和 prediction/ 下各子目录的 README.md 确认内容完整 2. 查看 template/ 下的四个模板文件格式是否正确 3. 在浏览器中打开 README.md 确认渲染效果 4. 对比 roadmap.md 与原 milestone.md 内容是否一致 ## Checklist: - [x] 我的代码遵循这个项目的代码风格 - [x] 我已经自己测试过我的代码 - [x] 我已经更新了相应的文档 - [x] 我已经在标题中正确使用了类型标签 ## 其他信息 该 PR 的分支为 roadmap-hjx,定位为规划未来功能和仓库范围的开发分支。后续该方向的全部算子开发将在此框架下逐步推进。 See merge request: cann/mat-chem-sim-pred!16 | 1 个月前 |
mat-chem-sim-pred
项目简介
本仓库为基于华为 CANN(Ascend C)计算框架开发的化工行业专用算子库,聚焦科学计算与预测优化两大方向。通过高性能算子加速分子模拟、材料性质预测、反应路径优化、工艺过程建模等核心任务,为化工研发、智能制造及材料创新提供高效计算能力支撑。
核心定位:构建"模拟 → 数据 → 预测 → 设计 → 优化"的全链路化工 AI 算子体系。
仓库结构
mat-chem-sim-pred/
├── simulation/ # 科学计算方向
│ ├── MaterialPropertyPrediction/ # 材料性质预测与材料结构生成
│ │ └── DAO/ # PyTorch 基础算子库
│ ├── AI4MD/ # 机器学习分子动力学
│ │ ├── Lennard_Jones/ # LJ 力场算子 ✅
│ │ ├── GAFF2/ # GAFF2 力场算子 ✅
│ │ ├── PME/ # PME 静电算子 ✅
│ │ ├── SHAKE/ # SHAKE 约束算子 ✅
│ │ ├── velocity-verlet/ # Velocity Verlet 积分 ✅
│ │ └── Dissipative_particle_dynamics/ # DPD 耗散粒子动力学 ✅
│ └── AI4PDE/ # AI for PDE
│ ├── pinn/ # PINN 算子 ✅
│ ├── fno/ # FNO 算子 ✅
│ ├── deeponet/ # DeepONet 算子 ✅
│ └── pde_common/ # 公共工具模块
├── prediction/ # 预测优化方向
│ ├── SmallData/ # 小数据预测优化模型
│ │ ├── kernels.py # GP 核函数参考实现 🔧
│ │ └── gpr.py # GP 回归 + BO 参考实现 🔧
│ └── ProcessControl/ # 工业过程控制与 PID 整定算子
│ └── PIDModelFit/ # FOPDT/IPDT/SOPDT 模型辨识算子 ✅
├── template/ # 算子贡献模板
│ ├── algorithm.md # 算法说明模板
│ ├── references.md # 参考文献模板
│ ├── operator_example.md # 算子代码框架模板
│ └── test_architecture.md # 测试架构模板
├── roadmap.md # 开发路线图
├── FAQ.md # 常见问题
└── AGENTS.md # 开发辅助规则
重点关注领域
科学计算
| 子方向 | 状态 | 目标 | 关键算子/模型类型 |
|---|---|---|---|
| 材料性质预测与结构生成 | 🔧 PyTorch 参考 | 基于第一性原理数据构建材料性质快速预测与逆向生成能力 | 晶体图神经网络、材料描述符计算、晶体结构生成模型、相图预测等 |
| 机器学习分子动力学 | ✅ Ascend C 就绪 | 以 ML 势替代经典力场,实现 DFT 精度下的大体系长时间 MD 模拟 | DeepMD/SchNet/MACE 推理算子、描述符在线计算、D3 色散校正等 |
| AI for PDE | ✅ Ascend C 就绪 | 用 AI 方法加速或替代传统 PDE 求解器,覆盖流体/传热/结构力学 | PINN/FNO/DeepONet 推理算子等 |
预测优化
| 子方向 | 状态 | 目标 | 关键算子/模型类型 |
|---|---|---|---|
| 小数据预测优化模型 | 🔧 PyTorch 参考 | 解决标记数据稀少的化工场景,聚焦小样本/主动学习/贝叶斯优化 | 高斯过程回归、贝叶斯神经网络、贝叶斯优化、度量学习等 |
| 工业过程控制模型辨识 | ✅ Ascend C 就绪 | 面向 PID 整定、自整定与数字孪生场景,加速多回路、多候选过程模型辨识 | FOPDT、IPDT、SOPDT basis-GEMM fit 算子 |
✅ Ascend C 就绪 = 已完成 Ascend C 算子开发,含完整测试 | 🔧 PyTorch 参考 = 提供 PyTorch 参考实现,可作为 Ascend C 迁移基础
详细算子规划请参见 roadmap.md。
贡献模板
为降低新算子贡献门槛,仓库提供了标准模板,位于 template/ 目录:
| 模板 | 说明 |
|---|---|
| algorithm.md | 算法说明文档模板 —— 涵盖算法原理、NPU 实现、精度与性能分析 |
| references.md | 参考文献模板 —— 分类整理基础理论、硬件实现、领域应用和第三方实现 |
| operator_example.md | 算子示例模板 —— 目录结构、Host/Kernel 代码框架、构建配置 |
| test_architecture.md | 测试架构模板 —— C++ UT、Python 集成测试、性能基准测试规范 |
维护团队
Maintainer列表
- 黄剑兴 huangjianxing4@huawei.com
- 张玉橙 zhangyucheng23@huawei.com
- 周吉彬 zhoujibin@dicp.ac.cn
- 高菲 gaofei06@petrochina.com.cn
Committer列表
- 刘非 liuf23357@gmail.com
- 刘海东 aliutec@163.com
- 高梓博 gaozibo@petrochina.com.cn
- 马博文 iambowen.m@qq.com
- 刘达林 liudalin@huawei.com
- 赵俊 roomdream@qq.com
- 郑柳琪 2557692481@qq.com
- 张强豪 1964035193@qq.com
- 李姝漫 1404537011@qq.com
参考资源
为帮助开发者学习 Ascend C 算子开发,建议参考以下 CANN 官方仓库(可 clone 到本地 Reference/ 目录,该目录不参与版本管理):
基础数学库
| 仓库 | 说明 |
|---|---|
| opbase | Ascend C 算子开发基础库,提供通用宏、接口与工具 |
| ops-math | 数学运算算子库(Element-wise、Reduction 等) |
| ops-blas | BLAS 线性代数算子库(MatMul、Gemm 等) |
| ops-fft | 傅里叶变换算子库 |
| ops-sparse | 稀疏计算算子库 |
| ops-tensor | 张量操作算子库(Reshape、Slice、Concat 等) |
| ops-nn | 神经网络算子库(Conv、Pool、Activation 等) |
| ops-rand | 随机数生成算子库 |
开发标准与调试工具
| 仓库 | 说明 |
|---|---|
| cann-learning-hub | CANN 学习中心,含教程、示例与最佳实践 |
| oam-tools | 算子开发调试与性能分析工具集 |
| ops-test-kit | 算子测试套件,用例生成与结果分析 |
| pypto | PyTorch 算子自动迁移工具(PyTorch → Ascend C) |
AI Kernel 生成参考
| 仓库 | 说明 |
|---|---|
| cann-bench | CANN 性能基准测试与 Benchmark |
| cannbot-skills | CANN 开发辅助 Skills 与自动化工具 |
| cann-samples | Ascend C 算子开发完整示例集 |
相关参考库
| 仓库 | 说明 |
|---|---|
| cann-ops-competitions | CANN 算子竞赛参赛作品集 |
| asnumpy | NumPy 兼容 API,方便从 NumPy 迁移到 Ascend |
| ascend-boost-comm | Ascend Boost 通信库 |
可通过
git clone将上述仓库下载至本地Reference/目录作为学习参考。该目录已加入.gitignore,不会纳入本仓库版本管理。
快速上手
环境要求
- CANN ≥ 7.0
- Atlas A2/A3 训练/推理卡
- CMake ≥ 3.16
许可证
本仓库以生态繁荣为目标,选取 Apache 2.0 许可证。
算子贡献指南
详情参考公告 算子贡献指南 1.0
提交流程:
Fork 仓库 → 开发测试 → 提交 PR → SIG Review → 合入