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

MedKG迁移适配指导流程

1 模型概述

生物医学知识图谱(BKGs)整合了多样化数据集,阐明生物医学领域内复杂的关系。对这些图进行有效的链接预测可以揭示宝贵联系,如潜在的新药病关系。我们引入了一种新颖的多模态方法,将专门语言模型(LM)的嵌入与图对比学习(GCL)结合起来,增强实体内关系,同时采用知识图谱嵌入(KGE)模型捕捉实体间关系,实现链接预测。为解决现有BKG的局限性,我们提出了PrimeKG++,这是一个丰富的知识图谱,包含多模态数据,包括每种实体类型的生物序列和文本描述。通过将语义和关系信息统一表示,我们的方法展现了强大的泛化性,使得即使是未见节点也能做出准确的链接预测。PrimeKG++和DrugBank药物靶点相互作用数据集上的实验结果展示了我们方法在多种生物医学数据集中的有效性和稳健性。

2 硬件信息

2.1 NPU测试硬件环境

硬件名称配置信息
机器型号Atlas800T A3
CPU型号HUAWEI Kunpeng 920
数量4
AI加速芯片型号昇腾910A3
数量8
Device内存64G
主机内存类型DDR4
数量24
单条容量64GB
内存插槽数32
硬盘数量2
内部存储类型SSD
单硬盘容量3.2TB

3 软件信息

3.1 测试软件环境

软件分类软件对象版本备注
Ascend HDKAscend-A3-hdk-npu-driver*.run
Ascend-A3-hdk-npu-firmware*.run
昇腾驱动、固件
CANNAscend-cann-toolkit*.run
Ascend-cann-kernels-A3*.run
华为针对AI场景推出的异构计算架构
PyTorchtorchPyTorch框架
torch_nputorch_npu-*.whlPyTorch Ascend Adapter插件,使昇腾NPU适配PyTorch框架

4 NPU环境搭建与代码准备

4.1 准备推理资源

类型链接
代码仓下载https://github.com/HySonLab/BioMedKG
模型权重https://huggingface.co/tienda02/BioMedKG/tree/main
数据集https://huggingface.co/datasets/tienda02/BioMedKG

4.2 配置环境

1. 使用vllm-asecnd镜像

export IMAGE=quay.io/ascend/vllm-ascend:v0.13.0rc1
# 创建并启动容器
docker run --rm \
--name vllm-ascend \
--shm-size=1g \
--privileged \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-p 8000:8000 \
-it $IMAGE bash

2. 安装依赖

# 拉取代码仓
git clone https://github.com/HySonLab/BioMedKG
cd BioMedKG
# 安装依赖
pip install hydra-core
pip install lightning
pip install torch-geometric
pip install pygcl
pip install "dgl<2.0"
pip install torch-sparse
pip install torch-scatter

3. 拉取权重与数据

# 在BioMedKG路径下拉取
huggingface-cli download tienda02/BioMedKG --repo-type=dataset --local-dir ./data
huggingface-cli download tienda02/BioMedKG --repo-type=model --local-dir ./ckpt
# 下载成功后查询目录,有data和ckpt两个文件夹

4.3 代码修改

1. init.py文件修改

修改文件:/BioMedKG/biomedkg/init.py

修改内容:

添加如下内容

from . import data_module

__all__ = ["datamodule"]

2. 测评代码修改

修改文件: 修改test_dpi.py

修改内容:

在import torch后添加torch_npu一键迁移逻辑

添加:

import torch
import torch_npu
from torch_npu.contrib import transfer_to_npu

3. cuda代码修改

vim /usr/local/python3.11.13/lib/python3.11/site-packages/lightning/pytorch/accelerators/cuda.py

将device校验步骤注释掉

class CUDAAccelerator(Accelerator):
    """Accelerator for NVIDIA CUDA devices."""

    @override
    def setup_device(self, device: torch.device) -> None:
        """
        Raises:
            MisconfigurationException:
                If the selected device is not GPU.
        """
        if device.type != "cuda":
            raise MisconfigurationException(f"Device should be GPU, got {device} instead")
        # _check_cuda_matmul_precision(device)
        torch.cuda.set_device(device)

4. 测评脚本修改

修改文件:scripts/test_dpi.sh

#!/bin/bash

ENCODER="rgcn"                  # rgcn, rgat
DECODER="dismult"               # transe, dismult, complex
NODE_INIT_METHOD="gcl"       # gcl, lm, random
PRETRAINED_PATH="/BioMedKG/BioMedKG/ckpt/dpi/gcl_dgi_attention/best.ckpt"              # 修改为实际模型路径

# Set INIT_DIM based on NODE_INIT_METHOD
if [[ "$NODE_INIT_METHOD" == "random" || "$NODE_INIT_METHOD" == "lm" ]]; then
    INIT_DIM=768
else
    INIT_DIM=256
fi

FUSE_METHOD="none"              # attention, redaf, none (use if the node_init_method is lm)
# Load from gcl checkpoint
GCL_MODEL="ggd"                 # dgi, grace, ggd (use if the node_init_method is gcl)
GCL_FUSE_METHOD="attention"     # attention, redaf, none (use if the node_init_method is gcl)

EPOCHS=1
NEG_RATIO=10
BATCH_SIZE=8
DEVICES="[0]"
LEARNING_RATE=0.001

# Run the Python training script with specified parameters
python3 test_dpi.py \
    devices=$DEVICES \
    epochs=$EPOCHS \
    neg_ratio=$NEG_RATIO \
    gcl_model=$GCL_MODEL \
    gcl_fuse_method=$GCL_FUSE_METHOD \
    data.batch_size=$BATCH_SIZE \
    data.embed_dim=$INIT_DIM \
    data.node_init_method=$NODE_INIT_METHOD \
    model.in_dim=$INIT_DIM \
    model.learning_rate=$LEARNING_RATE \
    model.fuse_method=$FUSE_METHOD \
    model.encoder_name=$ENCODER \
    model.decoder_name=$DECODER \
    pretrained_path=$PRETRAINED_PATH    \
    debug=true

4.4 执行脚本

bash scripts/ test_dpi.sh