【OpenI開(kāi)源項(xiàng)目推薦-GammaGL】支持國(guó)內(nèi)外主流深度學(xué)習(xí)框架的圖神經(jīng)網(wǎng)絡(luò)算法庫(kù)

今天,OpenI要為大家推薦一款入駐社區(qū)的開(kāi)源項(xiàng)目【GammaGL】,它是由北郵GAMMA LAB 與鵬城實(shí)驗(yàn)室最新開(kāi)源的圖神經(jīng)網(wǎng)絡(luò)算法庫(kù)Gamma Graph Library (GammaGL),支持多后端深度學(xué)習(xí)框架,如TensorFlow、PyTorch、PaddlePaddle、MindSpore。

除此之外,GammaGL遵循了PyTorch Geometric (PyG) 的Tensor-centric設(shè)計(jì)原則與接口設(shè)計(jì),即將PyG擴(kuò)展為T(mén)ensorFlow Geometric、Paddle Geometric、MindSpore Geometric。同時(shí),G還提供了二十幾個(gè)主流經(jīng)典的模型,供大家一鍵切換后端使用。

本文將介紹三個(gè)方面內(nèi)容:

  • 根據(jù)背景介紹GammaGL的兩大特點(diǎn):支持多后端和類PyG的設(shè)計(jì)原則;

  • GammaGL整體架構(gòu);

  • GammaGL使用方法。

OpenI啟智社區(qū)開(kāi)源地址:

https://git.openi.org.cn/GAMMALab/GammaGL

背景介紹

當(dāng)前,深度學(xué)習(xí)框架主要由國(guó)外的TensorFlow、PyTorch主導(dǎo),其深度學(xué)習(xí)生態(tài)由歐美主導(dǎo),優(yōu)先支持了Nvidia的GPU與Google的TPU,幾乎不支持國(guó)內(nèi)的計(jì)算設(shè)備與操作系統(tǒng)。

近年來(lái),國(guó)內(nèi)的AI框架如PaddlePaddle、MindSpore也獲得了巨大的發(fā)展,以及百度昆侖、華為Ascend等優(yōu)秀國(guó)產(chǎn)芯片國(guó)產(chǎn)AI芯片獲得了更多的使用。而百花齊放的圖深度學(xué)習(xí)工具往往也是基于現(xiàn)有的深度學(xué)習(xí)框架,支持的后端也不盡相同。例如,

不同深度學(xué)習(xí)框架有著各自的特點(diǎn)與優(yōu)勢(shì),比如PyTorch憑借著動(dòng)態(tài)圖的設(shè)計(jì)原則在研究領(lǐng)域取得了主導(dǎo)地位,TensorFlow則憑借其效率獲得了工業(yè)界的青睞。

開(kāi)發(fā)者為了運(yùn)行幾個(gè)開(kāi)源算法,需要安裝多個(gè)框架多個(gè)版本的環(huán)境、cuda等依賴庫(kù)版本沖突,同時(shí),國(guó)產(chǎn)框架的學(xué)習(xí)成本高、生態(tài)資源少,也一定程度上阻礙了國(guó)產(chǎn)AI框架與硬件的發(fā)展。

為此,GammaGL團(tuán)隊(duì)開(kāi)源了支持多深度學(xué)習(xí)框架的圖神經(jīng)網(wǎng)絡(luò)算法庫(kù),能夠支持TensorFlow、PyTorch、PaddlePaddle、MindSpore等作為后端。

同一套代碼支持不同深度學(xué)習(xí)后端

GammaGL能夠只使用一套代碼在不同深度學(xué)習(xí)后端運(yùn)行,這也是與DGL支持多后端的區(qū)別所在。

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在不同框架之間共享張量的結(jié)構(gòu),能夠?qū)⒄麄€(gè)端到端的GNN模型(通常包含圖上的查詢與計(jì)算等)做到框架無(wú)關(guān) (famework agnostic)。

然而,一個(gè)完整的GNN應(yīng)用還包含數(shù)據(jù)加載、GNN模型構(gòu)建、訓(xùn)練流程、評(píng)測(cè)等,這些均是框架特定的。

例如,使用TensorFlow來(lái)替換PyTorch代碼時(shí),會(huì)涉及到三類變動(dòng):

  • 模型類的繼承(使用 tensorflow.keras.layer.Layer 替換 torch.nn.Module)

  • 模型內(nèi)子模塊與參數(shù)的初始化;

  • 框架特定的操作(如使用 tensorflow.matmul 替換 torch.matmul)

為了避免不同框架下的代碼重復(fù)編寫(xiě),GammaGL基于支持多后端的深度學(xué)習(xí)框架TensorLayerX來(lái)實(shí)現(xiàn)圖神經(jīng)網(wǎng)絡(luò)的基本組件與相關(guān)算法,將上述三類變動(dòng)基于TensorLayerX來(lái)統(tǒng)一實(shí)現(xiàn),即使用一套代碼即可在不同后端運(yùn)行

除此之外,用戶可能因?yàn)榭蚣艿哪骋惶匦詫?duì)其有特殊偏好,GammaGL也支持使用框架自身的接口來(lái)編寫(xiě)框架特定的操作,即TensorLayerX與某一框架混用的方式。

類PyG的使用方法與用戶體驗(yàn)

