基線模型開源分享及深度講解 | 2021 MAXP 直播第二講:基於DGL的圖機器學習任務

亞馬遜雲AI社群發表於2021-11-02

本文為 2021 MAXP 系列公開課第二講完整版直播回顧,由亞馬遜雲科技上海人工智慧研究院張建博士主講。介紹了圖機器學習任務的概況,並著重講解了本次大賽的圖機器學習賽題,文中附基線模型開源地址。

在過去的幾年中,神經網路的興起與應用成功推動了模式識別和資料探勘的研究。許多曾經嚴重依賴於手工提取特徵的機器學習任務,如今都已被各種端到端的深度學習正規化徹底改變了。儘管傳統的深度學習方法被應用在提取歐氏空間資料的特徵方面取得了巨大的成功,但許多實際應用場景中的資料是從非歐式空間生成的,傳統的深度學習方法在處理非歐式空間資料上的表現卻仍難以使人滿意。

近年來,人們對深度學習方法在圖上的擴充套件越來越感興趣。在多方因素的成功推動下,研究人員借鑑了卷積網路、迴圈網路和深度自動編碼器的思想,定義和設計了用於處理圖資料的神經網路結構,由此一個新的研究熱點——“圖神經網路”。

10 月 11 日,biendata 邀請亞馬遜雲科技上海人工智慧研究院張建博士,針對 2021 MAXP 命題賽:基於 DGL 的圖機器學習任務,開展了一場線上直播。張建博士為直播觀眾詳細講解了圖神經網路框架 DGL,以及本次賽題的官方基線模型。

模型地址:https://github.com/dglai/maxp...

直播視訊回顧:https://www.bilibili.com/vide...

關於 2021 MAXP

2021 MAXP 高效能雲端計算創新大賽(2021 MAXP)由中國計算機學會高效能運算專業委員會和中國資訊通訊研究院指導,ACM 中國高效能運算專家委員會(ACMSIGHPC)和雲端計算開源產業聯盟聯合主辦,亞馬遜雲科技和騰訊雲支援,阿里雲、華為雲、UCloud、天翼雲等廠商參與。大賽以高效能雲端計算為主題,旨在進一步推動國內高效能運算的發展,併為參賽者提供了高達 40 萬元的獎金池,還會提供實習機會和權威榮譽證書。

直播回顧

本篇文章將分為五個模組介紹圖資料任務。

  • 模組一是講解為什麼要做圖相關資料的任務。
  • 模組二會介紹近幾年圖機器學習方面的進展,特別是和圖神經網路相關的進展,以及主要由亞馬遜雲科技上海人工智慧研究院主導開源的 Deep Graph Library(DGL)圖形網路框架,這也是大賽需要使用到的框架。
  • 模組三是針對賽道題目進行講解。
  • 模組四是本篇文章最核心的內容,將對基線 DGL 模型進行講解,特別是針對初賽的資料的處理和 DGL 模型的構建。
    模型地址:https://github.com/dglai/maxp...
  • 模組五會分享一些學習和掌握 DGL 的相關資源。

本次大賽用到的圖資料是人工智慧的新資料金礦,就是圖結構化的資料。在實際生活和工作中,圖資料無處不在。例如社交網路、知識圖譜及使用者相互之間的關係等,這些都是圖。化學分子也可以看成一個圖,這是一種構圖的新方法。

現在計算機視覺或自然語言處理所用到的影像資料和自然語言資料本質上也是一種圖,通常稱為網格狀的圖。例如影像資料,每一個圈代表一個畫素點,表達了這個畫素點和它臨近的這8個畫素點之間的關係。

計算機視覺中用的卷積神經網路,本質就是對於一個或一片區域的畫素以及它們之間的關係進行建模。那麼自然語言就可以認為是鏈型的圖,從講話時的第一個字到後面的字通過線性的關係串聯起來。

很多自然語言中使用的模型。例如 GPT,它的本質是線上性串聯的圖結構上構建點和點之間的潛在關係。

對於圖資料這類比較新的資料,近幾年學術界針對於圖的論文數量一直在持續增長。

論文標題裡包含 graph 的論文數量呈現指數增長的形式。尤其是 2016 年,在影像深度學習的演算法得到應用之後,這幾年都保持著百分之四十多的年增長率。到 2020 年,已經至少有 2,000 多篇論文都在討論圖和圖資料及與圖資料相關的機器學習的內容。

隨著圖資料的廣泛應用及出現新的人工智慧思路後,與圖資料相關的一些演算法和模型都出現井噴式增長。

其中比較典型的代表是 2016 年出現的《GCN 圖卷積神經網路》論文,這篇論文代表了圖神經網路的開端。

對於圖上機器學習來說,通常會利用它完成三類任務。

第一類是點和邊的分類。用於識別可疑賬戶和鎖定有價值的使用者。

