图神经网络库介绍

图神经网络库介绍

Deep Graph Library(DGL)

由New York University(NYU)和Amazon Web Services(AWS)联合推出的图神经网络框架。创立之初,本着避免重复造轮子的原则,DGL基于主流框架进行开发,即框架上的框架。目前,DGL已经支持PyTorch、MXNet和TensorFlow作为其后端。

消息传递是图计算的经典编程模型。DGL采用了基于「消息传递」的编程模型。通过message function和 reduce function,每个节点获得所有邻居节点的特征信息之和,并经过一个非线性函数得到该节点新的表示。

PyTorch Geometric(PyG)

PyG官方链接:

https://pytorch-geometric.readthedocs.io/en/latest/
 https://github.com/rusty1s/pytorch_geometric

由德国多特蒙德工业大学研究者推出的基于PyTorch的几何深度学习扩展库。该库已获得Yann LeCun的点赞:“A fast & nice-looking PyTorch library for geometric deep learning。”

在其Github主页上展示的已实现的模型可谓琳琅满目,细数将近五十种。在简单的消息传递API之后,它将大多数近期提出的卷积层和池化层捆绑成一个统一的框架。与此同时,所有已实现方法都支持CPU和GPU计算,在遵循不变的数据流范式的基础上利用专门的CUDA内核实现高性能。此外,它还包含一个易于使用的 mini-batch 加载器、多 GPU 支持、大量通用基准数据集和常用转换等,既可以学习任意图形,也可以学习 3D 网格或点云。

PyG目前支持大量常见基准数据集,它们均可在第一次初始化时自动下载和处理。具体而言,PyG提供60多个 graph kernel 基准数据集 (Kersting et al., 2016),如 PROTEINS 或 IMDB-BINARY、引用网络数据集 Cora、CiteSeer。此外,PyG还提供嵌入式数据集,如MNIST超像素 (Monti et al., 2017)、COMA (Ranjan et al., 2018),以及 PCPNet 数据集 (Guerrero et al., 2018)。

所有面向用户的API(如数据加载路径、多GPU支持、数据增强或模型实例化)都借鉴了PyTorch的常用模式,以让用户尽可能地快速熟悉它们。这无疑对于PyTorch用户来说是极大利好。

PyG安装:

  1. 安装pytorch,Pytorch官网:Pytorch官网,在conda中输入对应的命令进行安装。
    Pytorch安装选项

2.`安装PyG库:

  install pyg -c pyg -c conda-forge`

tf_geometric

受到PyG启发,为GNN创建了TensoFlow版本。同样使用消息传递机制,将会比普通矩阵运算更为高效、比稀疏矩阵更为友好。在其Github开源的demo中,可以看到GAE、GCN、GAT等主流的模型已经实现。与此同时,它还提供了面向对象和函数式API。该框架可能推出时间不长,内容略显单薄,也期待其能推出更多的功能与模型支持。

Ant Graph machine Learning system(AGL)

由阿里的蚂蚁金服团队推出的大规模图机器学习系统。在具有六十亿节点、三千亿边的网络中,训练两层GAT耗费14小时,完成整个图的推断需要1.2小时。

上面提到的DGL与PyG均是在单机系统下处理工业规模级的图。该系统在单机情况下已经成功加速了GNN的训练,并且在实际产品场景中使用CPU集群得到了近乎线性的提升。

AGL使用了大规模并行框架(如MapReduce、Parameter Server)来设计其分布式组件,GraphFlat、GraphTrainer和GraphInfer。同样使用消息传递机制,在GraphFlat组件中,通过聚合K跳邻居的节点信息来生成目标节点的表示。通过邻居聚合,将大规模的图进行分解,每次导入一个或者批量的点来缓解内存的压力。由于聚合的邻居信息提供了充分的信息量,所以节点之间相互独立。即在GraphTrainer中,每一个worker只需处理自己的部分,所以不再需要额外的通信开销。除此之外,训练过程还包括许多优化来提高训练效率,如训练管道、网络剪枝、边的分割等。在推断阶段,GraphInfer提供了一种分层模型切片,利用MapReduce管道以从较低层推断到较高层。具体来说,第k层的Reduce阶段载入第k层的模型切片,合并上一层的聚合in-edge邻居的embedding从而生成第k层的embedding,然后将这些中间embedding通过out-edge传到目标节点,为下一Reduce阶段做好准备。

おすすめ

転載: blog.csdn.net/qq_43570025/article/details/121912139
おすすめ