與TensorFlow 功能互補的騰訊 angel 發布 3.0 :高效處理千億級別...

2021-01-12 雷鋒網

雷鋒網 AI 開發者按:近日,緊跟華為宣布新的 AI 框架即將開源的消息,騰訊又帶來了全新的全棧機器學習平臺 angel3.0。新版本功能特性覆蓋了機器學習的各個階段,包括:特徵工程、模型訓練、超參數調節和模型服務。自 2017 年 angel1.0 在 Github 上開源以來,angel 共獲得星標數超過 4200、fork 數超 1000。騰訊發布了相關文章介紹了 angel3.0 更新細節等內容,雷鋒網 AI 開發者將其整理編輯如下。

Angel 概述

Angel 是基於參數伺服器架構的分布式計算平臺,專注於稀疏數據高維模型訓練以及大規模圖數據分析問題,它由騰訊與北京大學聯合研發,融合了業界的實用性和學術界的創新性。相比於 TensorFlow, PyTorch 和 Spark 等業界同類平臺,Angel 有如下特點:

Angel 是一個基於 Parameter Server(PS)理念開發的高性能分布式機器學習平臺,PS 架構良好的橫向擴展能力讓 Angel 能高效處理千億級別的模型。

Angel 具有專門為處理高維稀疏特徵特別優化的數學庫,性能可達 breeze 數學庫的 10 倍以上。

相比之下,Angel 更擅長於推薦模型和圖網絡模型相關領域(如圖 1 所示),與 Tensorflow 和 PyTouch 的性能形成互補。

 

圖 1 Angel 與主流平臺的性能分布圖

Angel 3.0 系統架構

Angel 自研的高性能數學庫是整個系統的基礎,Angel 的 PS 功能和內置的算法內核均基於該數學庫實現。

Angel PS 則提供參數存儲和交換服務。在 3.0 版本中,我們對 Angel PS 功能進行了擴展,使得它可以存儲任意類型的對象,例如:在圖算法的實現過程中,我們使用 Angel PS 來存儲大量複雜的對象。ML core 則是 Angel 自研的一套算法內核,它支持自動求導,可以使用 JSON 配置文件定義和運行算法。

除此之外,Angel 3.0 中還集成了 PyTorch 來作為計算引擎。目前它支持 3 種計算框架:原生的 Angel,Spark On Angel(SONA)和 PyTorch On Angel(PyTONA),這些計算框架可以使得 Spark 和 PyTorch 用戶能夠靈活切換到 Angel 平臺。最上層包括了兩個公共組件:AutoML 和模型服務。

圖 2 Angel 3.0 架構

Angel 3.0 新特性

自動特徵工程:新增特徵選擇和組合方法,將特徵合成、選擇和重新索引以 pipeline 的形式呈現,用來迭代生成高階合成特徵;

新的計算引擎:SONA(加強)——特徵工程支持索引為 Long 類型的向量;所有的算法被封裝成 Spark 風格的 APIs;SONA 上的算法可以作為 Spark 的補充;PyTONA(新)—— PyTONA 作為圖學習算法的引擎被引入,目前支持 GCN 和 GraphSage,同時也支持推薦領域的算法;

自動機器學習:Angel3.0 引入了 3 種超參數調節算法,包括:網格搜索、隨機搜索和貝葉斯優化;

Angel 模型服務:Angel 提供一個跨平臺的模型服務框架,支持 Angel、PyTorch 和 Spark 的模型,性能上與 TensorFlow Serving 相當;

Kubernetes:Angel3.0 支持 Kubernetes,可以在雲上運行;

 

圖 3 Angel 3.0 特性概覽(紅色的表示新增特性,白色的表示已有的但在持續改進的特性)

具體特性實現

自動特徵工程

特徵工程,例如:特徵交叉和選擇,對於工業界的機器學習應用具有重要意義。雖然 Spark 提供了一些特徵選擇算子,但仍有一些局限性,Angel 則基於 Spark 提供了更多的特徵選擇算子:

