本文档指导用户将 REINVENT 4 分子设计工具从 PyTorch GPU 环境迁移到 Ascend NPU 环境,完成环境配置、源码准备、权重准备、模型迁移、测试验证及精度对齐。
| 要求 | 规格 |
|---|---|
| NPU 设备 | Ascend 910B3 |
| CANN 版本 | 8.5.0 |
| Python 版本 | 3.10 |
| 系统架构 | Linux aarch64 |
# 下载并安装 Miniconda
bash Miniconda3-latest-Linux-aarch64.sh
source ~/.bashrcconda create --name reinvent4 python=3.10
conda activate reinvent4# 配置 Conda 华为云镜像
conda config --add channels https://repo.huaweicloud.com/ascend/repos/conda
conda config --show channels
# 配置 pip 华为云镜像
pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple
pip config set global.trusted-host repo.huaweicloud.com
git config --global http.version HTTP/1.1# 创建工作目录,自定义路径
mkdir -p ~/reinvent4 && cd ~/reinvent4
# 克隆 REINVENT 4 官方源码
git clone git@github.com:MolecularAI/REINVENT4.git
# 启动 REINVENT 4 安装(CPU 模式安装基础依赖)
python install.py cpu
# 查看 reinvent 帮助
reinvent --help
# 安装 rdkit
conda install -c conda-forge rdkit
# 补充 NPU 依赖
pip install decorator
pip install attrs
pip install psutil
pip install torch_npu在项目源码目录中应用 NPU 适配补丁,修改 CUDA 相关代码为 NPU 设备调用:
cd ~/reinvent4/REINVENT4 #实际项目路径
git apply linkinvent_npu_patch_for_reinvent4.patchREINVENT 4 通过 python install.py cpu 安装后,实际运行时加载的是 conda 环境 site-packages 中的源码。因此,必须将补丁修改后的源码文件替换到 conda 安装路径中,否则修改不会生效。
# conda 默认安装路径(LinkInvent 模型目录)CONDA_LINKINVENT_PATH=~/miniconda3/envs/reinvent4/lib/python3.10/site-packages/reinvent/models/linkinvent/
# 源码补丁后的路径
SRC_LINKINVENT_PATH=~/reinvent4/REINVENT4/reinvent/models/linkinvent/
# 备份 conda 原始文件(可选但推荐)
cp -r $CONDA_LINKINVENT_PATH ${CONDA_LINKINVENT_PATH}_backup
# 将补丁修改后的源码文件复制到 conda 安装路径,覆盖原始文件
cp -f $SRC_LINKINVENT_PATH/*.py $CONDA_LINKINVENT_PATH/
# 验证替换结果ls -la $CONDA_LINKINVENT_PATH# 取消设备可见性限制
unset ASCEND_RT_VISIBLE_DEVICES
# 设置 CANN 环境变量(必须执行)
export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/cann-8.5.0
source $ASCEND_TOOLKIT_HOME/bin/setenv.bash
# 可选:内存优化(libtcmalloc.so 需单独安装)
export TASK_QUEUE_ENABLE=2
export LD_PRELOAD=$LD_PRELOAD:/root/miniconda3/lib/libtcmalloc.sopython3 -c "import torch; import torch_npu; print(torch.npu.is_available())"所有公开的 prior 模型可从 Zenodo 下载:
https://zenodo.org/records/15641297下载模型权重后,放置到项目目录下的 prior 文件夹中:
cd ~/reinvent4/REINVENT4
mkdir -p prior
# 将下载的权重文件放入 prior/ 目录~/reinvent4/
└── REINVENT4/ # REINVENT 4 官方源码
├── reinvent/ # 核心代码
│ ├── models/ # 模型定义
│ ├── rl/ # 强化学习模块
│ ├── tl/ # 迁移学习模块
│ └── scoring/ # 评分组件
├── prior/ # 预训练权重目录
│ └── *.model # prior 模型文件
├── install.py # 安装脚本
├── linkinvent_rnn_eva.py # 测试脚本
└── README.md # 项目说明测试用例 linkinvent_rnn_eva.py 内置了 LinkInvent RNN 模型评估流程,无需额外数据准备。
REINVENT 4 源码中使用了 PyTorch 的 CUDA 设备相关接口,需要将设备指定从 cuda 修改为 npu,使模型能够在 Ascend NPU 上运行。
| 原始代码 | 修改后代码 |
|---|---|
.cuda() | .to(device) |
device='cuda' | device='npu' |
torch.cuda.is_available() | hasattr(torch, "npu") and torch.npu.is_available() |
torch.device("cuda") | torch.device("npu") |
torch.device("cuda:0") | torch.device("npu:0") |
import torch_npu,注册 NPU 后端。--device npu 指定 NPU 设备,确保设备信息正确传递到模型加载和推理流程中。cd ~/reinvent4/REINVENT4
# 运行 LinkInvent RNN 评估测试
python linkinvent_rnn_eva.py --device npu --prior /home/reinvent/REINVENT4/prior/linkinvent.prior --prior /home/reinvent/REINVENT4/prior/linkinvent.prior| 参数 | 说明 | 默认值 |
|---|---|---|
--device | 设备类型 (npu / cpu / cuda) | cpu |
npu| 检查项 | 预期结果 |
|---|---|
| 权重加载设备 | npu |
| 运行状态 | 无报错,正常完成 |
| 输出结果 | 分子生成/评估结果正常输出 |
# 使用linkinvent rnn prior 模型进行分子采样(示例配置)
python linkinvent_rnn_eva.py --device npu --test sample --total-samples 10000 --batch-size 1000 --prior /home/reinvent/REINVENT4/prior/linkinvent.prior由于 REINVENT 4 是生成式分子设计工具,精度对齐主要关注以下方面:
| 验证维度 | 验证内容 | 验收标准 |
|---|---|---|
| 模型加载 | 权重加载设备 | 加载到 NPU,无精度损失 |
| 分子生成 | 生成分子合法性 | SMILES likehood与 CPU 一致 |
| 采样分布 | 生成分子的分布一致性 | 与 CPU 结果分布对齐 |
设备验证:运行 linkinvent_rnn_eva.py --device npu,确认权重加载设备为 npu,无报错。
CPU 基线对比:使用相同权重在 CPU 模式下运行,记录生成分子结果。
NPU 对比:使用相同权重在 NPU 模式下运行,记录生成分子结果。
结果对比:比较 CPU 与 NPU 的生成结果,确认:
npulinkinvent_rnn_eva.py --device npu 运行无报错| 问题 | 解决方案 |
|---|---|
import torch_npu 失败 | 确认已安装 torch_npu 包,并正确执行 CANN 环境变量配置 |
| NPU 设备不可用 | 检查 source $ASCEND_TOOLKIT_HOME/bin/setenv.bash 是否执行 |
| 内存不足 | 启用 TASK_QUEUE_ENABLE=2 和 LD_PRELOAD 内存优化 |
| openeye 安装失败 | 确认使用 aarch64 架构的 whl 包,或使用 conda 安装 |
| rdkit 未安装 | 执行 conda install -c conda-forge rdkit |
| 组件 | 版本 |
|---|---|
| Python | 3.10 |
| CANN | 8.5.0 |
| PyTorch | >= 2.0.0 (NPU 适配版) |
| torch_npu | 对应 CANN 版本 |
| rdkit | conda-forge 最新版 |
| openeye | 2025.2.3 |
| REINVENT | 4 |