PyG在Github已獲得14.8k stars,無(wú)疑是最受歡迎的圖神經(jīng)網(wǎng)絡(luò)框架之一。同時(shí),PyG是PyTorch-on-the-rocks,即使用Tensor-centric的API,并接近原生PyTorch的設(shè)計(jì)原則,使得其與PyTorch一樣擁有較高的易用性。所以,PyG也積累了大量的用戶,頂會(huì)源碼中也少不了PyG的身影。

因此,GammaGL借鑒了PyG的設(shè)計(jì)框架,如Tensor-centric的API設(shè)計(jì)、類torchvision的數(shù)據(jù)變換與增強(qiáng)等。如果你是一個(gè)PyG的用戶或非常熟悉PyG,GammaGL將會(huì)非常友好,也將會(huì)擴(kuò)展成為T(mén)ensorFlow Geometric、Paddle Geometric、MindSpore Geometric。

GammaGL整體框架

GammaGL提供了一個(gè)多層的框架,為用戶提供了低級(jí)與高級(jí)的接口來(lái)構(gòu)建GNN應(yīng)用。它由下列組件組成:

  • 底層基于深度學(xué)習(xí)框架來(lái)支持,提供了自動(dòng)微分的計(jì)算算子、數(shù)據(jù)管理與處理流程、訓(xùn)練流程等,并由TensorLayerX使用統(tǒng)一接口進(jìn)行封裝。

  • 圖數(shù)據(jù)組件負(fù)責(zé)圖數(shù)據(jù)的抽象、數(shù)據(jù)集的管理、圖變換等,為上層接口提供存儲(chǔ)與查詢功能。

  • 消息傳遞組件包含了消息傳遞機(jī)制三大函數(shù)的抽象以及底層算子的統(tǒng)一封裝,即將常用的scatter_xxx (segment_xxx) 與gather等進(jìn)行統(tǒng)一并封裝。

  • 采樣組件負(fù)責(zé)擴(kuò)大可訓(xùn)練圖的規(guī)模,通過(guò)采樣的方式獲取子圖,進(jìn)而使用小批量的訓(xùn)練方式。

  • 模型層面,GammaGL預(yù)先提供了一些可以直接運(yùn)行的樣例模型,還支持用戶自定義構(gòu)建自己的模型。

如何使用GammaML

快速開(kāi)始:

1、安裝一種你希望使用的后端

# For tensorflow
pip install tensorflow-gpu # GPU version
pip install tensorflow # CPU version

# For torch, version 1.10
# https://pytorch.org/get-started/locally/
pip3 install torch==1.10.2

# For paddle, any latest stable version
# https://www.paddlepaddle.org.cn/
python -m pip install paddlepaddle-gpu

# For mindspore, GammaGL only supports version1.6.1, GPU-CUDA 11.1 and python 3.7.5
# https://www.mindspore.cn/install
pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.6.1/MindSpore/gpu/x86_64/cuda-11.1/mindspore_gpu-1.6.1-cp37-cp37m-linux_x86_64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

2、從OpenI啟智社區(qū)安裝TensorLayerX

# 從OpenI啟智社區(qū)安裝,更適合大陸用戶
pip install git+https://git.openi.org.cn/OpenI/TensorLayerX.git

3、從OpenI啟智社區(qū)clone,安裝GammaGL

# 可從OpenI啟智社區(qū)clone,更適合大陸用戶
git clone https://git.openi.org.cn/GAMMALab/GammaGL.git
python setup.py install

團(tuán)隊(duì)在GitHub主頁(yè)提供了快速構(gòu)建一個(gè)GNN模型與訓(xùn)練流程的樣例。

除此之外,GammaGL還提供了二十余個(gè)算法供大家使用,包含同質(zhì)圖上一些經(jīng)典的模型、對(duì)比學(xué)習(xí)模型、異質(zhì)圖神經(jīng)網(wǎng)絡(luò)模型等。

同樣地,我們僅需使用命令行即可運(yùn)行上述模型。

以GCN為例,僅需指定環(huán)境變量即可運(yùn)行相應(yīng)的后端:

# cd ./examples/gcn
# set parameters if necessary
CUDA_VISIBLE_DEVICES=0 TL_BACKEND=paddle python gcn_trainer.py

還能通過(guò)`os`模塊來(lái)指定后端

import os
os.environ['TL_BACKEND'] = 'paddle' # tensorflow, torch, mindspore

結(jié)語(yǔ)

GammaGL在OpenI啟智社區(qū)已開(kāi)源并接入TensorLayerX開(kāi)源生態(tài),積極為國(guó)產(chǎn)AI生態(tài)貢獻(xiàn)自己的力量。同時(shí),GammaGL將持續(xù)不斷投入,加快新功能的開(kāi)發(fā)與版本的迭代:聚焦于更多算法模型的集成、常用操作的開(kāi)發(fā)、算子的優(yōu)化與迭代等。

歡迎大家使用GammaGL以及提出寶貴的意見(jiàn),關(guān)于GammaGL的任何問(wèn)題歡迎聯(lián)系: tyzhao@bupt.edu.cn。同時(shí),OpenI啟智社區(qū)歡迎大家來(lái)合作,共建社區(qū)生態(tài),開(kāi)源立足國(guó)內(nèi),走向國(guó)際!

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp

More articles