3. PyTorch与PyTorch Geometric环境搭建

3.1 为什么先搭环境?

做图神经网络,环境配置是第一道坎。我见过不少同学在Colab上跑通了教程,回到本地就是报错一堆。说白了,PyG(PyTorch Geometric)的安装路径和PyTorch版本、CUDA版本深度绑定。

我个人习惯是先装好PyTorch,再根据PyTorch版本选PyG。很多人一上来就pip install torch-geometric,结果依赖炸了。嗯,这里要注意顺序。

3.2 安装PyTorch

打开PyTorch官网,选你的系统、包管理器、CUDA版本。拿我常用的CUDA 11.8举例:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

验证一下:

python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"

输出类似1.13.1 + True就对了。我曾经踩过坑——CUDA驱动和PyTorch CUDA版本不一致,导致PyG里的稀疏矩阵运算崩溃。所以建议先跑个简单的tensor加法到GPU上确认。

⚠️ CUDA版本冲突:PyTorch编译时用的CUDA运行时版本,必须和显卡驱动支持的CUDA版本兼容。查看驱动支持的最高CUDA版本可以用:nvidia-smi。

3.3 安装PyTorch Geometric

PyG的核心包有四个:

包名作用依赖关系
torch-scatter稀疏数据的scatter操作必装
torch-sparse稀疏矩阵运算必装
torch-cluster图聚类算法可选,但推荐
torch-geometric主库依赖上面三个

安装命令(以CUDA 11.8、PyTorch 1.13.0为例):

pip install torch-scatter torch-sparse torch-cluster torch-geometric -f https://data.pyg.org/whl/torch-1.13.0+cu118.html

注意:那个-f后面的链接必须对应你的PyTorch版本和CUDA版本。我曾经因为版本号写错了,装成了CPU版本,跑图卷积的时候慢得离谱。

全部装好后,验证:

python -c "import torch_geometric; print(torch_geometric.__version__)"

能打印版本号就成功了。

3.4 常用库简介

除了PyG,做图神经网络还会用到几个辅助库:

  • NetworkX:纯Python的图数据结构,可视化方便,但不支持GPU,小图调试用。
  • PyTorch:张量计算和自动求导,PyG的数据结构都建立在torch.Tensor之上。
  • Matplotlib / Plotly:画图,用于可视化图和训练曲线。
  • scikit-learn:评估指标、数据划分、PCA降维等。

我个人习惯是在一个虚拟环境里全装好,避免版本打架。

pip install networkx matplotlib scikit-learn

3.5 第一个图数据加载与可视化

我们来动手加载一个经典图数据集——Cora。它包含2708篇论文,5429条引用关系,每篇论文有1433维特征向量,分7类。

代码示例:

from torch_geometric.datasets import Planetoid
import matplotlib.pyplot as plt
import networkx as nx
from torch_geometric.utils import to_networkx

# 加载Cora数据集
dataset = Planetoid(root='./data/Cora', name='Cora')
data = dataset[0]

print(f'节点数: {data.num_nodes}')
print(f'边数: {data.num_edges}')
print(f'特征维度: {data.num_node_features}')
print(f'类别数: {dataset.num_classes}')

# 转成NetworkX图方便可视化
G = to_networkx(data, to_undirected=True)
plt.figure(figsize=(10, 10))
nx.draw_spring(G, node_size=10, node_color=data.y.tolist(), cmap='tab10', alpha=0.8)
plt.title('Cora 图结构可视化')
plt.show()

运行后你会看到一张论文引用关系图,颜色代表不同类别。我第一次跑出来的时候,感觉就是一团乱麻——但仔细观察,能发现同类论文倾向于聚在一起。这就是图结构中的同质性(homophily)。

💡 小技巧:可视化时如果图太大,可以只随机取500个节点和它们的边,画出来更清晰。nx.draw_spring的布局算法比较慢,大图建议用nx.draw_kamada_kawai。

3.6 理解PyG的数据结构

每个PyG的图数据对象是一个torch_geometric.data.Data实例,主要字段:

字段类型含义
xTensor [N, F]节点特征矩阵
edge_indexLongTensor [2, E]边索引,第一行源节点、第二行目标节点
yTensor [N] 或 [N, C]节点标签(分类)或图标签
edge_attrTensor [E, D]边的特征(可选)
train_mask / val_mask / test_maskBoolTensor [N]训练/验证/测试集划分

你看,PyG把图存储为稀疏格式,edge_index是COO格式。我刚开始用的时候,总想把它转成邻接矩阵,后来发现COO在GPU上效率更高,尤其在消息传递里按边遍历。

3.7 本章核心流程概览

下面这张图总结了从零搭建环境到第一个图数据集加载的完整链路:

图神经网络环境搭建与第一个图数据流程 安装PyTorch + CUDA 安装PyG系列包 安装NetworkX等辅助库 加载Cora数据集 检查Data对象字段 NetworkX可视化 验证:torch.cuda.is_available() ✅ 第一个图数据成功加载

你看,整个流程不复杂。关键点是版本匹配和安装顺序。我曾经因为先装了PyG再装PyTorch,导致动态链接库找不到,折腾了两小时。所以记住:

  • 先装PyTorch → 再装PyG组件 → 最后辅助库
  • 每个步骤都验证一下
  • CUDA版本对不上就老老实实用CPU版本先学

3.8 避坑小结

我自己遇到过的几个坑,你碰到了可以优先排查:

  • PyG安装时提示“No matching distribution”——去看PyG官网的whl列表,确认你的PyTorch版本在支持列表里。
  • 运行图卷积时报错“CUDA error: no kernel image available”——通常是PyTorch和PyG的CUDA编译版本不一致,建议重装两者并保持对齐。
  • 可视化时图太大导致matplotlib卡死——减少节点数,或者用nx.draw_spring之前先提取子图。

环境搭好后,你就可以放心地折腾各种图神经网络模型了。其实,环境配置本身也是一种能力——能让你更清楚框架的底层依赖关系。下次换版本的时候,心里就有数了。