「Kubernetes的組合性、可攜性和擴展性等三大特點,可以解決機器學習工作流程的複雜問題,」露天研發創新部主任張家棠指出,這也滿足了企業中不同團隊的作業環境要求。

「機器學習工作流程不只是清理資料、訓練模型,還包括模型部署、轉換為線上服務、維持服務不中斷,甚至還有GPU資源調度等問題。」露天拍賣研發創新部主任張家棠指出,能解決機器學習(ML)工作流程痛點的幫手,就是容器管理平臺Kubernetes(K8s)。

K8s三大特點優化ML工作流程

Kubernetes擁有三大特點,分別是組合性(Composability)、可攜性(Portability)和擴展性(Scalability)。就第一點來說,機器學習工作流程包括資料前處理、模型訓練、部署和維運等數十個階段。而Kubernetes提供了可組合的控制流程,讓使用者依其需求,透過模組化來完成這些步驟,也不須要集中式控制流程。

再來,可攜性能解決模型訓練問題,比如開發環境。舉例來說,相同的程式碼由不同工程師執行,可不一定每次都成功,「這就是環境問題。」張家棠指出,Kubernetes微服務可將環境內容標準化,解決開發環境問題,而且「不管是透過筆電還是本機開發,只要將內容封裝好,就能輕鬆在正式環境執行。」

接下來則是擴展性。Kubernetes擴展性優點包括對CPU、GPU和記憶體資源的調度,但在張家棠眼中,擴展性真正的價值,在於能應付企業中不同團隊所需的作業環境要求。

專屬套件降低K8s與ML工作流程執行門檻

不過,要真正駕馭Kubernetes,並非易事。為了讓開發者更快上手,張家棠點名Kubeflow,也就是一套開源機器學習工具,「有如一個組合包,內含許多機器學習套件,供使用者安裝,」簡化了在Kubernetes上執行機器學習任務的流程。再加上Kubeflow以Kubernetes為基礎,因此只要在Kubernetes環境中,就能執行Kubeflow,達到簡單、可攜且可擴充的目的。

然而,Kubeflow並非適用於所有機器學習工作,它的強項在於模型建置、訓練,以及平行處理和模型部署(Serving)等流程。

其中,就平行處理來說,由於機器學習工作並非只是資料搜集、訓練模型、模型部署等如此直線進行的流程,而是由多個任務(Task)組成,有些任務必須要按照事先定義的順序來執行,有些任務則會依賴其他任務,還有些任務則是要同時執行。這個現象,就有如點狀發散的有向無環圖(DAG)般複雜,需要平行處理才能應付。

而Kubernetes CRD原生套件Argo Workflow,能夠解決這個問題。Argo Workflow是一套工作流程任務調度工具,可針對多步驟(Step)的工作流程來建模,使之成為一序列任務,也能利用DAG來找出不同任務間的相依性。它的特點包括跨程式語言、能即時更新日誌(Log),方便工程師隨時掌握工作流程狀態,此外還提供視覺化的使用者介面,方便監控作業動態。

在Argo Workflow提供的多種工作流程功能中,張家棠最推薦Loop、DAG-Diamond-step和Daemon-nginx。他指出,有別於一次只能執行一個步驟的傳統程式化腳本(Shell script),Loop可一次平行執行兩個以上的步驟,而DAG-Diamond-step則更進一步,專門鎖定如DAG般複雜的流程,使用者可根據自身需求,來彈性設計任務執行的架構。再來,Daemon-nginx讓使用者在執行批次工作排程時,先設置一個Daemon,之後排程的內容照著Daemon即可。

露天研發創新部主任張家棠推薦Kubernetes CRD原生機器學習任務調度工具Argo Workflow中的DAG-Diamond-step功能,可以處理如DAG般複雜的機器學習工作流程,讓使用者自行設計任務執行的架構。(圖片來源/張家棠)

