Metadata-Version: 2.4
Name: deepchem-ascend
Version: 1.0.0
Summary: Deep learning models for drug discovery,         quantum chemistry, and the life sciences. The ascend + torch version.
Home-page: https://gitcode.com/AI4Science/deepchem-ascend
Maintainer: skylark team
License: MIT
Project-URL: Documentation, https://deepchem.readthedocs.io/en/latest/
Project-URL: Source, https://gitcode.com/AI4Science/deepchem-ascend
Keywords: deepchem,chemistry,biology,materials-science,life-science,drug-discovery
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.10
Requires-Python: ~=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: joblib
Requires-Dist: numpy<2
Requires-Dist: pandas
Requires-Dist: scikit-learn
Requires-Dist: sympy
Requires-Dist: scipy>=1.10.1
Requires-Dist: rdkit
Provides-Extra: jax
Requires-Dist: jax==0.4.30; extra == "jax"
Requires-Dist: jaxlib==0.4.30; extra == "jax"
Requires-Dist: dm-haiku==0.0.13; extra == "jax"
Requires-Dist: optax; extra == "jax"
Provides-Extra: torch
Requires-Dist: torch==2.1.0; extra == "torch"
Requires-Dist: torch-npu==2.1.0; extra == "torch"
Requires-Dist: torchvision; extra == "torch"
Requires-Dist: pytorch-lightning; extra == "torch"
Requires-Dist: dgl<2.2.1; extra == "torch"
Requires-Dist: dgllife; extra == "torch"
Provides-Extra: tensorflow
Requires-Dist: tensorflow; extra == "tensorflow"
Requires-Dist: tensorflow_probability; extra == "tensorflow"
Requires-Dist: tensorflow_addons; python_version < "3.12" and extra == "tensorflow"
Provides-Extra: dqc
Requires-Dist: dqc; extra == "dqc"
Requires-Dist: xitorch; extra == "dqc"
Requires-Dist: torch==2.2.1; extra == "dqc"
Requires-Dist: pylibxc2; extra == "dqc"
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: maintainer
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# 1. 关于 deepchem-ascend

