適用於機器學習的DevOps
DevOps 和 MLOps
DevOps 被 Donovan Brown 在 什麼是 DevOps 中,描述為人員、流程和產品的 聯盟,以持續傳遞價值給終端使用者?。
若要瞭解使用機器學習模型時如何使用它,讓我們進一步探索一些基本的DevOps原則。
DevOps 是一種工具和作法的組合,可引導開發人員建立健全且可重現的應用程式。 使用DevOps原則的目標是要快速將價值傳遞給使用者。
如果您想要藉由在資料轉換管線或即時應用程式中整合機器學習模型,更輕鬆地提供價值,您將受益於實作 DevOps 原則。 瞭解DevOps可協助您組織和自動化工作。
建立、部署及監視強固且可重現的模型,以將價值傳遞給使用者,是 機器學習作業 的目標(MLOps)。
三個流程
每當我們談論機器學習運營(MLOps)時,我們想要結合三個流程:
ML 包含數據科學家負責的所有機器學習工作負載。 數據科學家會執行下列動作:
- 探索性資料分析(EDA)
- 特徵工程
- 模型定型和微調
DEV 是指軟體開發,其中包括:
- 方案:定義模型的需求和效能計量。
- 建立:建立模型定型和評分腳本。
- 確認:檢查程式代碼和模型品質。
- 套件:藉由預備解決方案來準備部署。
OPS 是指作業,包括:
- 發行:將模型部署到生產環境。
- 設定:使用 基礎結構即程式代碼 標準化基礎結構組態(IaC)。
- 監視:追蹤指標,並確保模型和基礎結構運行符合預期。
讓我們來看看一些對 MLOps 至關重要的 DevOps 原則。
DevOps 原則
DevOps 的核心原則之一是 自動化。 藉由自動化工作,我們渴望讓新的模型更快速地部署到生產環境。 透過自動化,您也會建立可在環境中可靠且一致的可重現模型。
特別是當您想要隨著時間定期改善模型時,自動化可讓您快速執行所有必要的活動,以確保生產中的模型一律是最佳執行模型。
達成自動化的關鍵概念是 CI/CD,其代表 持續整合 和 持續傳遞。
持續整合
持續整合涵蓋 建立 和 驗證 活動。 目標是建立程式代碼,並透過自動化測試來驗證程序代碼和模型的品質。
透過 MLOps,持續整合可能包括:
- 將 Jupyter 筆記本中的探勘程式代碼重構為 Python 或 R 腳本。
- Linting 檢查 Python 或 R 腳稿中是否有任何程式設計或文體錯誤。 例如,檢查文本中的行是否包含少於80個字元。
- 單元測試以檢查文本內容的效能。 例如,檢查模型是否在測試數據集上產生精確的預測。
提示
若要執行 linting 和單元測試,您可以使用 Azure Pipelines Azure Pipelines 等自動化工具,Azure DevOps或 GitHub Actions。
持續交付
確認用來定型模型的 Python 或 R 腳稿程式代碼質量之後,您會想要將模型帶入生產環境。 持續傳遞 牽涉到您將模型部署至生產環境所需的步驟,最好盡可能自動化。
若要將模型部署至生產環境,您必須先封裝模型,並將其部署至 生產前環境。 藉由在預生產環境中部署模型,您可以檢查系統是否如預期般運作。
將模型部署至預備階段成功且沒有錯誤之後,您就可以核准將模型部署到 生產環境。
若要在 Python 或 R 文稿上共同作業,以將模型定型,以及將模型部署至每個環境的任何必要程式碼,您將使用 原始檔控制。
原始檔控制
原始檔控制(或 版本控制)最常透過使用 Git 型存放庫來達成。 存放庫是指可儲存軟體專案所有相關檔案的位置。
使用機器學習專案時,您可能擁有每個專案的存放庫。 存放庫將包含 Jupyter Notebook、定型腳本、評分腳本,以及管線定義等。
注意
最好是 不要 將定型數據儲存在資料庫中。 相反地,定型數據會儲存在資料庫或數據湖中,而 Azure Machine Learning 會使用 數據存放區直接從數據源擷取數據。
Git 型存放庫可在 Azure DevOps 中使用 Azure Repos,或 GitHub 存放庫。
藉由在存放庫中裝載所有相關程序代碼,您可以輕鬆地在程式碼上共同作業,並追蹤小組成員所做的任何變更。 每個成員都可以使用自己的程式碼版本。 您將可以看到所有過去的變更,而且您可以在變更認可至主要存放庫之前先檢閱變更。
若要決定誰在專案哪個部分運作,建議使用 敏捷式規劃。
敏捷式規劃
當您想要將模型快速部署至生產環境時,敏捷式規劃非常適合機器學習專案。
敏捷式規劃 表示您將工作隔離到短期衝刺中。 短期衝刺 是您想要達到項目目標一部分的時間週期。
目標是規劃短期衝刺,以快速改善任何程序代碼。 無論是用於數據和模型探索的程式代碼,還是將模型部署至生產環境。
訓練機器學習模型可以是一個永不結束的過程。 例如,身為數據科學家,您可能需要因為數據漂移而改善模型的效能。 或者,您必須調整模型,以更符合新的商務需求。
為了避免花費太多時間進行模型定型,敏捷式規劃有助於界定專案的範圍,並協助讓每個人都同意較短的結果。
若要規劃您的工作,您可以使用 Azure DevOps 中 Azure Boards 之類的工具,或 GitHub 問題。
基礎結構即程式代碼 (IaC)
將 DevOps 原則套用至機器學習專案表示您想要建立強大的可重現解決方案。 換句話說,您所做的一切或創造的事物,您應該能夠重複並自動化。
若要重複並自動化定型和部署模型所需的基礎結構,您的小組將使用 基礎結構即程式代碼(IaC)。 當您在 Azure 上定型和部署模型時,IaC 表示您在程式代碼中定義所需的所有 Azure 資源,而且程式代碼會儲存在存放庫中。
提示
探索DevOps轉換旅程 上的 Microsoft Learn 課程模組,以更熟悉 DevOps