閱讀145 返回首頁    go 英雄聯盟


自定義算法開發__產品簡介_推薦引擎-阿裏雲

本節簡要說明在RecEng中開發自定義算法的過程,具體技術細節參見離線算法開發手冊在線算法開發手冊實時修正算法開發手冊

自定義算法和RecEng預置的係統算法的區別在於自定義算法隻有開發者自己可見,而係統算法所有客戶可見。

離線算法開發

RecEng的離線計算都運行在MaxCompute(原ODPS)上,所有的離線算法都用Java編寫,需要符合MaxCompute的要求。MaxCompute支持的三類離線算法,包括SQL腳本,MapReduce程序,和基於圖模型的算法,這三類算法都可以用於開發RecEng的自定義算法。RecEng做的工作是把離線算法組織成為算法流程,以類似批處理的方式運行。為了達到這個目的,RecEng提供了一套SDK,負責向客戶自定義算法傳遞上下文參數,並接收客戶自定義算法的輸出,根據算法流程的配置再將其傳遞到對應的算法節點。

所以客戶在開發自定義算法時分為以下幾個步驟:

1.下載離線算法開發SDK包,包中已經包含所需的MaxCompute依賴庫。

2.將SDK包集成到本地開發工具,如eclipse中。

3.開發遵循MaxCompute規範的離線算法,可以是SQL腳本,MapReduce程序,或圖模型程序,並單元測試。MaxCompute上離線算法的開發和測試請參考大數據計算服務MaxCompute快速入門手冊中運行SQL、編寫MapReduce、編寫Graph等章節。

4.利用RecEng的SDK將算法集成到RecEng框架中。

5.在RecEng的算法注冊頁麵上將開發好的jar包注冊到RecEng中。客戶隻需要把自己開發的程序編入jar包即可,SDK及依賴包都不需要編入。

6.注冊完成後即可在算法流程配置界麵中使用自定義算法。

也可以參考離線算法開發樣例

在線算法開發

在線算法開發相對簡單。在線算法由Node.js編寫,都運行在RecEng的在線環境中,客戶不需要準備運行環境,直接在RecEng的在線代碼開發頁麵上編寫代碼並提交即可。

和離線算法一樣,在線算法也是有類別的,如前所述,在線算法的類別由輸入輸出的標準數據集決定,客戶在編寫在線算法時,首先在在線代碼開發頁上確定在線算法的類別,明確算法的輸入輸出後即可編寫。編寫完成後可利用自定義的默認參數功能進行單元測試。

所有這些操作都在RecEng中完成,客戶不需要配置Node.js環境。

雖然RecEng提供了多種實時流程,應用在這些實時流程中的自定義在線算法其實區別並不大。以推薦流程的在線流程(rec_path->online_flow)為例,自定義在線算法需要從環境變量CTX中獲取各種必要的數據,也可根據需要去指定讀/寫保存在在線存儲中的某些數據,不過出於安全的考慮,所有讀/寫外部的在線存儲都需要通過指定的SDK進行訪問,不允許自定義代碼直接訪問外部在線存儲。獲得了所有必要的信息後自定義代碼執行邏輯,並將最終輸出的結果也保存在環境變量CTX中。RecEng會自動將CTX中的結果發送出去。

實時計算和離線計算最大的區別在於實時計算要追求低延遲,用到的數據是在某個窗口之內的,而離線計算用到的是全量數據。所以在編寫在線算法的時候要注意算法的效率,每一次訪問在線存儲,每一次大循環都會造成round-trip(RT)的增加。比如對推薦API來說,不考慮傳輸延時的情況下,僅由計算導致的時延不要超過50毫秒;一般來說,每次讀取在線存儲的時間代價大約是2-5毫秒;此外還需要預留一些時間給係統,這部分時間大約是15-20毫秒左右,所以推薦API中,所有自定義在線算法的總時延最好不要超過20毫秒。

最後更新:2016-11-23 16:04:13

  上一篇:go 全流程規範__產品簡介_推薦引擎-阿裏雲
  下一篇:go 測試__產品簡介_推薦引擎-阿裏雲