大多數在線推薦系統經常選擇線性算法,例如邏輯回歸作為機器學習模型,但邏輯回歸需要複雜的特徵工程才能實現較高的精度,這使得自動特徵合成至關重要。但是,現有的自動化的高階特徵合成方法帶來了維度災難。

為了解決這個問題,Angel 實現了一種迭代生成高階合成特徵的方法,每次迭代由兩個階段組成,即擴增階段——任意特徵的笛卡爾積;縮約階段——特徵選擇和特徵重索引;具體迭代步驟為:

圖 4 自動特徵工程流程

如圖 4 所示,這種特徵合成方法線性地增加特徵數量,避免了維度災難。在 Higgs 數據集上的實驗表明合成的特徵能有效地提高模型精度(如表 1 所示)。

表 1 特徵合成結果

Spark On Angel (SONA)

在 Angel 3.0 中,我們對 Spark On Angel 做了大幅度的優化,添加了新的特性:

Spark On Angel 中集成了特徵工程。在集成的過程中並不是簡單地借用 Spark 的特徵工程,我們為所有的運算支持了長整型索引的向量使其能夠訓練高維稀疏模型;

與自動調參無縫連接;

Spark 用戶能夠通過 Spark-fashion API 將 Spark 轉換成 Angel;

支持兩種新的數據格式,即 LibFFM 和 Dummy。

 

圖 5 Spark On Angel 架構

除了這些大的特徵,我們也在持續完善 Spark On Angel 的算法庫,添加了一些新的算法,例如:Deep & Cross Network(DCN)和 Attention Factorization Machines(AFM)等;同時,對已有的算法做了大量的優化。圖 6 提供了一個基於 Spark On Angel 的分布式算法示例,主要包含以下步驟: 

圖 6 Spark On Angel 算法示例

在程序開始時啟動參數伺服器,程序結束時關閉參數伺服器;

將訓練集和測試集以 Spark DataFrame 形式加載;

定義一個 Angel 模型並以 Spark 的參數設置方式為其設置參數。在這個示例中,算法是一個通過 JSON 定義的計算圖;

使用「fit」方法來訓練模型;

使用「evaluate」方法來評估已訓練的模型。

在訓練完成後,Spark On Angel 將會展示多種模型指標,如:準確率, ROC 曲線, AUC 等。用戶可以保存訓練好的模型以便下次使用。

PyTorch On Angel(PyTONA)

PyTorch On Angel 是 Angel 3.0 新增的特性,它主要是為了解決大規模圖表示學習和深度學習模型訓練問題。在過去幾年時間,圖卷積神經網絡(GNN)快速發展,一系列的研究論文以及相關的算法問世:例如 GCN,GraphSAGE 和 GAT 等,研究和測試結果表明,它們能夠比傳統圖表示學習更好的抽取圖特徵。

但大規模圖的表示學習面臨著兩個主要的挑戰:第一個挑戰來自於超大規模圖結構的存儲以及訪問,這要求系統不僅能存得下,還需要提供高效的訪問接口;第二個挑戰來自於 GNN 計算過程,它需要有高效的自動求導模塊。

通過對 Angel 自身狀況以及對業界已有系統的分析,我們發現:

為了將兩者的優勢結合起來,我們基於 Angel PS 開發了 PyTorch On Angel 平臺,希望通過 Angel PS 來存儲大模型,同時使用 Spark 來作為 PyTorch 的分布式調度平臺。最終得到 PyTorch On Angel 的架構如圖 7 所示:

 

圖 7 PyTorch On Angel 系統架構

PyTorch On Angel 具有 3 個主要的組件:

Angel PS:存儲模型參數,圖結構信息和節點特徵等,並且提供模型參數和圖相關數據結構的訪問接口,例如需要提供兩跳鄰接訪問接口;

