0
雷鋒網(wǎng) AI 開發(fā)者按:8 月 5 日晚,GraphVite 開發(fā)者 @唐建(MILA 實驗室助理教授,曾獲 ICML 2014最佳論文、WWW16 最佳論文提名) 在社交平臺上公布了這個圖表示學習系統(tǒng)開源的消息。他表示,在百萬節(jié)點的圖上,使用該系統(tǒng)僅需 1 分鐘左右就可以學習節(jié)點的表示。該系統(tǒng)的目標是為廣泛的嵌入方法系列提供通用和高性能的框架,這將非常有利于圖學習算法的研究與部署。雷鋒網(wǎng) AI 開發(fā)者將其具體介紹及相關地址編譯如下。
GraphVite 是一種通用圖形嵌入引擎,專用于各種應用程序中的高速和大規(guī)模嵌入式學習。該系統(tǒng)支持多 GPU 并行,它可以擴展到百萬級甚至十億級的圖。
GraphVite 可以幫助用戶實現(xiàn):
在統(tǒng)一的平臺上重現(xiàn)學習算法
對圖形或高維數(shù)據(jù)進行快速可視化
對大規(guī)模圖形或知識圖譜進行學習
提高原型設計與模型調整的效率
目前,GraphVite 已為 3 種任務提供了完整的訓練和評估流程,包括:節(jié)點嵌入、知識圖譜嵌入和圖形&高維數(shù)據(jù)可視化。
GraphVite 支持的 3 種任務模型
此外,它還涵蓋了 9 個主流的模型,以及它們在一系列標準數(shù)據(jù)集上的基準。通過 Python 界面,用戶可以輕松地練習高級圖形嵌入算法,并在極短的時間內獲得結果。
GraphVite 框架由兩個部分組成,核心庫和 Python wrapper。Python wrapper 可以為核心庫中的類提供自動打包功能,并為應用程序和數(shù)據(jù)集提供了實現(xiàn)。
核心庫用 C+11 和 CUDA 實現(xiàn),并使用 pybind11 綁定到 python 中。它涵蓋了 GraphVite 中所有與計算相關類的實現(xiàn),例如圖、求解器和優(yōu)化器。所有這些成分都可以打包成類,這類似于 Python 接口。
在 C+實現(xiàn)中,Python 有一些不同之處。圖和求解器由底層數(shù)據(jù)類型和嵌入向量長度實現(xiàn)。該設計支持 Python 接口中的動態(tài)數(shù)據(jù)類型,以及對最大化優(yōu)化編譯時(compile-time)。為了方便了對 GraphVite 的進一步開發(fā),開發(fā)者還對 C+接口進行了高度抽象。通過連接核心接口,用戶可以實現(xiàn)圖形的深度學習例程,而無需關注調度細節(jié)。
源代碼組如下:
include/base/*實現(xiàn)基本數(shù)據(jù)結構
include/util/*實現(xiàn)基本用途
include/core/*實現(xiàn)優(yōu)化器、圖和求解器的核心接口
include/gpu/*實現(xiàn)所有模型的前向和后向傳播
include/instance/*實現(xiàn)圖和求解器的實例
include/bind.h 實現(xiàn) Python 綁定
src/graphvite.cu 實例化所有 Python 類
為了簡要介紹 GraphVite 的速度,開發(fā)者展示了用 GraphVite 實現(xiàn)的所有模型的基準測試,包括它們的時間和性能。整個測試過程均采用的是具有 24 個 CPU 線程和 4 個 V100 GPU 的服務器。
節(jié)點嵌入
開發(fā)者在 3 個數(shù)據(jù)集上進行了節(jié)點嵌入模型的實驗,這些數(shù)據(jù)集的規(guī)模從百萬到 5 億不等。下圖顯示了每個數(shù)據(jù)集的大小,以及嵌入 LINE 模型中所占用時間和 CPU 內存大小。
節(jié)點嵌入模型在 3 個數(shù)據(jù)集上的測試結果
在多標簽節(jié)點分類的標準任務上,開發(fā)者也對學習到的節(jié)點嵌入進行了評估。下面展示了每個模型以不同百分比訓練數(shù)據(jù)在 micro-f1 和 macro-f1 兩種衡量指標下的值。
Youtube 數(shù)據(jù)集上的節(jié)點嵌入評估
對于大規(guī)模數(shù)據(jù)集的測試結果如下所示。其中,node2vec 模型因內存不足而無法成功運行,因為它需要超過 200 GiB 的內存來為二階隨機游走構建別名表。
Flickr 大規(guī)模數(shù)據(jù)集上的測試結果
Friendster-small 大規(guī)模數(shù)據(jù)集上的測試結果
知識圖譜嵌入
對于知識圖嵌入,開發(fā)者在 4 個標準數(shù)據(jù)集上對 TransE,DistMult,ComplEx 和 RotatE 進行了基準測試。RotatE 在這些數(shù)據(jù)集上的訓練時間和資源如下圖所示。
知識圖譜嵌入任務在 4 個標準數(shù)據(jù)集上測試結果
為了評估知識圖譜嵌入,開發(fā)者還在鏈路預測任務上進行了測試,并在測試集上報告每個模型的結果,其中排名指標是根基于過濾結果計算而得。
知識圖譜嵌入任務在 FB15k 數(shù)據(jù)集上評估結果
知識圖譜嵌入任務在 FB15k-237 數(shù)據(jù)集上評估結果
知識圖譜嵌入任務在 WN18 數(shù)據(jù)集上評估結果
圖形&高維數(shù)據(jù)可視化
開發(fā)者在兩個主流的圖像數(shù)據(jù)集上評估了高維數(shù)據(jù)可視化的對比結果。LargeVis 所需的訓練時間和資源如下表所示。請注意,超過 95%的 GPU 內存占用來自 KNN Graph 的構建,并且可以在必要時減慢速度進行平衡。
高維數(shù)據(jù)可視化任務在數(shù)據(jù)集上測試結果
對于 ImageNet,因為它包含 1000 個類,所以開發(fā)者根據(jù)它們在 WordNet 中的層次結構來可視化類。下面的動畫演示了如何在層次結構中遍歷 English Setter 類。
在層次結構中遍歷 English Setter 類演示
與類似工作的比較
與 GraphVite 相似的系統(tǒng)是 PyTorch-BigGraph,該系統(tǒng)旨在加速大規(guī)模知識圖嵌入數(shù)據(jù)。下圖是在相同的超參數(shù)設置下,對 FB15K 上兩個庫中實現(xiàn)的模型進行的 Apple-to-Apple 比較。
GraphVite 與 PyTorch-BigGraph系統(tǒng)速度對比
更多 GraphVite 信息:
GitHub 開源地址:
雷鋒網(wǎng) AI 開發(fā)者
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉載。詳情見轉載須知。