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

ChemCeption模型迁移适配指导

1. 模型概述

ChemCeption模型利用卷积神经网络的表征能力来预测分子性质。

该模型基于Goh等人在论文《Chemception: A Deep Neural Network with Minimal Chemistry Knowledge Matches the Performance of Expert-developed QSAR/QSPR Models》(https://arxiv.org/pdf/1706.06689.pdf)中的描述。作者采用基于图像的分子表示方法,通过像素编码不同的原子和化学键属性。关于图像表示技术的更多细节可参阅https://arxiv.org/abs/1710.02238

模型架构包含一个Stem层,用于降低图像分辨率以适配后续网络层。Stem层之后连接一系列Inception-Resnet模块与一个Reduction层。Inception-Resnet模块中的网络层以多分辨率方式处理图像张量,并采用ResNet风格连接,融合不同分辨率的特征。Reduction层通过最大池化和步长为2的卷积操作缩减图像的空间维度。关于这些网络层的详细说明可参考前述ChemCeption论文。最后一个Reduction层的输出经过全局平均池化处理后,由全连接层将特征映射至下游输出结果。

在ChemCeption论文中,作者通过0至180度图像旋转实现实时数据增强。在模型训练阶段,可通过将augment参数设为True来启用该功能

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=chemcption
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 安装已完成迁移的deepchem-ascend

docker exec -it {container_name} bash

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

pip install deepchem-ascend==0.0.1

3.2 运行测试代码

当前chemception并未直接继承deepchem的TorchModel,因此需要手动将模型和tensor转到npu上去运行,相关测试代码如下:

import numpy as np
import torch
import torch_npu
import deepchem as dc
from deepchem.models.torch_models.ChemCeption import ChemCeption
base_filters = 16
img_size = 80
n_tasks = 10
n_classes = 2
model = ChemCeption(img_spec="std", img_size=img_size, base_filters=base_filters, inception_blocks={"A": 3, "B": 3, "C": 3}, n_tasks=n_tasks, n_classes=n_classes, augment=False, mode="classification")
model.to("npu")
smiles = ['CC(=O)OC1=CC=CC=C1C(=O)O']
featurizer = dc.feat.SmilesToImage(img_size=80, img_spec='std')
images = featurizer.featurize(smiles)
image = torch.tensor(images, dtype=torch.float32)
image = image.to("npu")
image = image.permute(0, 3, 1, 2)  # Convert to NCHW format
output = model(image)
device = next(model.parameters()).device
print(f"模型所在设备: {device}")
print(output.shape)
torch.Size([1, 10, 2])

测试结果: image