gnn
Google 开源的 TensorFlow GNN:在 TensorFlow 平台上构建大规模图神经网络的核心库,支持异构图采样、GNN 模型全家桶与分布式训练
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Google 开源的 TensorFlow GNN:在 TensorFlow 平台上构建大规模图神经网络的核心库,支持异构图采样、GNN 模型全家桶与分布式训练
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你手机里的社交网络、本地新闻的传播路径、药物分子的原子结构——这些都有一个共同特征:它们本质上都是"图"(Graph)。社交网络是"人"与"关系"的图;新闻传播是"事件"与"影响链"的图;分子是"原子"与"化学键"的图。传统的神经网络擅长处理规则数据(图片、文本),但对这种不规则拓扑结构却力不从心——直到 Graph Neural Networks(GNN)出现。
GNN 的核心思想是"邻居聚合":每个节点从邻居节点那里收集信息,整合后更新自己的状态。这个过程重复多次后,每个节点都能"感知"到越来越远处的图结构。TF-GNN(TensorFlow Graph Neural Networks)就是 Google 为在 TensorFlow 平台上构建 GNN 而开源的成熟库。
该库实际上是 Google 内部多年使用库的 OSS 移植版本,在 Google 内部广泛用于同构图和异构图的各种场景,并与大规模图挖掘工具配合使用。其核心论文 TF-GNN: Graph Neural Networks in TensorFlow 已获得学术界广泛引用。
TF-GNN 的核心创新是 tfgnn.GraphTensor 数据结构,这是一种专门用于表示异构图(Heterogeneous Graph)的张量类型。所谓异构图,就是图中包含多种类型的节点和边——比如一个学术引用网络中,"论文""作者""会议"是三种节点,"发表""引用""评审"是三种边。
GraphTensor 的设计优势在于:
GraphTensor 对稀疏操作进行了深度优化原始大图 (百万节点)
↓ [GraphSampler 采样]
子图批次 (Batch of Subgraphs)
↓ [GraphTensor 编码]
TF-GNN 模型前向传播
↓ [GNN Layers: GCN/GAT/GraphSAGE...]
节点/边/图级别预测
TF-GNN 提供了丰富的 Keras 层和预构建模型,开发者无需从零实现 GNN 传播公式:
| 模型 | 适用场景 | 核心机制 |
|---|---|---|
| GCN (Graph Convolutional Network) | 节点分类、图分类 | 谱域卷积的简化和近似 |
| GAT_v2 (Graph Attention Network v2) | 异构图、注意力重要性的场景 | 改进版注意力机制,动态权重聚合 |
| GraphSAGE | 大规模工业图 | 邻居采样+聚合,分批训练友好 |
| HGT (Heterogeneous Graph Transformer) | 学术引用、知识图谱 | 异构图专属 Transformer |
| MT-ALBiS | 多任务学习 | 共享-专用参数平衡 |
| MPNN (Message Passing Neural Network) | 分子属性预测 | 消息传递框架的统一抽象 |
此外还有 MultiHeadAttention 层,支持自定义注意力机制。开发者可以在 tensorflow_gnn.models 目录下找到所有预构建模型,直接通过 Keras API 调用:
import tensorflow_gnn as tfgnn
from tensorflow_gnn import keras as kg
# 从 GraphTensor 构建模型
graph = tfgnn.GraphTensor.from_pieces(...)
model = kg.SequentialGraphNetwork(
kg.layers.NodeSetUpdate(["feature"], kg.layers.GATv2Head(num_heads=4)),
tfgnn.keras.layers.Pool("sum", "nodes")
)
GNN 训练最大的工程挑战是如何从一张包含数百万节点的大图中高效采样子图。TF-GNN 提供了多层采样方案:
数据预处理还支持从 OGB(Open Graph Benchmark)等标准数据集一键转换:tfgnn_convert_ogb_dataset 命令行工具可以直接将 OGBN-MAG 等数据集转换为 TF-GNN 训练格式。
TF-GNN 提供了高层次的 Runner API,将数据加载、模型构建、训练循环、评估的完整流程封装为声明式配置:
from tensorflow_gnn.runner import Runner
runner = Runner(
model=model,
optimizer=tf.keras.optimizers.Adam(),
tasks=node_classification_task
)
runner.train(training_data, validation_data, epochs=100)
Runner 还支持:
tf.distribute 自动适配多 GPU/TPU依赖生态:TensorFlow 2.17+ / Keras v2 / Apache Beam(数据管道)/ TensorBoard(可视化)/ networkx(图工具)
构建系统:基于 Bazel(Google 内部构建工具),而非标准 Python 生态的 setuptools/pip。贡献代码需要熟悉 Bazel 工作流,这是对外部开发者相对不友好的设计。
Python 版本:要求 Python 3.10–3.12,不支持 Python 3.13(TensorFlow 尚未适配)。
多后端注意:项目文档特别指出不支持 Keras v3(TensorFlow 2.16+ 引入的新版 Keras 多后端架构),用户必须安装 tf-keras 并设置环境变量才能正常使用。
测试框架:项目使用 mock 和 Google 内部的测试基础设施,支持 nightly 构建测试。
| 入门方式 | 难度 | 说明 |
|---|---|---|
| Google Colab | ⭐ | 官方提供 3 个交互式 notebook,无需本地安装 |
| pip 安装 | ⭐⭐ | pip install tensorflow-gnn,5 分钟可跑通示例 |
| Docker | ⭐⭐ | 提供 Dockerfile,可容器化运行 |
| 源码构建 | ⭐⭐⭐⭐ | 需要 Bazel + CUDA + 大量依赖 |
tf-keras,对新手有误导性TF-GNN 的发布标志着大规模图神经网络在 TensorFlow 生态中的成熟。其核心价值在于:
随着大模型(LLM)开始引入图结构知识(GraphRAG 等方向),GNN 在检索增强生成、知识图谱问答中的作用日益重要。TF-GNN 作为 TensorFlow 生态中的 GNN 基础设施,其重要性将随着图增强 AI 系统的发展而持续增长。