DGL v0.4.3 版本有哪些新功能?
DGL v0.4.3 版本带来了许多新功能,提升了可用性和系统效率。本文将介绍一些主要亮点。
支持 TensorFlow
从本版本开始,DGL 终于加入了 TensorFlow 社区。切换到 TensorFlow 很简单。如果您是首次使用,请安装 DGL 并 import dgl
,然后按照说明设置默认后端。您可以通过更改 ~/.dgl
文件夹下的 config.json
文件随时切换回来。无论使用哪个后端,DGL 都能保持一致的用户体验。以下代码演示了应用图卷积层的基本步骤。
import tensorflow as tf
import dgl.nn as dglnn
# Random features for 10 nodes; each is of length 5.
x = tf.random.normal((10, 5))
# Random graph; 10 nodes and 20 edges.
g = dgl.rand_graph(10, 20)
# Pre-defined graph convolution module.
conv = dglnn.GraphConv(5, 3)
y = conv(g, x) # Apply the graph convolution layer.
我们已在 TensorFlow 中实现并发布了 15 个常用的 GNN 模块(更多正在开发中),所有这些模块都只需一行代码即可调用。
- 来自 Graph Convolutional Networks 论文的
GraphConv
。 - 来自 Graph Attention Networks 论文的
GATConv
。 - 来自 Inductive Representation Learning on Large Graphs 论文的
SAGEConv
(也称为 GraphSAGE)。 - 来自 How Powerful are Graph Neural Networks 论文的
GINConv
。 - 来自 Modeling Relational Data with Graph Convolutional Networks 论文的
RelGraphConv
。 - 来自 Simplifying Graph Convolutional Networks 论文的
SGConv
。 - 来自 Predict then Propagate: Graph Neural Networks meet Personalized PageRank 论文的
APPNPConv
。 - 一个
edge_softmax
函数,用于计算每个顶点的相邻边的 softmax。 - 各种池化层:
SumPooling
、AvgPooling
、MaxPooling
、SortPooling
、WeightAndSum
和GlobalAttentionPooling
。 - 一个
HeteroGraphConv
模块,用于将 GNN 模块应用于异构图。
我们的初步基准测试显示,与其他基于 TF 的 GNN 工具相比,DGL 在训练速度(以每秒 epoch 运行时间衡量)和内存消耗方面都有显著的性能提升。
数据集 | 模型 | DGL | GraphNet | tf_geometric |
---|---|---|---|---|
Core | GCN | 0.0148 | 0.0152 | 0.0192 |
GCN | 0.1095 | OOM | OOM | |
PubMed | GCN | 0.0156 | 0.0553 | 0.0185 |
PPI | GCN | 0.09 | 0.16 | 0.21 |
Cora | GAT | 0.0442 | 不适用 | 0.058 |
PPI | GAT | 0.398 | 不适用 | 0.752 |
DGL-KE:用于学习知识图谱嵌入的高速软件包
DGL-KE 之前在 DGL 主仓库下孵化,现正式宣布其 0.1 版本作为一个独立软件包发布。主要亮点包括
- 一行代码即可轻松生成知识图谱嵌入。
- 支持具有数百万节点和边的超大图谱。
- 通过高度优化的图分区、负采样和通信实现的分布式训练,可部署在多 GPU 机器和多机集群上。
DGL-KE 可以通过 pip 安装
pip install dglke
以下命令使用 8 个 GPU 训练完整的 FreeBase 图谱(超过 8600 万节点和 3.38 亿边)的嵌入。
dglke_train --model TransE_l2 --dataset Freebase --batch_size 1000 \
--neg_sample_size 200 --hidden_dim 400 --gamma 10 --lr 0.1 \
--regularization_coef 1e-9 -adv --gpu 0 1 2 3 4 5 6 7 \
--max_step 320000 --log_interval 10000 --async_update \
--rel_part --force_sync_interval 10000
DGL-KE 旨在实现大规模和高速学习。我们对完整 FreeBase 图谱的基准测试表明,DGL-KE 在 8-GPU 机器上可以在 100 分钟内训练嵌入,在 4 机集群(每机 48 核)上可以在 30 分钟内训练嵌入。这些结果比现有最佳方法提速了 2 到 5 倍。
![]() |
![]() |
请访问我们的新 GitHub 仓库、示例和文档:https://github.com/awslabs/dgl-ke
DGL-LifeSci:将图神经网络应用于化学和生物学
DGL-LifeSci 之前作为化学领域的模型库孵化,现已分拆为一个独立软件包。主要亮点包括
- 用于各种应用的训练脚本和预训练模型——分子性质预测、生成模型和反应预测。
- 与之前的实现相比,模型训练速度提升高达 5.5 倍。
- 定义良好的数据处理、模型构建和评估流程。
DGL-LifeSci 可以通过 pip 或 conda 安装。
pip install dgllife
conda install -c dglteam dgllife
每训练 epoch 的秒数加速汇总
模型 | 原始实现 | DGL-LifeSci 实现 | 加速比 |
---|---|---|---|
在 Tox21 上的 GCN | 5.5(DeepChem) | 1 | 5.5 倍 |
在 Aromaticity 上的 AttentiveFP | 6 | 1.2 | 5 倍 |
在 ZINC 上的 JTNN | 1826 | 743 | 2.5 倍 |
用于反应中心预测的 WLN | 11657 | 5095 | 2.3 倍 |
要开始使用,请访问 https://github.com/awslabs/dgl-lifesci 查看示例和文档。
实验新的采样 API
采样对于在超大图谱上训练 GNN 至关重要。在此版本中,我们重新设计了采样 API,旨在提供更直观的编程体验,同时提升性能。新的 API 具有以下优点
- 支持广泛的基于采样的 GNN 模型,包括 PinSAGE、GraphSAGE、图卷积矩阵补全 (GCMC) 等。
- 支持在 Python 中进行自定义。
- 支持异构图。
- 利用所有预定义的神经网络模块,无需修改代码。
- 利用多进程和多线程以达到最大速度。
以下代码定义了一个基本的邻居采样器
class NeighborSampler(object):
def __init__(self, g, fanouts):
self.g = g # The full graph structure
self.fanouts = fanouts # fan-out of each layer
def sample_blocks(self, seeds):
# `seeds` are the set of nodes to build one sample from.
blocks = []
for fanout in self.fanouts:
# For each seed node, sample ``fanout`` neighbors.
frontier = dgl.sampling.sample_neighbors(g, seeds, fanout, replace=True)
# Then we compact the frontier into a bipartite graph for message passing.
block = dgl.to_block(frontier, seeds)
# Obtain the seed nodes for next layer.
seeds = block.srcdata[dgl.NID]
blocks.insert(0, block)
return blocks
尽管这些 API 仍处于实验阶段,但您可以在许多示例中找到它们的用法
- 通过邻居采样训练 GraphSAGE 模型,并将其扩展到多个 GPU(链接)。
- 通过采样在异构图上训练关系型 GCN 模型,用于节点分类和链接预测(链接)。
- 通过随机游走采样训练 PinSAGE 模型,用于物品推荐(链接)。
- 通过采样训练 GCMC 模型,用于 MovieLens 评分预测(链接)。
- 实现 Chen 等人提出的用于邻居采样的方差缩减技术(链接)。
我们将继续完善这些 API,相应的文档和教程即将推出。
其他改进
dgl.nn
下的所有 GNN 模块现在都支持同构图和二部图。DGLHeteroGraph
现在具有更快的序列化/反序列化实现。- 添加了用于从检查点保存和加载
DGLHeteroGraph
的新 API。 BatchedDGLGraph
和DGLSubGraph
类已合并到DGLGraph
中。- 构建
DGLGraph
不再需要multigraph
标志。
更多详细信息请参见完整发布说明。
4月1日 April