当前最流行和广泛使用的 GNN 库 PyG(PyTorch Geometric)现在出 2.0 版本了,新版本提供了全面的异构图支持、GraphGam 以及很多其他特性,这一系列改进,为使用者带来了更好的用户体验。
PyTorch Geometric(PyG)是一个构建于 PyTorch 之上的库,用来为一系列与结构化数据相关的应用编写和训练图神经网络(GNN)。PyG 对机器学习研究者以及机器学习工具包的首次使用者都很友好。
就其特征和功能而言,PyG 具有易用和统一的 API,用户花费更少的时间在实现和运行图神经网络的底层机制上,只需要 10 至 20 行代码就可以训练自定义 GNN 模型。PyG 涵盖了大量的 SOTA GNN 架构以及训练和可扩展流程,并且易于扩展以匹配用户自己的特定用例或进行自己的 GNN 研究。
此外,PyG 中的全新 GraphGym 使得用户可以轻松地复现 GNN 实验,执行和分析数千个 GNN 实验,并将自定义模块嵌入到 GNN 学习 pipeline 中。
近日,PyG 核心领导者(Core lead)Matthias Fey 宣布 PyG 2.0 版本来了!新版本提供了全面的异构图支持、GraphGam 以及很多其他特性。
PyG 2.0 详情地址:https://github.com/pyg-team/pytorch_geometric/releases/tag/2.0.0
PyG 2.0 新特性
PyG 2.0 是一个新的版本,提供了复杂的异构图支持、GraphGym 集成以及其他新特性。
PyG 2.0 中提供了完全的异构图支持。异构图支持包括数据存储层的完整重写(同时保持向后兼容性)、异构图转换、通过邻采样的关系型数据加载例程,以及一整套异构 GNN 模型 / 示例。
突出亮点
异构图存储:异构图现在可以存储在它们自己的专用 data.HeteroData 类中。
- from torch_geometric.data import HeteroData
- data = HeteroData()
- # Create two node types "paper" and "author" holding a single feature matrix:
- data['paper'].x = torch.randn(num_papers, num_paper_features)
- data['author'].x = torch.randn(num_authors, num_authors_features)
- # Create an edge type ("paper", "written_by", "author") holding its graph connectivity:
- data['paper', 'written_by', 'author'].edge_index = ... # [2, num_edges]
异构 Mini-Batch 加载:异构图可以分别通过 loader.DataLoader 和 loader.NextorLoader 对许多小的、单个的巨大图进行转化,转换成 mini-batches。这些 loaders 现在可以处理同构图和异构图:
- from torch_geometric.loader import DataLoader
- loader = DataLoader(heterogeneous_graph_dataset, batch_size=32, shuffle=True)
- from torch_geometric.loader import NeighborLoader
- loader = NeighborLoader(heterogeneous_graph, num_neighbors=[30, 30], batch_size=128,
- input_nodes=('paper', data['paper'].train_mask), shuffle=True)
异构图神经网络:异构 GNN 现在可以通过 nn.to_hetero、nn.to_hetero_with_bases 从同构 GNN 轻松创建。这些进程采用现有的 GNN 模型并复制其消息功能,以考虑不同的节点和边缘类型:
- from torch_geometric.nn import SAGEConv, to_hetero
- class GNN(torch.nn.Module):
- def __init__(hidden_channels, out_channels):
- super().__init__()
- self.conv1 = SAGEConv((-1, -1), hidden_channels)
- self.conv2 = SAGEConv((-1, -1), out_channels)
- def forward(self, x, edge_index):
- x = self.conv1(x, edge_index).relu()
- x = self.conv2(x, edge_index)
- return x
- model = GNN(hidden_channels=64, out_channels=dataset.num_classes)
- model = to_hetero(model, data.metadata(), aggr='sum')
使用 GraphGym 管理实验
PyG 2.0 现在通过 torch_geometric.graphgym 正式支持 GraphGym。总的来说,GraphGym 是一个平台,用于通过高度模块化的 pipeline 从配置文件中设计和评估图神经网络:
- GraphGym 是开始学习标准化 GNN 实现和评估的最佳平台;
- GraphGym 提供了一个简单的接口来并行尝试数千个 GNN 架构,以找到适合特定任务的最佳设计;
- GraphGym 可轻松进行超参数搜索并可视化哪些设计选择更好。
重大改变
datasets.AMiner 数据集现在返回 data.HeteroData 对象;transforms.AddTrainValTestMask 已被替换为 transforms.RandomNodeSplit;由于 data.Data 的存储布局发生了显着变化以支持异构图,因此需要通过删除 root/processed 文件夹来重新处理已处理的数据集。
此外,data.Data.__cat_dim__ 、 data.Data.__inc__现在需要额外的参数输入:
- def __cat_dim__(self, key, value, *args, **kwargs):
- pass
- def __inc__(self, key, value, *args, **kwargs):
- pass
如果你修改了自定义 data.Data 对象中的__cat_dim__或__inc__ ,请确保应用上述更改。
了解更多变化,请参考原项目。
核心团队成员
PyG 核心团队共有 6 位成员,包括多特蒙德工业大学四年级图机器学习博士生 Matthias Fey、多特蒙德工业大学博士生 Jan Eric Lenssen(核心贡献者)和图网络领域大牛 & 斯坦福计算机科学副教授 Jure Leskovec(担任顾问)。
从左至右依次为 Matthias Fey、Jan Eric Lenssen 和 Jure Leskovec。
此外还有三位华人成员,分别是斯坦福大学计算机科学四年级博士生尤佳轩(Jiaxuan You,核心领导者)、斯坦福大学计算机科学博士生 Rex Ying(核心贡献者,他将于 2022 年加入耶鲁大学担任助理教授)和卡内基梅隆大学 - 汉斯学院三年级博士生赵越(Yue Zhao,核心贡献者)。
从左至右依次为尤佳轩、Rex Ying 和赵越。
日前,赵越在知乎分享了自己参与 PyG 2.0 版本设计与升级过程中的心得体会,感兴趣的读者可以参考阅读。
知乎链接:https://www.zhihu.com/pin/1420674585365196800