【OpenI 开源项目推荐 -GammaGL】支持国内外主流深度学习框架的图神经网络算法库
今天,OpenI 要为大家推荐一款入驻社区的开源项目【GammaGL】,它是由北邮 GAMMA LAB 与鹏城实验室最新开源的图神经网络算法库 Gamma Graph Library (GammaGL),支持多后端深度学习框架,如 TensorFlow、PyTorch、PaddlePaddle、MindSpore。
除此之外,GammaGL 遵循了 PyTorch Geometric (PyG) 的 Tensor-centric 设计原则与接口设计,即将 PyG 扩展为 TensorFlow Geometric、Paddle Geometric、MindSpore Geometric。同时,G 还提供了二十几个主流经典的模型,供大家一键切换后端使用。
本文将介绍三个方面内容:
根据背景介绍 GammaGL 的两大特点:支持多后端和类 PyG 的设计原则;
GammaGL 整体架构;
GammaGL 使用方法。
OpenI 启智社区开源地址:
https://git.openi.org.cn/GAMMALab/GammaGL
背景介绍
当前,深度学习框架主要由国外的 TensorFlow、PyTorch 主导,其深度学习生态由欧美主导,优先支持了 Nvidia 的 GPU 与 Google 的 TPU,几乎不支持国内的计算设备与操作系统。
近年来,国内的 AI 框架如 PaddlePaddle、MindSpore 也获得了巨大的发展,以及百度昆仑、华为 Ascend 等优秀国产芯片国产 AI 芯片获得了更多的使用。而百花齐放的图深度学习工具往往也是基于现有的深度学习框架,支持的后端也不尽相同。例如,
不同深度学习框架有着各自的特点与优势,比如 PyTorch 凭借着动态图的设计原则在研究领域取得了主导地位,TensorFlow 则凭借其效率获得了工业界的青睐。
开发者为了运行几个开源算法,需要安装多个框架多个版本的环境、cuda 等依赖库版本冲突,同时,国产框架的学习成本高、生态资源少,也一定程度上阻碍了国产 AI 框架与硬件的发展。
为此,GammaGL 团队开源了支持多深度学习框架的图神经网络算法库,能够支持 TensorFlow、PyTorch、PaddlePaddle、MindSpore 等作为后端。
同一套代码支持不同深度学习后端
GammaGL 能够只使用一套代码在不同深度学习后端运行,这也是与 DGL 支持多后端的区别所在。
DGL is framework agnostic.
DGL is framework agnostic, meaning if a deep graph model is a component of an end-to-end application, the rest of the logics can be implemented in any major frameworks, such as PyTorch, Apache MXNet or TensorFlow.
DGL 利用 DLPack 在不同框架之间共享张量的结构,能够将整个端到端的 GNN 模型(通常包含图上的查询与计算等)做到框架无关 (famework agnostic)。
然而,一个完整的 GNN 应用还包含数据加载、GNN 模型构建、训练流程、评测等,这些均是框架特定的。
例如,使用 TensorFlow 来替换 PyTorch 代码时,会涉及到三类变动:
模型类的继承(使用 tensorflow.keras.layer.Layer 替换 torch.nn.Module)
模型内子模块与参数的初始化;
框架特定的操作(如使用 tensorflow.matmul 替换 torch.matmul)
为了避免不同框架下的代码重复编写,GammaGL 基于支持多后端的深度学习框架 TensorLayerX 来实现图神经网络的基本组件与相关算法,将上述三类变动基于 TensorLayerX 来统一实现,即使用一套代码即可在不同后端运行。
除此之外,用户可能因为框架的某一特性对其有特殊偏好,GammaGL 也支持使用框架自身的接口来编写框架特定的操作,即 TensorLayerX 与某一框架混用的方式。
类 PyG 的使用方法与用户体验
PyG 在 Github 已获得 14.8k stars,无疑是最受欢迎的图神经网络框架之一。同时,PyG 是 PyTorch-on-the-rocks,即使用 Tensor-centric 的 API,并接近原生 PyTorch 的设计原则,使得其与 PyTorch 一样拥有较高的易用性。所以,PyG 也积累了大量的用户,顶会源码中也少不了 PyG 的身影。
因此,GammaGL 借鉴了 PyG 的设计框架,如 Tensor-centric 的 API 设计、类 torchvision 的数据变换与增强等。如果你是一个 PyG 的用户或非常熟悉 PyG,GammaGL 将会非常友好,也将会扩展成为 TensorFlow Geometric、Paddle Geometric、MindSpore Geometric。
GammaGL 整体框架
GammaGL 提供了一个多层的框架,为用户提供了低级与高级的接口来构建 GNN 应用。它由下列组件组成:
底层基于深度学习框架来支持,提供了自动微分的计算算子、数据管理与处理流程、训练流程等,并由 TensorLayerX 使用统一接口进行封装。
图数据组件负责图数据的抽象、数据集的管理、图变换等,为上层接口提供存储与查询功能。
消息传递组件包含了消息传递机制三大函数的抽象以及底层算子的统一封装,即将常用的 scatter_xxx (segment_xxx) 与 gather 等进行统一并封装。
采样组件负责扩大可训练图的规模,通过采样的方式获取子图,进而使用小批量的训练方式。
模型层面,GammaGL 预先提供了一些可以直接运行的样例模型,还支持用户自定义构建自己的模型。
如何使用 GammaML
快速开始:
1、安装一种你希望使用的后端
2、从 OpenI 启智社区安装 TensorLayerX
3、从 OpenI 启智社区 clone,安装 GammaGL
团队在 GitHub 主页提供了快速构建一个 GNN 模型与训练流程的样例。
除此之外,GammaGL 还提供了二十余个算法供大家使用,包含同质图上一些经典的模型、对比学习模型、异质图神经网络模型等。
同样地,我们仅需使用命令行即可运行上述模型。
以 GCN 为例,仅需指定环境变量即可运行相应的后端:
还能通过`os`模块来指定后端
结语
GammaGL 在 OpenI 启智社区已开源并接入 TensorLayerX 开源生态,积极为国产 AI 生态贡献自己的力量。同时,GammaGL 将持续不断投入,加快新功能的开发与版本的迭代:聚焦于更多算法模型的集成、常用操作的开发、算子的优化与迭代等。
欢迎大家使用 GammaGL 以及提出宝贵的意见,关于 GammaGL 的任何问题欢迎联系: tyzhao@bupt.edu.cn。同时,OpenI 启智社区欢迎大家来合作,共建社区生态,开源立足国内,走向国际!
评论