本项目基于开源[deepchem](https://github.com/deepchem/deepchem)，目标是让使用deepchem的模型能原生在昇腾上运行。当前受限于生态原因，deepchem社区暂时不接受对于ascend支持的代码修改合入，因此先在昇腾社区完成移植和独立版本发布，后续合入上游的deepchem代码仓。

所有开发工作将在develop分支以PR工作流形式运行，master分支仅用于和deepchem上游代码仓同步。

# 2. 准备运行环境

## 2.1 软件环境

| 组件       | 版本                    |
| ------------ | ------------------------- |
| Python     | 3.10.19                    |
| PyTorch    | 2.1.0                   |
| torch_npu | 2.1.0.post13 |
| CANN       | 8.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=deepchem-ascend
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二进制包，已基于适配代码重新编译成二进制包上传pypi

```
pip install deepchem-ascend==0.0.8
```
## 3.2 下载模型源码
```
git clone --branch develop https://gitcode.com/AI4Science/deepchem-ascend.git
```

## 3.3 分布式训练示例脚本

将以下代码保存在test_train.py
```
import os
import deepchem as dc
from deepchem.models.lightning.trainer import LightningTorchModel
import torch
rank = int(os.getenv("RANK", "0"))
world_size = int(os.getenv("WORLD_SIZE", "1"))
local_rank = int(os.getenv("LOCAL_RANK", "0"))
print(f"当前进程 RANK: {rank}, 全局进程数: {world_size}, 本地设备号: {local_rank}")
tasks, datasets, _ = dc.molnet.load_clintox()
_, valid_dataset, _ = datasets
model = dc.models.MultitaskClassifier(
     n_tasks=len(tasks),
     n_features=1024,
     layer_sizes=[1000],
     dropouts=0.2,
     learning_rate=0.0001,
     device="npu",
     batch_size=16
)
trainer = LightningTorchModel(
             model=model,
             batch_size=16,
             devices=world_size,
             strategy="ddp_npu", #当前策略仅支持DDP
             accelerator="npu",  #加速器支持"npu"
             log_every_n_steps=1,
             fast_dev_run=False)
trainer.fit(valid_dataset, nb_epoch=30, num_workers=0) #当前仅支持num_workers=0
```

## 3.4 多卡训练执行命令
```
#nproc_per_node可以指定几卡训练，以下命令使用2张NPU
torchrun --nproc_per_node=2 --master_port=29500 test_train.py
```

# 4. 模型适配详情

当前模型适配策略以可运行为主要目标，精度和性能会在适配后按需进行调优。

|模型|用途|框架适配|单卡|多卡|精度|性能|适配方法|
|-|-|-|-|-|-|-|-|
|Unet|用于图像分割的UNet模型，支持分类及回归任务|完成|已验证|未验证|未验证|未验证|[UnetModel](https://ai.gitcode.com/Ascend-SACT/UnetModel)|
|ChemBERTa|Chemberta是一种基于SMILES字符串学习的Transformer风格模型。该模型架构基于RoBERTa架构设计，既可用于预训练生成嵌入表示，也可在下游应用中通过微调进行迁移学习。|完成|已验证|未验证|未验证|未验证|[ChemBERTa](https://ai.gitcode.com/Ascend-SACT/Chemberta)|
|ChemCeption|利用卷积神经网络（CNN）的表示能力来预测分子性质。|完成|已验证|未验证|未验证|未验证|[ChemCeption](https://ai.gitcode.com/Ascend-SACT/ChemCeption)|
|TextCNNModel|基于SMILES字符串的卷积神经网络（CNN）用于分子性质预测。|完成|已验证|未验证|未验证|未验证|[TextCNNModel](https://ai.gitcode.com/Ascend-SACT/TextCNNModel)|
|DTNNModel|基于SMILES字符串的卷积神经网络（CNN）用于分子性质预测。|完成|已验证|未验证|未验证|未验证|[DTNN](https://ai.gitcode.com/Ascend-SACT/DTNN)|
|MATModel|基于 Transformer 注意力机制的分子性质预测模型。|完成|已验证|未验证|未验证|未验证|[MATModel](https://ai.gitcode.com/Ascend-SACT/MATModel)|
|DMPNNModel|基于消息传递神经网络（MPNN）的分子性质预测模型。|完成|已验证|未验证|未验证|未验证|[DMPNN](https://ai.gitcode.com/Ascend-SACT/DMPNN)|
|GNNModular|基于模块化、可组合的图神经网络（GNN）建模框架可灵活构建适用于分子性质预测模型。|完成|已验证|未验证|未验证|未验证|[GNNModular](gitcode.com/Ascend-SACT/GNNModular)|
|progressiveMultitaskModel|渐进式多任务学习模型，通过分阶段训练共享主干与任务特定子网络，有效缓解任务冲突，提升分子多性质预测性能。|完成|已验证|未验证|未验证|未验证|[progressiveMultitask](https://ai.gitcode.com/Ascend-SACT/Progressive-Multitask)|
|Grover|一种面向分子图的自监督预训练模型。它将消息传递机制（Message Passing）与Transformer 架构深度融合，通过在大规模无标签分子数据上执行结构感知的预训练任务，学习通用且富含化学语义的分子表示。|完成|已验证|未验证|未验证|未验证|[Grover](https://ai.gitcode.com/Ascend-SACT/GROVER)|
|GANModel|一种由生成器和判别器组成的生成模型，两者通过对抗训练共同进化。|完成|已验证|未验证|未验证|未验证|[GANModel](https://ai.gitcode.com/Ascend-SACT/GAN)|
|WGANModel|通过引入Wasserstein距离和权重裁剪机制改进的生成对抗网络。|完成|已验证|未验证|未验证|未验证|[WGANModel](https://ai.gitcode.com/Ascend-SACT/WGANModel)|
|MolGANModel|一种结合了对抗训练和强化学习的图生成模型，能够直接生成有效的分子图结构，并可根据特定的化学性质目标进行定向优化。|完成|已验证|未验证|未验证|未验证|[MolGANModel](https://ai.gitcode.com/Ascend-SACT/MolGanModel)|
|MoLFormer|一种利用线性注意力和旋转位置编码技术，在SMILES 序列上通过掩码语言建模预训练的大规模 Transformer 模型。|完成|已验证|未验证|未验证|未验证|[MoLFormer](https://ai.gitcode.com/Ascend-SACT/MolFormer)|
|ProtBERT|基于BERT架构，当前实现仅支持掩码语言模型（MLM）预训练和分类模式。|完成|已验证|未验证|未验证|未验证|[ProtBERT](https://ai.gitcode.com/Ascend-SACT/ProtBert)|
|InfoGraph|一个用于无监督图级别表示学习的模型，通过互信息最大化（InfoMax）来学习分子图的嵌入表示。|完成|已验证|未验证|未验证|未验证|[InfoGraph](https://ai.gitcode.com/Ascend-SACT/InfoGraph)|
|AtomicConv|是原子卷积神经网络，用于预测蛋白-配体结合亲和力。|完成|已验证|未验证|未验证|未验证|[AtomicConv](https://ai.gitcode.com/Ascend-SACT/AtomicConv)|
|PNAModel|图神经网络模型，用于分子性质预测任务。|完成|已验证|未验证|未验证|未验证|[PNAModel](https://ai.gitcode.com/Ascend-SACT/PNAModel)|
|WeaveModel|实现了 Google 风格的 Weave 图卷积网络，通过显式建模原子对（pair）特征来捕捉化学键相互作用。|完成|已验证|未验证|未验证|未验证|[WeaveModel](https://ai.gitcode.com/Ascend-SACT/WeaveModel)|
|MXMNetModel|分子力学驱动的多层图图神经网络是一种基于分子力学驱动的图神经网络。|完成|已验证|未验证|未验证|未验证|[MXMNetModel](https://ai.gitcode.com/Ascend-SACT/MXMNetModel)|
|SeqToSeqModel|该模型可将变长输入序列转换为变长输出序列，支持作为自编码器（autoencoder）和变分自编码器（VAE）使用。|完成|已验证|未验证|未验证|未验证|[SeqToSeqModel](https://ai.gitcode.com/Ascend-SACT/SeqToSeqModel)|
|CGCNNModel|晶体图卷积神经网络是一种预测材料属性的深度学习模型，可高效替代高计算成本的传统方法（如 DFT）。|完成|已验证|未验证|未验证|未验证|[CGCNNModel](https://ai.gitcode.com/Ascend-SACT/CGCNNModel)|
|MEGNetModel|材料图网络是一种通用的图神经网络框架，用于分子和晶体的属性预测。|完成|已验证|未验证|未验证|未验证|[MEGNetModel](https://ai.gitcode.com/Ascend-SACT/MEGNetModel)|
|LCNNModel|晶格卷积神经网络旨在替代高昂的 DFT 计算，自动预测分子吸附构型的形成能。|完成|已验证|未验证|未验证|未验证|[LCNNModel](https://ai.gitcode.com/Ascend-SACT/LCNNModel)|
|AttentiveFPModel|基于注意力机制的指纹预测模型通过图注意力网络动态学习分子中原子间的交互关系，自适应地聚合邻居信息以生成分子级表征。|完成|已验证|未验证|未验证|未验证|[AttentiveFPModel](https://ai.gitcode.com/Ascend-SACT/AttentiveFPModel)|
|GATModel|图注意力网络（Graph Attention Network）为核心，通过掩蔽自注意力机制动态计算邻居节点权重，从而灵活聚合局部特征。|完成|已验证|未验证|未验证|未验证|[GATModel](https://ai.gitcode.com/Ascend-SACT/GATModel)|
|MPNNModel|消息传递神经网络用于分子图的图性质预测。|完成|已验证|未验证|未验证|未验证|[MPNNModel](https://ai.gitcode.com/Ascend-SACT/MPNNModel)|
|PagtnModel|路径增强图Transformer网络是一种基于路径增强的图Transformer网络，用于分子性质预测。|完成|已验证|未验证|未验证|未验证|[PagtnModel](https://ai.gitcode.com/Ascend-SACT/PagtnModel)|
|Smiles2Vec|模型通过学习 SMILES 字符串的神经网络表示，用于分子性质预测。|完成|已验证|未验证|未验证|未验证|[Smiles2Vec](https://ai.gitcode.com/Ascend-SACT/Smiles2Vec)|
|LNNModel|拉格朗日神经网络是一种物理驱动的深度学习模型。|完成|已验证|未验证|未验证|未验证|[LNNModel](https://ai.gitcode.com/Ascend-SACT/LNNModel-A2)|
|FNOModel|傅里叶神经算子是一种用于学习函数空间映射的神经网络架构。|完成|已验证|未验证|未验证|未验证|[FNOModel](https://ai.gitcode.com/Ascend-SACT/FNOModel)|
|PINNModel|物理信息神经网络是一种将物理定律（偏微分方程）嵌入神经网络训练过程的深度学习方法。|完成|已验证|未验证|未验证|未验证|[PINNModel](https://ai.gitcode.com/Ascend-SACT/PINNModel)|
|NormalizingFlow|基于可逆变换的显式密度概率生成模型。|完成|已验证|未验证|未验证|未验证|[NormalizingFlow](https://ai.gitcode.com/Ascend-SACT/Normalizing_Flow_Models)|
|FerminetModel|费米子神经网络模型是一种深度学习架构，用于从第一性原理出发对多电子系统的量子态和波函数进行建模。|完成|已验证|未验证|未验证|未验证|[FerminetModel](https://ai.gitcode.com/Ascend-SACT/FerminetModel)|
|InfoMax3DModular|基于 3D 图神经网络（3D GNN），通过三维空间信息增强分子表征学习。|完成|已验证|未验证|未验证|未验证|[InfoMax3DModular](https://ai.gitcode.com/Ascend-SACT/InfoMax3DModular)|

后续我们会持续增加适配模型以及对应的样例notebook/代码。