Spark Driver:中央控制節點,負責計算任務的調度和一些全局的控制功能,例如發起創建矩陣、初始化模型、保存模型、寫 checkpoint 以及恢復模型命令;

Spark Worker:讀取計算數據,同時從 PS 上拉取模型參數和網絡結構等信息,然後將這些訓練數據參數和網絡結構傳給 PyTorch,PyTorch 負責具體的計算並且返回梯度,最後 Spark Worker 將梯度推送到 PS 更新模型。

這些組件都已封裝完備,因此在 PyTorch On Angel 平臺上開發新算法,只需關注算法邏輯即可。圖 8 展示了一個開發案例,算法開發完成後,將代碼保存為 pt 文件,然後將 pt 文件提交給 PyTorch On Angel 平臺就可以實現分布式訓練了。

圖 8 在 PyTorch On Angel 上實現 GCN 的例子

目前,我們已經在 PyTorch On Angel 上實現了許多算法:包括推薦領域常見的算法(FM,DeepFM,Wide & Deep,xDeepFM,AttentionFM,DCN 和 PNN 等)和 GNN 算法(GCN 和 GraphSAGE)。在未來,我們將進一步豐富 PyTorch On Angel 的算法庫。

結合了 PyTorch 和 Angel 的優點,PyTorch On Angel 在算法性能方面有很大的優勢:對於推薦領域常見的深度學習算法,性能可以大大超過了 TensorFlow 。下圖是在公開的數據集 criteo kaggle2014(4500 萬訓練樣本,100w 特徵)上做的對比測試: 

圖 9 PyTorch On Angel 和 TensorFlow 性能對比測試

除了性能方面的優勢,PyTorch On Angel 易用性也較好。PyTorch 運行在 Spark 的 Executor 中,可以實現 Spark 圖數據預處理和 PyTorch 模型訓練的無縫對接,在一個程序中完成整個計算過程。

自動超參數調節

傳統超參數調節的方式有兩種(如圖 10 所示):

 

圖 10 網格搜索和隨機搜索

貝葉斯優化與傳統的無模型方法不同,它使用計算成本較低的代理函數(surrogate function)來近似原始目標函數。在貝葉斯優化中,代理函數生成超參數組合的概率均值和方差。然後,效用函數(acquisition function)將評估超參數組合的預期損失或改進。這樣的概率解釋方法使貝葉斯優化能夠使用較少的成本找到目標函數的較優解。

Angel 3.0 包括傳統的兩種方法和貝葉斯算法優化。對貝葉斯優化,Angel 實現了以下的功能:

由於每次評估目標函數的計算成本可能較大,如果觀察到候選超參數組合在開始的若干輪迭代中表現不佳,可以提前停止這些候選超參數組合。Angel 3.0 版本中實現了該策略。表 2 展示了在邏輯回歸算法的實驗,調節的超參數是學習速度和學習速度衰減率,結果顯示貝葉斯優化的性能優於隨機搜索和網格搜索,而隨機搜索的結果略優於網格搜索。

表 2 不同超參數自動條件方法的效果對比

Angel Serving

為了滿足在生產環境中高效地進行模型服務的需求,我們在 Angel 3.0 中實現了 Angel Serving 子系統,它是一個可拓展性強、高性能的機器學習模型服務系統,是全棧式機器學習平臺 Angel 的上層服務入口,使 Angel 生態能夠形成閉環。圖 11 展示了 Angel Serving 的架構設計。 

圖 11 Angel Serving 架構

Angel Serving 主要特徵包括:

支持多種類型的 API 訪問服務,包括 gRPC 和 Restful 接口;

Angel Serving 是一個通用的機器學習服務框架。可插拔機制設計使得來自其他第三方機器學習平臺的模型可以與 Angel Serving 兼容,目前已經支持三種平臺的模型:Angel,PyTorch 和支持 PMML 模型格式的平臺(Spark、XGBoost 等);

受 TensorFlow Serving 的啟發,Angel Serving 提供細粒度版本控制策略。包括使用模型的最早、最新以及指定版本進行服務;

