第2章:环境搭建——那些年我踩过的坑

环境搭建,说白了就是把你电脑武装成能跑图神经网络的分析机。很多人觉得这步简单,直接 pip install 完事。嗯,等你装完发现版本冲突,那就晚了。

核心目标:完成 PyTorch、PyG(PyTorch Geometric)、Neo4j 驱动及其 Python 客户端的安装与基础配置。

2.1 基石:Python 环境与 PyTorch

我个人习惯用 Anaconda 或 Miniconda 管理 Python 环境。为什么不直接用系统 Python?隔离性好,省心。你想想看,一个药物图谱项目依赖的包版本,和另一个 NLP 项目打架,多烦。

先创建一个干净的虚拟环境,指定 Python 3.9 或 3.10。我个人推荐 3.9,兼容性更广。

conda create -n drug_kge python=3.9 -y
conda activate drug_kge

安装 PyTorch。这一步是重中之重。PyG 的版本完全绑定 PyTorch 的版本,配错了后面全是泪。

去 PyTorch 官网,找到你 CUDA 版本对应的命令。如果没有 GPU,也可以装 CPU 版本,但训练会慢一些。

# CUDA 11.8 版本示例
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

# CPU 版本示例
pip install torch torchvision torchaudio
避坑指南:检查 CUDA 版本用 nvidia-smi。我个人建议不要装最新的 PyTorch,装次新的稳定版,因为 PyG 的适配需要时间。

2.2 核心:安装 PyG(PyTorch Geometric)

PyG 是图神经网络的主力军。它的安装依赖三个基础库:torch_scatter、torch_sparse、torch_cluster。这些是 C++ 扩展,必须和你的 PyTorch 版本对齐。

我最省心的方式是通过 PyG 的官方 wheel 索引安装。这样不用自己编译,省去不少麻烦。

# 先安装 PyG 核心
pip install torch_geometric

# 再安装扩展库,指定你的 PyTorch 版本和 CUDA 版本
# 以 CUDA 11.8,PyTorch 2.1.0 为例
pip install pyg_lib torch_scatter torch_sparse torch_cluster torch_spline_conv -f https://data.pyg.org/whl/torch-2.1.0+cu118.html

安装完怎么验证?写个小脚本跑一下。

import torch
from torch_geometric.data import Data

print("PyTorch 版本:", torch.__version__)

# 构造最简单的图:两个节点,一条边
edge_index = torch.tensor([[0, 1], [1, 0]], dtype=torch.long)
data = Data(edge_index=edge_index)

print("PyG 安装成功,图数据对象:", data)

能输出类似 data(edge_index=[2, 2]) 的结果,就说明 PyG 装好了。

注意:不要用 conda 安装 PyG 的扩展库!我踩过这个坑,conda 里的版本经常滞后,会导致 torch_sparse 编译报错。老老实实用 pip 加官方索引。

2.3 辅助:Neo4j 数据库安装

Neo4j 负责存我们的药物知识图谱。我建议下载桌面版(Neo4j Desktop),图形化管理更方便。当然,社区版也够用。

去 Neo4j 官网下载 Desktop,安装后创建新项目,在项目里添加数据库实例。记住设置密码,别用默认的 neo4j,太危险。

如果你喜欢命令行,也可以直接跑 Docker 镜像。

docker run \
    --name drug_neo4j \
    -p 7474:7474 -p 7687:7687 \
    -e NEO4J_AUTH=neo4j/yourpassword \
    -d neo4j:5-community

验证方法:浏览器打开 http://localhost:7474,输入用户名 neo4j,密码 yourpassword,看到 Neo4j Browser 界面就成功了。

2.4 桥梁:Python 连接 Neo4j

Python 这边需要安装 Neo4j 的官方驱动。我用的是 neo4j 包,支持同步和异步。

pip install neo4j

连接测试代码:

from neo4j import GraphDatabase

uri = "bolt://localhost:7687"
username = "neo4j"
password = "yourpassword"

driver = GraphDatabase.driver(uri, auth=(username, password))

def test_connection(tx):
    result = tx.run("RETURN 'Neo4j 连接成功' AS message")
    for record in result:
        print(record["message"])

with driver.session() as session:
    session.execute_read(test_connection)

driver.close()

能打印出「Neo4j 连接成功」,整套环境就算跑通了。

经验之谈:不要在生产环境直连 root 用户。课程为了方便,我们直接用 neo4j 用户。真正做项目时,要给应用单独建一个只读或写入权限的账号。

2.5 核心逻辑一张图

下面的图展示了我们搭建的这套架构。数据和计算引擎分两层,PyTorch 提供张量计算基础,PyG 在上面建图神经网络模型。右边 Neo4j 负责存和查知识图谱,Python 驱动做数据搬运。

药物知识图谱特征提取环境架构 PyTorch 张量引擎 基础运算、自动求导、GPU 加速 Neo4j 图数据库 药物、靶点、疾病三元组存储 PyG 图神经网络框架 GCN、GAT、GIN 模型定义与训练 neo4j Python 驱动 Cypher 查询、数据拉取与写入 数据流转 图特征提取与表示学习 节点特征、边特征、图结构、子图采样 药物属性预测 / 靶点相互作用预测

2.6 环境检查清单

搭建完别急着跑。我建议做一次完整的环境健康检查,确认所有组件都能正常协作。

检查项 检查方法 正常结果
Python 版本 python --version 3.9.x 或 3.10.x
CUDA 可用性 python -c "import torch; print(torch.cuda.is_available())" True(有 GPU)或 False
PyG 安装 python -c "import torch_geometric; print(torch_geometric.__version__)" 版本号,如 2.4.0
Neo4j 状态 浏览器访问 http://localhost:7474 看到 Neo4j Browser 登录页
Python 连接驱动 运行 2.4 节连接测试脚本 打印「Neo4j 连接成功」
我曾经遇到一个问题:neo4j 驱动版本和 Neo4j 数据库版本不匹配。驱动太旧连不上 5.x 的数据库,报了握手失败的错误。解决办法是升级驱动到跟数据库大版本一致。记住,5.x 数据库用 5.x 驱动。

嗯,到这里整套开发环境就搭好了。相比其他框架,PyG 的最大优势是同构图和异构图都能处理,我们后面会用 Neo4j 的知识图谱直接喂给 PyG 模型做特征提取。手头的工具已经ready,接下来就是真刀真枪地干了。