第二類是連結預測。對於圖來說有一些特殊的應用,在電商的商品推薦裡就用到此類任務。這類任務的本質是預測使用者和商品之間是否存在關聯關係,如果關聯關係的可能性很高,那麼就會推薦相關聯的商品。

第三類是圖分類和迴歸的問題。用於預測化學分子的特性。

這些都是圖上機器學習常見的任務,在深度學習運用到圖資料之前,這個學科發展出了很多方法和模型完成圖上機器學習的任務。

2012 年出現以連線主義為核心的神經網路成為人工智慧領域新的主流模型後,很多學者開始研究如何將深度學習的方法運用到圖結構化的資料上。

2016 年隨著相關論文的出現,產生了一種新的影像機器學習的方法,叫圖神經網路。

圖神經網路的本質是神經網路家族的一員,更多的是研究基於點邊和圖的特徵。

圖神經網路的本質是對於圖結構化資料上的主要實體,點和邊及它們擁有的特徵進行卷積運算,同時利用神經網路常見的非線性的啟用函式及正則化方法,將圖裡面的點和邊及它們的特徵進行多層卷積化處理,最後得到點、邊或整個圖結構的向量化的表示。

利用向量化表示,可以進一步幫助完成下游的任務。例如要對點、邊、圖做分類或迴歸等一系列應用。

目前已經有各種各樣的機器學習或深度學習的框架工具,比如 TensorFlow、PyTorch 等工具都非常好用,但是在實踐的過程中如果只使用 TensorFlow、PyTorch 這類常見的框架開發 GNN,就會碰到圖結構化資料特有的問題。

因為圖結構的特殊性,在使用傳統的或常見的深度學習框架的過程中就容易出現 out of memory 等問題。

因為在圖結構化資料時,資料裡經常會出現一個點有很多鄰居,而鄰居的數量是變化的。但是卷積神經網路裡所看到的每一個畫素,畫素周邊的鄰居數量是固定的,這樣針對固定數量張量設計的結構就容易出現記憶體溢位的問題。

因此在開發圖神經網路的過程中,經常會碰到類似這種需要處理不平衡或是不一致資料分佈的情況,此時用傳統的神經網路框架開發就會碰到各種各樣的問題。所以需要有專門針對於圖神經網路的通用框架的出現,DGL 就是其中之一。

DGL 是專門用來編寫圖神經網路的開源工具,目的是為了讓編寫圖神經網路更加簡單,並且易於快速應用到業務場景裡面。

簡單而言,DGL 是一款面向圖神經網路深度學習框架。

與其他的圖神經網路深度學習框架不同的是,DGL 是相容多個後端的框架,稱為後端無知的框架。在整個框架裡 DGL 支援用 PyTorch 去編寫後端,也支援 MXNet、TensorFlow 編寫後端。DGL 關注的是應對與圖結構化資料相關和圖神經網路模型相關的工作。

在 DGL 中同樣支援多種訓練模式的情況,包括單機單卡、單機多卡或多機多 CPU 的分散式訓練等在平常做深度學習訓練過程中都會用到的情景。

同時針對於常用的 GNN 模組,都已經做了內建的實現。另外,DGL 已有 70 多個經典和前沿的 GNN 模型的樣例,可以更好的上手 GNN 的學習和利用最新的模型完成業務需求,或是開發新的模型需要。

在剛剛過去的 9 月份, DGL 整個開源專案獲得了中國資訊通訊研究院主持“OSCAR 尖峰開源專案及開源社群”的大獎,這樣評選中的獲勝,也是對 DGL 作為開源社群的認可。

賽題講解

圖機器學習的常見任務是包括三類:點分類/迴歸,邊分類/迴歸、連結預測,整圖分類/迴歸。

這次比賽所做的事情就是最常見的點分類,完成圖中點的標籤分類。

比賽的資料由的資料供應方獲取的,基於微軟的學術論文引用文獻的引用圖。

資料是論文引用關係圖,節點是論文,邊是單向的論文引用關係。每節點都具有 300 維的特徵值,節點屬於 23 個類別之一,這也是論文所處的領域標籤。

任務是通過利用已知的標籤學習和預測未知節點的標籤。

針對這個任務我們開發了基於 DGL 的 GNN 基線模型,主要的目的是為了幫助參賽者快速的上手掌握和使用 DGL 來開發 GNN 的模型,並運用到這次大賽過程中。

程式碼結構包括兩部分。

第一部分是 4 個資料預處理的檔案,每個檔案都有不同的目的。

第二部分是 GNN 的目錄,其中包括用 DGL 寫的 GNN 模型檔案及針對模型檔案和比賽資料所做的模型訓練檔案和相應的幫助檔案。

首先介紹程式碼邏輯裡資料預處理的部分。

檔案一的主要目的是完成針對於初賽資料構建點列表。

初賽資料包含點及論文到論文之間的邊列表,但是邊列表裡包含一些論文的 ID,這些 ID 在論文的點列表裡並沒有出現,所以資料探索和處理需要將所有點的 paper ID 合併起來,構成完整的點列表,同時給每一個 paper ID 新的點索引。

