Ascend-SACT/GROVER
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

GROVER模型迁移适配指导

1. 模型概述

GROVER 是一个面向分子科学的自监督学习框架。它创造性地将消息传递网络 (MPN)嵌入到Transforme架构中,通过在大规模无标签分子图上执行多任务自监督预训练(节点、边、图级别的任务),学习到了深层的分子结构和语义表示。这使得它在各种下游药物发现任务(如毒性预测、性质回归)中,仅需少量标注数据微调即可超越传统的监督学习模型。

2. 准备运行环境

2.1 软件环境

组件版本
Python3.10.19
PyTorch2.1.0
torch_npu2.1.0.post13
CANN8.1.RC1

2.2 硬件环境

设备型号NPU 配置
Atlas 800T A2单卡

2.3 准备镜像

镜像环境镜像地址
公网swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-euler_2.10.11-aarch64-snt9b-20250603154214-4e60e43

2.4 启动镜像

IMAGE_ID=swr.cn-southwest-2.myhuaweicloud.com/atelier/pytorch_2_1_ascend:pytorch_2.1.0-cann_8.1.rc1-py_3.10-euler_2.10.11-aarch64-snt9b-20250603154214-4e60e43
CONTAINER_NAME=grover
docker run -u root --privileged \
 --name ${CONTAINER_NAME} \
 --device /dev/davinci0 \
 --device /dev/davinci_manager \
 --device /dev/devmm_svm \
 --device /dev/hisi_hdc \
 -v /usr/local/dcmi:/usr/local/dcmi \
 -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
 -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
 -v /etc/ascend_install.info:/etc/ascend_install.info \
 -itd ${IMAGE_ID} /bin/bash

3 运行指导

3.1 创建环境

docker exec -it ${CONTAINER_NAME} bash
conda create -n grover --clone PyTorch-2.1.0
conda activate grover

3.2 迁移适配

直接安装deepchem-ascend二进制包,已基于适配代码重新编译成二进制包上传pypi

pip install deepchem-ascend==0.0.1

3.3 测试示例

import os
import numpy as np
import deepchem as dc
import tempfile
from deepchem.models.torch_models.grover import GroverModel
from deepchem.feat.vocabulary_builders import GroverAtomVocabularyBuilder, GroverBondVocabularyBuilder
import pandas as pd

tmpdir = tempfile.mkdtemp()
df = pd.DataFrame({'smiles': ['CC', 'CCC'], 'preds': [0, 0]})

filepath = os.path.join(tmpdir, 'example.csv')
df.to_csv(filepath, index=False)

dataset_path = os.path.join(filepath)
loader = dc.data.CSVLoader(tasks=['preds'],
                           featurizer=dc.feat.DummyFeaturizer(),
                           feature_field=['smiles'])
dataset = loader.create_dataset(dataset_path)

av = GroverAtomVocabularyBuilder()
av.build(dataset)

bv = GroverBondVocabularyBuilder()
bv.build(dataset)

fg = dc.feat.CircularFingerprint()
loader2 = dc.data.CSVLoader(
        tasks=['preds'],
        featurizer=dc.feat.GroverFeaturizer(features_generator=fg),
        feature_field='smiles')
graph_data = loader2.create_dataset(dataset_path)

# acting - tests
model = GroverModel(node_fdim=151,
                    edge_fdim=165,
                    atom_vocab=av,
                    bond_vocab=bv,
                    features_dim=2048,
                    hidden_size=128,
                    functional_group_size=85,
                    mode='regression',
                    task='finetuning',
                    model_dir='gm_ft')

loss = model.fit(graph_data, nb_epoch=200)
scores = model.evaluate(
        graph_data,
        metrics=[dc.metrics.Metric(dc.metrics.mean_squared_error, np.mean)])

print(f"模型所在设备: {model.device}")
print(f"mean-mean_squared_error: {scores['mean-mean_squared_error']}")

3.4 运行测试代码

复制上述测试代码保存到test_grover.py

pytest test_grover.py

测试结果:

image