生物医学知识图谱(BKGs)整合了多样化数据集,阐明生物医学领域内复杂的关系。对这些图进行有效的链接预测可以揭示宝贵联系,如潜在的新药病关系。我们引入了一种新颖的多模态方法,将专门语言模型(LM)的嵌入与图对比学习(GCL)结合起来,增强实体内关系,同时采用知识图谱嵌入(KGE)模型捕捉实体间关系,实现链接预测。为解决现有BKG的局限性,我们提出了PrimeKG++,这是一个丰富的知识图谱,包含多模态数据,包括每种实体类型的生物序列和文本描述。通过将语义和关系信息统一表示,我们的方法展现了强大的泛化性,使得即使是未见节点也能做出准确的链接预测。PrimeKG++和DrugBank药物靶点相互作用数据集上的实验结果展示了我们方法在多种生物医学数据集中的有效性和稳健性。| 硬件名称 | 配置信息 |
|---|---|
| 机器型号 | Atlas800T A3 |
| CPU型号 | HUAWEI Kunpeng 920 |
| 数量 | 4 |
| AI加速芯片型号 | 昇腾910A3 |
| 数量 | 8 |
| Device内存 | 64G |
| 主机内存类型 | DDR4 |
| 数量 | 24 |
| 单条容量 | 64GB |
| 内存插槽数 | 32 |
| 硬盘数量 | 2 |
| 内部存储类型 | SSD |
| 单硬盘容量 | 3.2TB |
| 软件分类 | 软件对象 | 版本 | 备注 |
|---|---|---|---|
| Ascend HDK | Ascend-A3-hdk-npu-driver*.run Ascend-A3-hdk-npu-firmware*.run | 昇腾驱动、固件 | |
| CANN | Ascend-cann-toolkit*.run Ascend-cann-kernels-A3*.run | 华为针对AI场景推出的异构计算架构 | |
| PyTorch | torch | PyTorch框架 | |
| torch_npu | torch_npu-*.whl | PyTorch Ascend Adapter插件,使昇腾NPU适配PyTorch框架 |
| 类型 | 链接 |
|---|---|
| 代码仓下载 | https://github.com/HySonLab/BioMedKG |
| 模型权重 | https://huggingface.co/tienda02/BioMedKG/tree/main |
| 数据集 | https://huggingface.co/datasets/tienda02/BioMedKG |
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# 拉取代码仓
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# 在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两个文件夹修改文件:/BioMedKG/biomedkg/init.py
修改内容:
添加如下内容
from . import data_module
__all__ = ["datamodule"]修改文件: 修改test_dpi.py
修改内容:
在import torch后添加torch_npu一键迁移逻辑
添加:
import torch
import torch_npu
from torch_npu.contrib import transfer_to_npuvim /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)
修改文件: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=truebash scripts/ test_dpi.sh