MLOps is an emerging discipline and comprises a set of tools and principles to support progress through the ML project lifecycle. — Andrew Ng
擁有一個訓練完成且在測試集表現良好的模型是一件很值得慶祝的事,但除非把它們放進產品中,否則很難發揮它們最大的價值。
在挑戰的第一天已經提過 ML Code 在整個機器學習系統中只佔很小的一部分,讓我們來看看那張圖的另一個版本?
*圖片來源: AI 大規模應用的關鍵:ModelOps 打造「生生流轉」模型生態系
而正是這個原因使得我們在 Jupyter Notebook 驗證可行的模型還離生龍活虎、蹦蹦跳跳很遠,這段距離又被稱為 PoC to production gap,由上圖可以看出要填補這段距離有非常多的工作要做,光想到就覺得壓力很大。
因此在航向函式庫的海洋之前,需要準備一張地圖來幫助我們不至於迷失,這張地圖就像"雲黑齋的野心"裡鈴可教給小新的咒語一樣,是超級救命符,而且可以適用於任何情況!
以機器學習產品的生命週期作為地圖,可以幫助我們釐清成功建立機器學習系統該完成的工作:
*圖片修改自 Introduction to Machine Learning in Production
詳細的說明如下:
計畫 (Scoping):定義問題,決定機器學習實際會用在哪,並釐清模型的 X、Y 是什麼。
以語音辨識系統為例,首先決定要把語音辨識用於語音搜索後,接著要決定關鍵的 metrics,例如 Accuracy、Latency (轉譯成文字所需的時間)、Throughput (我們每秒可以處理多少 queries),最好也估計一下有多少資源與時間可以執行這個專案。
資料 (Data):收集所需的資料,並加以標注、管理。
資料定義最重要的是確定資料標注是否一致,不同標注者會有不同的標準,這會造成演算法錯亂。
建立模型 (Modeling):反覆訓練模型與錯誤分析,在進入下一步之前還可以執行最後評估來確定模型真的夠好。
在以往的研究環境中,主要的作法是將資料集固定不動,然後想辦法讓模型在這個 benchmark 上表現更好 (例如 ImageNet)。
但在產業上,若目標是要建立一個運作良好的系統,更好的作法是盡可能固定程式碼 (例如從 GitHub 下載 SoTA 模型的實作,並針對現有專案稍微修改),然後專注於優化資料的品質 (仰賴錯誤分析來告訴我們該收集哪些資料),必要時可以修改訓練集,甚至是測試集。
下圖中底線為顏色相對應之領域保持不變的部分:
*圖片修改自 Introduction to Machine Learning in Production
部署 (Deployment):部署成產品並持續監控、維護系統。
最常見的誤解為部署完模型就結束了,但實際上第一次部署模型只是成功的一半,通常在面對真實的資料之後才會發現模型尚未學習到的部份,也就是要建立資料飛輪。
而實作整個生命週期的流程就是所謂的 MLOps,其核心概念就在於系統性的思考生命週期的四個步驟以及支援它們的軟體工具,也就是說,所有的機器學習專案只要待配這張圖就有機會成功實踐 MLOps,進一步成為有用的產品!
以上就是機器學習產品的生命週期,雖然順序是由左至右,但我們已經知道部署是最重要也最有價值的技能,所以接下來的貼文會直接從最核心開始,以相反的順序講解,第一站就讓我們從部署時會遇到的困難開始吧,明天見啦!