事件管理器彈性觸發和執行工作流程,露天靠它打造Chabot服務

設計完工作流程後,開發者還需要觸發(Trigger)和執行這些事件(Event),而Kubernetes事件管理器Argo Event則能彈性完成這兩項動作。

這個管理器主要由3個元素構成,分別是Event Source、Gateway和Sensor。Event Source是用來定義事件內容,再透過Gateway來處理事件,之後由Sensor定義事件相依性,並觸發Argo Workflow或Kubernetes資源,來執行事件。此外,Argo Event還擁有多項功能,像是網站訂閱通知(Webhook)、排程(Schedule)等。

露天也實際利用這些工具,來開發自家的客服機器人。張家棠指出,露天參考許多坊間聊天機器人,特別是Google的Chabot平臺Dialogflow,並以此為藍圖,開發出自家的客服機器人熊咩。

熊咩為任務型聊天機器人,只針對露天平臺提供問題選項與回答,而非由顧客輸入字句來進行開放式對話。也因此,模型訓練原理就像訓練分類器,目的是要將問題對應到正確解答。

於是,露天先建置了一個後臺,讓客服人員來處理資料前置工作,比如分類問題等。之後,團隊再設置一個按鈕,當客服人員處理完前置工作後,就可點擊來觸發重新訓練聊天機器人。「這個觸發就是Argo Event中的Webhook功能,可以連結Argo Workflow來取得資料、重新訓練模型。」

但是,機器學習模型經過不斷重新訓練、YAML設定檔不斷更新時,Argo Workflow也就變得複雜了。為解決這個問題,Kubeflow Pipline釋出一款軟體開發套件,不只大幅簡化撰寫複雜度,還附加了Metadata的設定,方便開發者在工作執行完後,來檢視工作內容。張家棠表示,這一點,對機器學習開發者來說特別有幫助,因為有利於比較兩套模型的差異和表現。

善用模型部署利器,露天以此建置點擊轉換率指標

模型訓練完成後,接下來,就是要將模型轉換為服務(Serving)。張家棠指出,這時有兩個工具可選擇,一個是TensorFlow Serving,另一個是Seldon。

首先,如果開發者利用TensorFlow開發模型,就可直接透過TensorFlow Serving來部署模型。TensorFlow Serving有幾個優點,包括只要將新訓練好的模型檔,存放於舊模型檔的資料夾,就能直接切換為新模型;再來則是加速機器學習模型訓練效果,透過批次功能,可一次輸入數百個樣本給機器,有效利用GPU資源。這一點,也能用來提高AI推論效率,也就是透過累積請求(Request)數量,到達設定時間後,再全部送往GPU處理。

另一方面,除了TensorFlow Serving,如果開發者使用TensorFlow以外的框架來開發模型,比如PyTorch、MLflow、XGBoost等,就可透過Seldon平臺來部署模型。

而露天的商品點擊轉換率指標,就是透過TensorFlow Serving來運行。張家棠解釋,點擊轉換率指標,是要來了解不同消費者對哪些產品有興趣;要做到這一點,首先要收集露天平臺上所有使用者的Log,將這些資料整理、標註之後來訓練模型,並利用每天更新的Log來重複訓練。最後,再透過TensorFlow Serving整合這些結果,交給後端API來呈現點擊率與轉換率的效果。

另一個應用案例則是商品個人化搜尋,露天透過個別使用者的搜尋歷史,來訓練AI模型、預測商品搜尋結果的排名。張家棠舉例,比如用關鍵字搜尋「三國」,就可能出現電視劇、遊戲等不同類型的商品,但根據使用者搜尋歷史,就能找出使用者的興趣領域,進而提升相關商品的搜尋排名。

張家棠也揭露,露天目前也正利用K8s進行以圖搜圖的AI專案,目標是要「跟上國際電商的腳步。」

 相關報導  企業K8s實戰在臺灣 


Advertisement

更多 iThome相關內容