博客详情

首页 / 博客详情
blog

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 模块(更多正在开发中),所有这些模块都只需一行代码即可调用。

我们的初步基准测试显示,与其他基于 TF 的 GNN 工具相比,DGL 在训练速度(以每秒 epoch 运行时间衡量)和内存消耗方面都有显著的性能提升。

数据集 模型 DGL GraphNet tf_geometric
Core GCN 0.0148 0.0152 0.0192
Reddit 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 并在此处查看示例 here

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 倍。

DGL-KE 对比 PyTorch-BigGraph 在 FreeBase 上
DGL-KE 对比 GraphVite 在 FB15k 上

请访问我们的新 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。
  • BatchedDGLGraphDGLSubGraph 类已合并到 DGLGraph 中。
  • 构建 DGLGraph 不再需要 multigraph 标志。

更多详细信息请参见完整发布说明