Angel Serving 還提供豐富的模型服務監控指標,包括:QPS(每秒請求數)、總的請求數以及成功請求總數、請求的響應時間分布以及平均響應時間。

表 3 Angel Serving 和 Tensorflow Serving 性能對比

表 3 展示了 Angel Serving 和 TensorFlow Serving 性能對比結果,我們使用具有 100 萬個特徵的 DeepFM 模型,向服務發送 100,000 個預測請求。Angel Serving 和 TensorFlow Serving 的總耗時分別為 56 秒和 59 秒。兩個服務系統的平均響應時間都為 2 毫秒。Angel Serving 的 QPS 是 1,900,而 TensorFlow Serving 的 QPS 是 1,800。

Angel 開源地址:

https://github.com/Angel-ML

雷鋒網(公眾號:雷鋒網) AI 開發者 雷鋒網

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • TensorFlow 這麼厲害了麼?
    2017 年 02 月,Tensorflow 正式發布了 1.0.0 版本,同時也標誌著穩定版本的誕生。去年的這個時候,谷歌官方在 TensorFlow Dev Summit 上發布了 TensorFlow 2.0 的 Alpha 版本。
  • 資源| TensorFlow版本號升至1.0,正式版即將到來
    現在,TensorFlow 的一歲生日之後兩個月,TensorFlow 社區終於決定將 TensorFlow 的版本號升至 1.x,並也已於昨日發布了 TensorFlow 1.0.0-alpha,其新增了實驗性的 Java API,並且提升了對 Android 的支持。
  • Tensorflow基礎教程15天之創建Tensor
    在將Tensor定義為Variable之後,Tensorflow才會將其傳入計算圖。如何操作我們將在這裡介紹創建Tensor的主要方法。序列TensorTensorflow允許我們定義數組Tensor。
  • 機器學習庫 TensorFlow 1.9.0 發布,大量修復和改進
    機器學習庫 TensorFlow 1.9.0 已發布,更新內容如下:主要特點和改進1、tf.keras 文件升級: 新的基於 Keras
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    開發環境信息:Pixel, cpu type: ARM64Android 7.1.1Android NDK 15.2Android gradle plugin 2.3.0TensorFlow 1.3.0bazel 0.5.4-homebrew
  • TensorFlow 2.1指南:keras模式、渴望模式和圖形模式(附代碼)
    Keras模式import numpy as npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.layers import Input, Dense, Flatten, Conv2Dfrom tensorflow.keras
  • 觀點| 別再使用pip安裝TensorFlow了!用conda吧~
    而使用 conda 安裝 GPU 加速版本的 TensorFlow 時,只需使用命令 conda install tensorflow-gpu,這些庫就會自動安裝成功,且版本與 tensorflow-gpu 包兼容。此外,conda 安裝這些庫的位置不會與通過其他方法安裝的庫的其他實例產生衝突。
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    建立虛擬環境:conda create --name tf36gpu python=3.6 anaconda2. 激活虛擬環境:activate tf36gpu3. 開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1.
  • TensorFlow 2入門指南,初學者必備!
    英語原文:Getting Started with TensorFlow 2翻譯:雷鋒字幕組(贇瑾和鳴、大表哥)什麼是Tensorflow?TensorFlow是谷歌推出的深度學習框架,於2019年發布了第二版。
  • 使用Amazon SageMaker 運行基於 TensorFlow 的中文命名實體識別
    運行代碼我們需要進入一個虛擬環境tensorflow_p36,該環境預製了運行TensorFlow所需要的常用組件,運行run_train.sh進行訓練,命令如下:cd ~/SageMaker/albert-chinese-nersource activate tensorflow_p36.
  • TensorFlow 2.4來了:上線對分布式訓練和混合精度的新功能支持
    編輯:小舟、蛋醬今天,谷歌正式發布了 TensorFlow 2.4,帶來了多項新特性和功能改進。import tensorflow.experimental.numpy as tnp# Use NumPy code ininput pipelinesdataset = tf.data.Dataset.from_tensor_slices( tnp.random.randn(1000, 1024)).map(lambda z: z.clip(-1,1
  • 從系統和代碼實現角度解析TensorFlow的內部實現原理 | 深度
    目前就職於騰訊MIG事業部,從事神經機器翻譯工作。摘要2015年11月9日,Google發布深度學習框架TensorFlow並宣布開源,並迅速得到廣泛關注,在圖形分類、音頻處理、推薦系統和自然語言處理等場景下都被大面積推廣。
  • 拓撲機器學習的神聖三件套:Gudhi,Scikit-Learn和Tensorflow(附...
    比如,如果r=3.5,得到的點雲似乎覆蓋了整個單位正方形,但如果r=4.1,單位正方形的一些區域就是空的:換句話說,在你的點雲裡有好多洞。這對我們是個好消息:TDA可以直接計算這些結構是否能出現。r=3.5(左)和r=4.1(右)計算出的點雲。相當明顯的是後者有個洞,但前者沒有TDA跟蹤這些洞的方式實際上相當簡單。
  • Apache Airflow 2.0 發布,Airbnb 開源的調度系統
    Apache Airflow 2.0.0 已正式發布,Airflow 是一個靈活、可擴展的工作流自動化和調度系統,可編集和管理數百 PB 的數據流。
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    TensorFlow· 開發者:Google· 2017年1月發布1.0版本PyTorch· 開發者:Facebook· 2018年10月發布1.0版本· 基於Torch開發(Torch是基於Lua開發的另一個深度學習框架)Keras· 是一個高級API,降低了深度學習框架的複雜程度
  • 用TensorFlow和Keras構建卷積神經網絡
    筆者已經編寫了一個如何使用TensorFlow的KerasAPI來訓練神經網絡的教程,著重介紹了自動編碼器:http://www.datastuff.tech/machine-learning/autoencoder-deep-learning-tensorflow-eager-api-keras/本文將嘗試三種不同的體系結構,優中選優。
  • 用RNN和TensorFlow創作自己的《哈利波特》小說
    在處理這樣的大型數據集時,一個語料庫中不重複單詞的總量遠遠高於唯一字符的數量。一個大型數據集有許多不重複的單詞,當為如此大的矩陣分配獨熱編碼時,很可能會遇到內存問題。光是標籤本身就可以佔據Tb級的內存。用來預測單詞的原則也可以應用在這裡,但是現在要處理的詞彙量要小得多。
  • 使用Tensorflow+OpenCV構建會玩石頭剪刀布的AI
    ,'scissor':np.array([0.,0.,1.,0.]),'ok':np.array([0.,0.,0.,1.])}https://towardsdatascience.com/data-augmentation-for-deep-learning-4fe21d1a4eb9通過遷移學習建立我們的模型:在處理圖像數據時,有許多經過預訓練的模型可供使用,這些模型已經在具有數千個標籤的數據集上進行了訓練,由於這些模型通過其應用程式api的Tensorflow
  • PaddlePaddle 2.0.0 Beta 發布,API 體系升級,命令式編程完善
    PaddlePaddle 2.0.0 Beta 已經發布,這是飛槳框架v2.0的測試版,最重要的變化為API體系的全面升級以及命令式編程(動態圖)能力的全面完善。
  • 谷歌發布MobileNetV2:可做語義分割下一代移動端計算機視覺架構
    此外,隨著新應用的出現,用戶可以與真實世界進行實時交互,因此我們對更高效的神經網絡有著很大的需求。今天,谷歌很高興地宣布下一代移動視覺應用 MobileNetV2 已經發布。MobileNetV2 在 MobileNetV1 的基礎上獲得了顯著的提升,並推動了移動視覺識別技術的有效發展,包括分類、目標檢測和語義分割。