第2章:环境搭建——那些年我踩过的坑
环境搭建,说白了就是把你电脑武装成能跑图神经网络的分析机。很多人觉得这步简单,直接 pip install 完事。嗯,等你装完发现版本冲突,那就晚了。
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
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 装好了。
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 连接成功」,整套环境就算跑通了。
2.5 核心逻辑一张图
下面的图展示了我们搭建的这套架构。数据和计算引擎分两层,PyTorch 提供张量计算基础,PyG 在上面建图神经网络模型。右边 Neo4j 负责存和查知识图谱,Python 驱动做数据搬运。
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 连接成功」 |
嗯,到这里整套开发环境就搭好了。相比其他框架,PyG 的最大优势是同构图和异构图都能处理,我们后面会用 Neo4j 的知识图谱直接喂给 PyG 模型做特征提取。手头的工具已经ready,接下来就是真刀真枪地干了。