如何從實驗轉向構建生產機器學習應用程序
時間: 2019-07-01來源: Nisha Talagala
將機器學習(ML)實驗從筆記本電腦或數據科學實驗室進行到生產的過程并不是很多人都有過的經驗。數據科學家們經常肩負著這項艱巨的任務,因為他們了解機器學習算法,而且很可能是他們首先提出的。
這篇文章描述了如何開始一個成功的生產機器學習業務生命周期(MLOps),通過在生產服務中從一個有前景的ML實驗轉移到相同算法的最小可行性產品(MVP)。MVP在產品開發中很常見,因為它們可以幫助客戶快速獲得產品/服務,只要有足夠的特性使其可行,并推動下一個基于使用反饋的版本。在機器學習上下文中,MVPs幫助分離生產ML服務的關鍵需求,并幫助以更小的努力交付它。
我們描述的生產機器學習MVP的步驟是從過去幾年與數據科學家和組織的數百個用例和經驗中總結出來的。如下圖所示:
圖1:從開發人員實驗到生產ML的路徑
步驟1:確定您的用例:您想要做什么?
這似乎是顯而易見的,但是第一步是了解您的業務應用程序的的更低需求是什么,以及您的實驗和更低需求之間的差距。例如,如果您的實驗假設可用的特性比業務應用程序能夠提供的特性更多,那么這種差距可能會影響生產。找到這種差距的更佳方法是定義支持您的業務應用程序的機器學習應用程序。
以下是一些你需要回答的問題:
• 從ML的角度來看,這個ML應用程序將幫助解決什么業務問題?
• ML app需要預測什么?它將接收什么輸入?
• 是否有足夠的數據來訓練模型和度量有效性?這些數據是否干凈、可訪問等?用于實驗的數據可能是人工清理的。生產培訓數據也需要清理。
• 是否有初步的實驗(在開發人員/筆記本/筆記本電腦環境中)顯示出一種有前景的算法方法來交付必要的預測/質量?
• ML應用程序需要如何與業務應用程序(REST、Batch等)集成?
一旦這些問題得到了回答,您就可以大致了解ML應用程序在MVP中需要什么。這為步驟2和步驟3奠定了基礎。
步驟2:開列狀態清單:你有什么?
一旦確定了用例,下一步是整合起始狀態,以便您可以將旅程映射到目的地。啟動狀態的典型特征包括以下來自所需機器學習應用程序的開發人員級原型的構件:
• 數據科學家環境中的一個軟件程序,如Jupyter筆記本、R開發人員環境、Matlab等。該代碼通常執行初始(有前景的)機器學習模型和實驗。
• 此代碼已通過一個或多個位于數據湖泊或數據庫等中的數據集運行。這些數據湖泊和數據庫是客戶正常數據中心基礎設施環境的一部分。這些數據集可能存在于筆記本電腦中,也可能需要移動到數據湖中。
• 在這些開發人員環境中運行了培訓代碼,有時還存在示例模型。
在許多方面,這種啟動狀態類似于其他(non-ML)域中的軟件原型。與其他軟件一樣,原型代碼可能沒有使用生產版本中所期望的所有連接器、規模因素和加強功能來編寫。例如,如果生產版本需要從云對象存儲庫讀取數據,而您的實驗需要讀取存儲在筆記本電腦的數據,則需要將對象存儲連接器添加到生產管道代碼中。類似地,如果您的實驗代碼在出現錯誤時退出,這對于生產來說可能是不可接受的。
還有一些特定于機器學習的挑戰。例如:
• 這里生成的模型可能需要導入來引導生產管道。
• 可能需要將特定于ML的檢測添加到代碼中,例如,報告ML統計信息、生成特定于ML的警報、收集檢測(執行的統計數字)作長期分析等用。
步驟3:定義你的MVP產品
現在您已經準備好定義MVP:您將在生產中使用的第一個基本服務。為此,您需要確定第一個生產位置,即代碼運行的第一個位置。
• 這在很大程度上取決于您的環境。一個短期的選擇可能是您為其他應用程序(non-ML等)提供的數據中心基礎設施中。您可能還有一個長期的觀點,包括與軟件或云和服務策略的其他方面的集成。
除了確定第一個位置外,你還需要處理以下事項:
• 訪問數據湖等可以是通用的,除非組織(特別是企業)設置了應用于分析使用的特定數據訪問限制。
• 必須安裝機器學習引擎(Spark、TensorFlow等)。如果使用容器,這可能是非常通用的。如果使用分析引擎,它可能具有很高的機器學習特性。需要找到并包含所有依賴項(您的管道運行需要訪問哪些庫,等等)。
• 需要進行分析引擎和容器大小調整,以確保初始測試和調試的性能范圍是合理的。測試和調試將是迭代的。
• 需要定義升級過程。例如,如果您決定升級您的管道代碼,并且它需要以前沒有安裝的新庫,那么您將需要考慮如何處理它。
步驟4:為生產準備代碼
現在,您需要考慮您的實驗(如果有的話)中的哪些代碼需要在生產中使用。如果您不打算在生產中重新培訓模型,那么您需要考慮的代碼只是用于推理。在這種情況下,一個簡單的解決方案可能是部署由供應商提供的預定義推理管道。
如果您計劃在生產環境中進行再培訓,或者有一個自定義需求,但是預構建的推理管道不能滿足這個需求,那么您將需要為生產準備您的實驗代碼,或者構建任何您的實驗代碼中沒有的新的生產功能。作為其中一部分,你需要考慮以下幾點:
• 淬火生產(錯誤處理等)
• 模塊化以便重用
• 調用連接器,以便在步驟3中標識的生產位置之間檢索和存儲數據。
• 您將把代碼保存在哪里(Git等)?
? 您應該添加什么工具來確保您可以檢測和調試模型的生產問題?
步驟5:構建一個機器學習應用程序
既然已經準備好了所有代碼塊,現在就可以構建機器學習應用程序了。為什么這與只是構建管道不同?為了在生產中可靠地執行,還需要確保編排管道、管理和版本模型以及其他輸出等的機制也到位。這包括如何在生成新模型時更新管道,以及如何在改進了管道代碼后將新代碼投入生產。
如果您正在讓生產機器學習運行,您可以在運行時中配置ML應用程序,并將其連接到您在步驟1到4創建的代碼和其他構件中。圖2顯示顯示了一個由ParallelM在MCenter運行時生成的示例ML應用程序。
圖2:一個ML應用程序示例
步驟6:將機器學習應用程序部署到生產環境中
一旦有了機器學習應用程序,就可以部署了!要進行部署,您需要啟動ML應用程序(或其管道)并將它們連接到您的業務應用程序。例如,如果使用REST,您的ML應用程序將在啟動時創建一個REST端點,您的業務應用程序可以調用它進行任何預測(參見圖3)。
圖3:ML應用程序生成一個REST服務供業務應用程序使用
請注意,部署可以被認為是MVP的“完成”,但這絕不是您旅程的終點。一個成功的機器學習服務將運行數月或數年,在此期間需要管理、維護和監視。
根據您在步驟5中選擇的解決方案,部署可以是自動化的,也可以是手動的。MLOps運行時工具提供自動部署。如果您在運行機器學習應用程序時沒有這些工具,您可能需要編寫腳本和其他軟件來幫助您部署和管理管道。您可能還需要與您的IT組織合作來完成此任務。
步驟7:做得更好
回想一下,在步驟3中,您可能選擇了一個短期位置來運行生產ML MVP。在步驟5和步驟6中部署MVP之后,您可能需要進一步的步驟來檢查MVP的結果,并重新考慮關鍵的基礎設施決策。現在代碼/MVP至少在第一個基礎設施中測試和運行,您可以比較和對比不同的基礎設施,看看是否需要改進。
步驟8:持續優化
注意,步驟3 - 7在此機器學習應用程序服務的業務用例的生命周期內不斷重復。機器學習應用程序本身可以重新定義、返回、傳輸到新的基礎設施,等等。您可以看到MVP是如何被使用的,您從您的業務中得到了什么反饋,并相應地進行改進。
MLOps還有什么?
MLOps是在生產環境中部署和管理模型的綜合實踐。上面的步驟顯示了如何通過部署第一個模型開始使用MLOps。一旦您采取了上述步驟,您將在生產中至少有一個機器學習應用程序,然后您將需要在其生命周期中對其進行管理。然后,您可能需要考慮ML生命周期管理的其他方面,例如管理模型的治理,遵守您的業務的任何監管需求,制定kpi以評估ML模型為業務應用程序帶來的好處,等等。
我們希望這篇文章對你有用。
(編譯自:How to Move from Experimentation to Building Production Machine Learning Applications,作者: Nisha Talagala)