檔案二主要完成將原始檔案的 300 維特徵全部讀出來,構建成壓縮資料。

因為原始資料檔案是用文字的格式儲存的,處理起來非常花費時間,而且速度很慢,對記憶體的要求也比較高。所以檔案二進行資料預處理後儲存下來,直接用到後面的建模過程中,會極大的提升速度。

檔案三的主要目的是使用新建的點索引,同每一個 paper ID 對應的點索引完成對於原有的邊列表替換。

利用 DGL 的 Graph 類構建了 DGL Graph,同時藉助 DGL 的儲存圖功能存成 graph.bin 檔案。

檔案四的主要目的是完成對標籤的分割。針對 train_nodes.csv 有標籤的資料進行 train 或 validation 的分割,test 的資料集是用 validation_nodes.csv 裡沒有標籤的點進行索引構建的。

其次介紹程式碼邏輯的 GNN 部分,GNN 部分主要包含兩個檔案。

第一個檔案是 models.py 檔案。

在 models.py 檔案中,DGL 內建的三個常用的 GNN 模組被稱為基礎的模型模組,構建基於鄰居取樣模式的模型程式碼。

鄰居取樣模式的模型程式碼分為三類:GraphSage,GCN,GAT。

因為賽題的資料相對來說規模較大,達到了百萬級的點及千萬級的邊的規模。因此,如果想把圖和 300 維的特徵都使用全圖訓練模式,全部放到 GPU 裡訓練,很容易就會造成 GPU 視訊記憶體溢位無法完成訓練;全部放到 CPU 裡訓練,速度會非常慢。

所以採用 mini 批次的方法訓練。做點分類時可以用鄰居取樣模式降低每一個批次的計算資料的資料量,從而保證可以使用 GPU 快速完成資料訓練。

每一個模型構建之後都有入參,部分入參可以三個模型共享,另一部分入參是某些模型獨有的。

第二個檔案是 model_train.py 檔案,這也是基線模型程式碼的核心檔案。它利用構建的 GNN 模型以及經過預處理後的資料檔案構建的訓練模型程式碼。

程式碼主要邏輯的第一步是完成預處理資料的讀取。使用輔助函式可以快速讀取預處理資料,供訓練模型使用。

訓練模型的程式碼包含三種方式:

一種是使用 CPU 去訓練;一種使用單塊 GPU 進行 mini 批次訓練;一種是使用單機多 GPU 進行資料並行的mini批次訓練。

在主函式裡有相應的入口,CPU 的訓練更多的是進行程式碼除錯。對模型進行修改或使用自己開發的模型,可以先在 CPU 上進行除錯訓練,保證程式碼沒有錯誤,再遷移到 GPU 上進行訓練。

三個訓練方式的訓練邏輯是一致的。如果使用多 CPU 進行訓練資料並行的方式,需要對資料集進行多次劃分,不同的劃分送到不同的顯示卡上進行訓練,將剩下的工作使用 DGL 點取樣器和資料載入器完成 mini 批次的構建,最後選擇構建 GNN 模型。

因為程式碼是基於 PyTorch 後端寫的,可以構建常見的 PyTorch 損失函式和優化器,最後在整個的 Epoch 迴圈裡面完成訓練的 mini batch 的迴圈和驗證,及最佳模型儲存的工作。

針對 DGL 比賽,我們還提供了與 DGL 相關的核心資源方便大家學習和掌握。

DGL 圖神經網路主要的核心資源有兩個:第一個核心資源是 dgl.ai 的官網。官網中最核心的內容分為兩塊:
一塊是 Getting Started,這個頁面可以輔助安裝 DGL。因為安裝的過程中針對不同的系統,是否使用 GPU,有沒有顯示卡及顯示卡對應的版本都有不同的安裝命令。因此利用 Getting Started 頁面,快速找到環境對應的安裝命令,一條命令就可以將 DGL 安裝好。

另一塊是 docs,這個頁面包含了與 DGL 相關的和主要的所有核心幫助文件。

Docs 中包括 DGL 對外開放的 API 說明,還有基於中文的使用者手冊。方便中國區的使用者快速的上手使用 DGL 構建 hello word 程式碼。

第二個核心資源就是 DGL GitHub 站。

這裡可以看到 DGL 的原始碼及官方的 DGL 模型實現樣例。除了GCN、GAT 和 GraphConv,還有很多經典樣例可以在 examples 目錄中找到,這些樣例都可以進行參考使用,也可以修改模型完成本次大賽。

關於 DGL 的相關問題可以在 DGL 的官方討論渠道中探討。

第一個渠道是 DGL 官網裡的 discuss 論壇;

第二個渠道是 DGL GitHub 站中的 issue 區;

第三個渠道是搜尋 DGL 使用者群或 DGL 使用者 1 群、DGL 使用者 2;

第四個渠道是通過 Slack Channel 提問題,找到相關同事回覆,給到參賽者解惑。

相關文章