
# MatInvent 权重信息转化为 Paddle 版本MatInvent 的 GitHub 地址:https://github.com/schwallergroup/matinvent 引用的 Hugging Face 模型地址:https://huggingface.co/jwchen25/MatInvent百度 BOS地址:- todo diffcsp等待上传- todo mattergen等待上传## 转换脚本- `weight/diffcsp_convert_to_paddle.py`:处理 MatInvent 版本的 DiffCSP 模型权重- `weight/mattergen_convert_to_paddle.py`:处理 MatInvent 版本的 MatterGen 模型权重## 模型描述MatInvent 是一个通用且高效的强化学习工作流,用于优化扩散模型以实现目标导向的晶体生成。MatInvent 能够为具有单一或多个目标属性的逆向材料设计任务提供强大的优化能力。兼容多种扩散模型架构和属性约束,MatInvent 在材料发现领域具有广泛的应用前景。## 期望模型使用方式及适用范围MatInvent 支持两种扩散模型架构用于晶体结构生成:DiffCSP 和 MatterGen,两者都可通过强化学习进行目标导向的材料设计优化。### 如何使用在 ppmat 环境中,可直接使用通用的 `structure_generation/sample.py` 和 `structure_generation/train.py` 自动化完成对应的训练和推理过程。在对应的 YAML 配置文件中,配置当前项目中提供的文件作为 checkpoint 即可。### 代码范例#### 1. RL Fine-tuning(入口)```bash# MatterGen backbonepython structure_generation/train.py \ --config structure_generation/configs/matinvent/matinvent_mattergen.yaml# DiffCSP backbonepython structure_generation/train.py \ --config structure_generation/configs/matinvent/matinvent_diffcsp.yaml```#### 2. Sampling```bash# Using pre-trained modelpython structure_generation/sample.py \ --config_path structure_generation/configs/matinvent/matinvent_mattergen.yaml \ --checkpoint_path diff-matinvent/tmp/matinvent_mattergen_mp20.pdparams \ --save_path results/matinvent_mattergen \ --mode by_dataloader# Using RL-fine-tuned modelpython structure_generation/sample.py \ --config_path structure_generation/configs/matinvent/matinvent_mattergen.yaml \ --checkpoint_path output/matinvent_mattergen/models/final/model.pdparams \ --save_path results/matinvent_mattergen_rl \ --mode by_dataloader```### 模型局限性及可能的偏差DiffCSP 和 MatterGen 的精度基本对齐,但由于加入了 RL,迁移到 Paddle 中的 MatInvent 目前仅对比采样性能和稳定性。## 首层对齐结果### 执行对齐所需环境- 需要一个名为 `matinvent` 的 conda 环境,且环境已配置好,可完整运行 MatInvent 代码- 在当前 ppmat 项目中,需新建一个 `raw-matinvent` 软链接到原版 MatInvent 项目目录,方便在 Python 代码中通过子线程方式切换执行环境进行联合对比### DiffCSP 首层对齐#### Paddle 推理输出统计| 项目 | 值 ||------|-----|| node_embedding shape | [36, 512] || node_embedding mean | 0.001237 || pred_l shape | [4, 3, 3] || pred_l mean | 0.162087 || pred_x shape | [36, 3] || pred_x mean | 0.018296 |#### PyTorch 推理输出统计| 项目 | 值 ||------|-----|| node_embedding shape | [36, 512] || node_embedding mean | 0.001237 || pred_l shape | [4, 3, 3] || pred_l mean | 0.162087 || pred_x shape | [36, 3] || pred_x mean | 0.018296 |#### 对比 1:node_embedding(第一层输出)| 项目 | 值 ||------|-----|| 总元素数 | 18,432 || 最大绝对差异 | 0.0000e+00 || 平均绝对差异 | 0.0000e+00 || 中位数绝对差异 | 0.0000e+00 |#### 对比 2:pred_l(晶格预测)| 项目 | 值 ||------|-----|| 总元素数 | 36 || 最大绝对差异 | 9.5367e-07 || 平均绝对差异 | 3.5839e-07 || 中位数绝对差异 | 2.8312e-07 |#### 对比 3:pred_x(坐标预测)| 项目 | 值 ||------|-----|| 总元素数 | 108 || 最大绝对差异 | 1.3113e-06 || 平均绝对差异 | 3.9854e-07 || 中位数绝对差异 | 3.5763e-07 |---### MatterGen 首层对齐#### Paddle 推理输出统计| 项目 | 值 ||------|------|| atom_emb shape | [20, 512] || atom_emb mean | -0.013411 || pred_lattice shape | [2, 3, 3] || pred_lattice mean | -0.167533 || pred_frac_coords shape | [20, 3] || pred_frac_coords mean | 0.013041 || pred_atom_types shape | [20, 101] || pred_atom_types mean | -11.921082 |#### PyTorch 推理输出统计| 项目 | 值 ||------|------|| atom_emb shape | [20, 512] || atom_emb mean | -0.013411 || pred_lattice shape | [2, 3, 3] || pred_lattice mean | -0.167545 || pred_frac_coords shape | [20, 3] || pred_frac_coords mean | 0.013033 || pred_atom_types shape | [20, 101] || pred_atom_types mean | -11.921134 |#### 对比 1:atom_emb(第一层输出)| 项目 | 值 ||------|------|| 总元素数 | 10,240 || 最大绝对差异 | 0.0000e+00 || 平均绝对差异 | 0.0000e+00 || 中位数绝对差异 | 0.0000e+00 |#### 对比 2:pred_lattice(晶格预测)| 项目 | 值 ||------|------|| 总元素数 | 18 || 最大绝对差异 | 1.1824e-04 || 平均绝对差异 | 2.2966e-05 || 中位数绝对差异 | 3.4422e-06 |#### 对比 3:pred_frac_coords(坐标预测)| 项目 | 值 ||------|------|| 总元素数 | 60 || 最大绝对差异 | 2.2416e-04 || 平均绝对差异 | 3.3605e-05 || 中位数绝对差异 | 7.6741e-07 |#### 对比 4:pred_atom_types(原子类型预测)| 项目 | 值 ||------|------|| 总元素数 | 2,020 || 最大绝对差异 | 3.0894e-03 || 平均绝对差异 | 2.2321e-04 || 中位数绝对差异 | 7.6294e-06 |---## 最终对齐结果### 执行对齐所需环境- 需要一个名为 `matinvent` 的 conda 环境,且环境已配置好,可完整运行 MatInvent 代码- 在当前 ppmat 项目中,需新建一个 `raw-matinvent` 软链接到原版 MatInvent 项目目录,方便在 Python 代码中通过子线程方式切换执行环境进行联合对比### DiffCSP 的晶体预测结果运行脚本:`weight/diffcsp_convert_to_paddle.py`(脚本会用子线程的方式启动另外的 conda 环境,运行 PyTorch 版本的脚本)#### Paddle 推理输出统计| 项目 | 值 ||------|-----|| pred_l shape | [4, 3, 3] || pred_l mean | 0.162087 || pred_l std | 0.720994 || pred_x shape | [36, 3] || pred_x mean | 0.018296 || pred_x std | 0.509559 |#### PyTorch 推理输出统计| 项目 | 值 ||------|-----|| pred_l shape | [4, 3, 3] || pred_l mean | 0.162087 || pred_l std | 0.720994 || pred_x shape | [36, 3] || pred_x mean | 0.018296 || pred_x std | 0.509559 |#### 对比 1:pred_l(晶格预测)| 项目 | 值 ||------|-----|| 总元素数 | 36 || 最大绝对差异 | 9.5367e-07 || 平均绝对差异 | 3.5839e-07 || 中位数绝对差异 | 2.8312e-07 || < 1e-4 | 36 (100.00%) |#### 对比 2:pred_x(坐标预测)| 项目 | 值 ||------|-----|| 总元素数 | 108 || 最大绝对差异 | 1.3113e-06 || 平均绝对差异 | 3.9854e-07 || 中位数绝对差异 | 3.5763e-07 || < 1e-4 | 108 (100.00%) |### MatterGen 的晶体预测结果脚本:`diff/mattergen/mattergen_final_layer_infer_and_diff.py`(脚本会用子线程的方式启动另外的 conda 环境,运行 PyTorch 版本的脚本)#### Paddle 推理输出统计| 项目 | 值 ||------|------|| pred_lattice shape | [2, 3, 3] || pred_lattice mean | -0.167533 || pred_frac_coords shape | [20, 3] || pred_frac_coords mean | 0.013041 || pred_atom_types shape | [20, 101] || pred_atom_types mean | -11.921082 |#### PyTorch 推理输出统计| 项目 | 值 ||------|------|| pred_lattice shape | [2, 3, 3] || pred_lattice mean | -0.167545 || pred_frac_coords shape | [20, 3] || pred_frac_coords mean | 0.013033 || pred_atom_types shape | [20, 101] || pred_atom_types mean | -11.921134 |#### 对比 1:pred_lattice(晶格预测)| 项目 | 值 ||------|------|| 总元素数 | 18 || 最大绝对差异 | 1.1827e-04 || 平均绝对差异 | 2.2977e-05 || 中位数绝对差异 | 3.3677e-06 || < 1e-4 | 16 (88.89%) |#### 对比 2:pred_frac_coords(坐标预测)| 项目 | 值 ||------|------|| 总元素数 | 60 || 最大绝对差异 | 2.2417e-04 || 平均绝对差异 | 3.3625e-05 || 中位数绝对差异 | 9.2387e-07 || < 1e-4 | 53 (88.33%) |#### 对比 3:pred_atom_types(原子类型预测)| 项目 | 值 ||------|------|| 总元素数 | 2,020 || 最大绝对差异 | 3.0918e-03 || 平均绝对差异 | 2.2338e-04 || 中位数绝对差异 | 7.6294e-06 || < 1e-4 | 1,339 (66.29%) |