'「angel」騰訊angel核心接口類介紹'

算法 HDFS 機器學習 騰訊 數據結構 工程師 大數據科學家 2019-08-08
"
"
「angel」騰訊angel核心接口類介紹

一.核心接口類梳理:

1.PSModel:提供了常用的遠程矩陣(Matrix)和向量(Vector)的獲取和更新接口,使得算法工程師可以如同操作本地對象一樣的操作參數服務器上的分佈式矩陣和向量,它是一個可以進行反覆迭代更新的可變模型對象。

負責更新模型(矩陣或向量)

2.MLModel是一個抽象類,它需要在具體的機器學習算法實現中進行繼承。它是作為一個容器類,管理具體算法中的所有PSModel,作為一個整體模型被加載,訓練和保存。同時,它需要負責Predict的執行邏輯實現。

(管理PSModel作為一個整體的模型)

3.BaseTask是Angel的元計算類,

所有的機器學習算法,都要通過繼承它,來實現訓練或者預測過程。它運行於Worker之內,Task可以共享一個Worker中的某些資源。

(整個訓練、預測過程都在Task中完成)

Task基本流程兩步驟:

(1).訓練數據讀取 (parse和proprocess方法讀取數據到datablock中)

(2).計算(訓練 or 預測)

核心方法:run:模型訓練過程。

4.MLLearner (真正做訓練的核心類)

MLLearner調用自己的Learn方法,讀取DataBlock,計算出模型的更新,並通過MLModel中的PSModel,和PSServer進行不停的Push和Pull,最終得到一個完整的MLModel.

功能:不斷讀取DataBlock,訓練得到MLModel模型;train方法:使用算法對訓練數據進行訓練,得到模型。

5.Angel算法的啟動入口類。

它定義了啟動Angel任務的標準流程,封裝了對 AngelClient的使用。

6.datablock: (數據結構)

DataBlock是數據塊管理和存儲基類,它提供了基本的數據存取接口,非常適合一次寫入,多次讀取的場景(例如訓練數據集)

DataBlock可以看作是一個可以可以動態增長的"數組",新加入的對象只能放置在數組的末尾, 它在內部維護了讀寫索引信息。

TrainTask調用parse和preProcess方法,將數據從HDFS中讀取,並組裝成為多個LabeledData組成的DataBlock。

TrainTask調用Train方法,創建MLLearner對象,並將DataBlock傳給MLLearner。

二.附加功能

GlobalMetrics:全局的統計這些各種各樣的指標,而這些指標,在單獨的一個Worker上的變化,是沒有太大意義的,往往需要全局彙總,從整體上來觀察這些值的變化

ModelLoader(模型加載)

在模型訓練完成後需要將模型投入生產環境。為了更好的與其他系統對接,讓其他系統更好的使用Angel訓練好的模型,Angel提供了一個模型加載工具, 即ModelLoader類。

ModelConverter(模型轉換器)

Angel任務結束時,PSModel的模型寫入,會默認以二進制文件格式存儲,這樣可以有更好的速度和節省空間,然而有些用戶必須使用文本格式的模型。為此,Angel提供了ModelConverter類,可以將模型文件從二進制轉換成明文,從而讓用戶更方便的使用。

ModelMergeAndConverter(模型合併轉換器)

ModelMergeAndConverter與ModelConverter均可以將二進制的模型格式文件轉換成文本格式,不同的是ModelConverter轉換後的模型文件仍然是多個的,而ModelMergeAndConverter則會先將模型分區合併,然後輸出到一個文件中。由於ModelMergeAndConverter需要在內存中將模型合併成一個整體,而且由於要輸出到同一個文件中而無法併發寫,所以它需要耗費更多的時間,轉換的時間也更長。因此推薦在模型不是太大的時候使用ModelMergeAndConverter。

三.訓練流程

如上圖所示,Angel的核心接口類,在Train的過程中,按照調用的流程,大體為:

  1. MLRunner
  • MLRunner根據Conf,從工廠類,創建AngelClient,按照標準的Train流程開始依次調用AngelClient的各接口
  • AngelClient
  • 啟動PSServer
  • 在PSServer上進行初始化,加載空白的模型
  • 訓練完成後,將模型從多個PSServer,保存到HDFS
  • TrainTask
  • 被AngelClient調用後,開始Train過程
  • DataBlock
  • TrainTask調用parse和preProcess方法,將數據從HDFS中讀取,並組裝成為多個LabeledData組成的DataBlock
  • TrainTask調用Train方法,創建MLLearner對象,並將DataBlock傳給MLLearner
  • MLLearner
  • MLLearner調用自己的Learn方法,讀取DataBlock,計算出模型的更新,並通過MLModel中的PSModel,和PSServer進行不停的Push和Pull,最終得到一個完整的MLModel
  • MLModel
  • 根據算法的需要,創建並容納多個PSModel
  • PSModel
  • 封裝了AngelClient中和PSServer的所有通信接口,方便MLLearner調用

瞭解這些核心類和流程,對基於Angel實現高性能的機器學習算法,將會有不錯的幫助。

Angel文章列表:

1.騰訊高性能計算平臺 Angel入門

"

相關推薦

推薦中...