DGL v0.3 版本发布
v0.3 版本包含许多重要更新
- 融合的消息传递核,可大幅提升大型图上 GNN 的训练速度。详情请参考我们的博客文章。
- 添加了组件,通过图采样实现在超大图上进行 GNN 的分布式训练。详情请参考我们的博客文章。
- 新的模型和神经网络模块。
- 许多其他的错误修复和其他增强。
因此,请注意以下变化:
安装
之前使用 pip 和 conda 的安装方法,即:
pip install dgl
conda install -c dglteam dgl
现在仅安装 CPU 构建版本(适用于 Linux/MacOS/Windows)。
使用 pip 安装 CUDA 构建版本
Pip 用户可以使用以下方式安装 DGL CUDA 构建版本:
pip install <package-url>
其中 <package-url>
是以下之一:
CUDA 9.0 | CUDA 10.0 | |
---|---|---|
Linux + Py35 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp35-cp35m-manylinux1_x86_64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp35-cp35m-manylinux1_x86_64.whl |
Linux + Py36 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp36-cp36m-manylinux1_x86_64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp36-cp36m-manylinux1_x86_64.whl |
Linux + Py37 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp37-cp37m-manylinux1_x86_64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp37-cp37m-manylinux1_x86_64.whl |
Win + Py35 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp35-cp35m-win_amd64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp35-cp35m-win_amd64.whl |
Win + Py36 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp36-cp36m-win_amd64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp36-cp36m-win_amd64.whl |
Win + Py37 | pip install https://data.dgl.ai/wheels/cuda9.0/dgl-0.3-cp37-cp37m-win_amd64.whl |
pip install https://data.dgl.ai/wheels/cuda10.0/dgl-0.3-cp37-cp37m-win_amd64.whl |
MacOS | 不适用 | 不适用 |
使用 conda 安装 CUDA 构建版本
Conda 用户可以使用以下方式安装 CUDA 构建版本:
conda install -c dglteam dgl-cuda9.0 # For CUDA 9.0
conda install -c dglteam dgl-cuda10.0 # For CUDA 10.0
DGL 当前支持 CUDA 9.0 (dgl-cuda9.0) 和 10.0 (dgl-cuda10.0)。要查找您的 CUDA 版本,请使用 nvcc --version
。要从源代码安装,请查看我们的安装指南。
新的内置消息传递和聚合函数
我们扩展了内置消息传递和聚合函数的列表,以涵盖更多用例。以前,DGL 只支持 copy_src
、copy_edge
、src_mul_edge
。v0.3 版本发布后,我们支持更多组合。这里展示了一些新的内置函数。
import dgl
import dgl.function as fn
import torch as th
g = ... # create a DGLGraph
g.ndata['h'] = th.randn((g.number_of_nodes(), 10)) # each node has feature size 10
g.edata['w'] = th.randn((g.number_of_edges(), 1)) # each edge has feature size 1
# collect features from source nodes and aggregate them in destination nodes
g.update_all(fn.copy_u('h', 'm'), fn.sum('m', 'h_sum'))
# multiply source node features with edge weights and aggregate them in destination nodes
g.update_all(fn.u_mul_e('h', 'w', 'm'), fn.max('m', 'h_max'))
# compute edge embedding by multiplying source and destination node embeddings
g.apply_edges(fn.u_mul_v('h', 'h', 'w_new'))
如您所见,语法非常直观。u_mul_e
表示将源节点数据与边数据相乘;u_mul_v
表示将源节点数据与目标节点数据相乘,依此类推。每个内置组合都将映射到一个 CPU/CUDA 核,并且支持广播和梯度计算。详情请查看我们的文档。
训练超大图
我们添加了新的组件:共享内存 DGLGraph 和分布式采样器,以支持图神经网络的分布式和多进程训练。
现已上线两个新教程:
我们还提供了关于如何设置这种分布式环境的脚本 (链接)。
增强和错误修复
- NN 模块
dgl.nn.[mxnet|pytorch].edge_softmax
现在直接返回边上的归一化分数。- 修复了将图作为输入时发生的内存泄漏错误。
- 图
DGLGraph
现在支持直接从 scipy csr matrix 转换,而无需先转换为 coo matrix。- 只读图现在可以通过
dgl.batch
进行批处理。 DGLGraph
现在通过DGLGraph.remove_nodes
和DGLGraph.remove_edges
支持节点/边移除(文档)。- 一个新的 API
DGLGraph.to(device)
,可以将所有节点/边数据移动到指定设备。 - 一个新的 API
dgl.to_simple
,可以将图转换为没有多重边的简单图。 - 一个新的 API
dgl.to_bidirected
,可以将图转换为双向图。 - 一个新的 API
dgl.contrib.sampling.random_walk
,可以从图中生成随机游走。 - 允许从另一个
DGLGraph
构建DGLGraph
。
- 新的模型示例
- APPNP
- GIN
- PinSage(慢速版本)
- DGI
- 错误修复
- 修复了将 numpy 整数作为参数传入时的错误。
- 修复了从没有边的 networkx 图构建时发生的错误。
- 修复了 nodeflow 中 ID 有时未正确转换的错误。
- 修复了 MiniGC 数据集中节点数量不一致的错误。
- 修复了 RGCN 示例中 bfs_level=0 时的错误。
- 修复了 DLContext 未在 CFFI 中正确暴露的错误。
- 修复了 Cython 构建期间发生的崩溃。
- 修复了当给定消息函数是内置函数时
send
中的错误。
12 六月