適用於機器學習的 DevOps

已完成

DevOps 和 MLOps

Donovan Brown 在什麼是 DevOps?中將 DevOps 描述為「人員、程序與產品的結合,可為終端使用者持續傳遞價值」

若要了解其在使用機器學習模型時的使用方式,讓我們進一步探索一些基本的 DevOps 準則。

DevOps 是引導開發人員建立強固且可重現應用程式的工具和做法組合。 使用 DevOps 原則的目標是要快速將價值傳遞給使用者。

如果您想要在資料轉換管線或即時應用程式中整合機器學習模型,更輕鬆地傳遞價值,您將受惠於實作 DevOps 準則。 了解 DevOps 會協助您組織工作和予以自動化。

建立、部署及監視強固且可重現的模型,以將價值傳遞給終端使用者,是機器學習作業 (MLOps) 的目標。

MLOps overview of three processes

每當我們討論機器學習作業 (MLOps) 時,我們想要結合三個程序:

  • ML 包含資料科學家負責的所有機器學習工作負載。 資料科學家會執行:

    • 探勘資料分析 (EDA)
    • 功能工程
    • 模型定型和微調
  • DEV 是指軟體發展,包括:

    1. 規劃:定義模型的需求和效能計量。
    2. 建立:建立模型定型和評分指令碼。
    3. 驗證:檢查程式碼和模型品質。
    4. 封裝:預備解決方案以準備好進行部署。
  • OPS 是指作業,包括:

    1. 發行:將模型部署到生產環境。
    2. 設定:使用基礎結構即程式碼 (IaC) 來標準化基礎結構組態。
    3. 監視:追蹤計量,並確保模型和基礎結構如預期般執行。

讓我們查看一些 MLOps 不可或缺的 DevOps原則。

DevOps 準則

DevOps 的核心原則之一是自動化。 將工作自動化,我們渴望讓新的模型更快速地部署到生產環境。 透過自動化,您也會建立可重現的模型,這些模型可在不同環境中保持可靠且一致。

尤其當您想要定期改善模型時,自動化可讓您快速執行所有必要的活動,以確保生產環境中的模型一律是最佳表現模型。

達成自動化的重要概念是 CI/CD,這代表持續整合持續傳遞

持續整合

持續整合涵蓋建立驗證活動。 目標是建立程式碼,並經由自動化測試來驗證程式碼和模型的品質。

使用 MLOps 時,持續整合可能包括:

  • 將 Jupyter 筆記本中的探勘程式碼重構為 Python 或 R 指令碼。
  • Lint 分析用以檢查 Python 或 R 指令碼中是否有程式設計或樣式錯誤。 例如,檢查腳本中的一行是否包含少於 80 個字元。
  • 單元測試用以檢查指令碼內容的效能。 例如,檢查模型是否在測試資料集上產生精確的預測。

若要執行 Lint 分析和單元測試,您可使用自動化工具,例如 Azure DevOps中的 Azure Pipelines,或 GitHub Actions

持續傳遞

確認用於定型模型的 Python 或 R 指令碼的程式碼品質之後,您會想要將模型帶到生產環境。 持續傳遞牽涉到您將模型部署至生產環境所需的步驟,最好盡可能自動化。

若要將模型部署到生產環境,您必須先封裝模型,再將其部署到生產前環境。 藉由在生產前環境中預備模型,您可檢查一切是否如預期般運作。

成功將模型部署至預備階段且沒有錯誤後,您就可以核准模型部署至生產環境

若要在 Python 或 R 指令碼上共同作業以將模型定型,以及共同處理將模型部署至每個環境的任何必要程式碼,您將使用原始檔控制

原始檔控制

原始檔控制 (或 版本控制) 最常使用 Git 存放庫來達成。 存放庫是指可儲存軟體專案的所有相關檔案的位置。

使用機器學習專案時,您擁有的每個專案可能都有一個存放庫。 存放庫將包含 Jupyter 筆記本、定型指令碼、評分指令碼,以及管線定義等等。

注意

最好不要將定型資料儲存在您的存放庫中。 相反地,定型資料會儲存在資料庫或資料湖中,而 Azure Machine Learning 會使用資料存放區直接從資料來源擷取資料。

使用 Azure DevOps 中的 Azure Repos,或使用 GitHub 存放庫,可以取得 Git 型存放庫。

藉由在存放庫中裝載所有相關程式碼,您即可輕鬆地在程式碼上共同作業,並追蹤小組成員所做的任何變更。 每個成員都可以使用自己的程式碼版本。 您能夠查看所有過去的變更,而且可以在變更認可至主要存放庫之前先檢閱變更。

若要決定誰要處理專案的哪個部分,建議使用敏捷式規劃

敏捷式規劃

當您想要將模型快速部署到生產環境時,敏捷式規劃非常適合機器學習專案。

敏捷式規劃表示您將工作隔離成短期衝刺。 短期衝刺是您想要達成專案部分目標的短暫期間。

目標在於規劃短期衝刺,以快速改善任何程式碼。 無論是用於資料和模型探索的程式碼,還是將模型部署到生產環境。

定型機器學習模型可能是永不結束的程序。 例如,身為資料科學家的您可能因為資料漂移,而需要改善模型的效能。 或者,您必須調校模型,更加符合新的商務需求。

為了避免花費太多時間進行模型定型,敏捷式規劃可協助界定專案範圍,並藉由同意較短期的結果來讓所有人都能贊同。

若要規劃您的工作,您可使用 Azure DevOps 中的Azure BoardsGitHub問題等工具。

基礎結構即程式碼 (IaC)

將 DevOps 準則套用至機器學習專案表示您想要建立強固可重現的解決方案。 換句話說,您執行或建立的所有項目,您都應該能夠重複和自動化。

若要重複和自動化定型和部署模型所需的基礎結構,您的小組會使用基礎結構即程式碼 (IaC)。 當您在 Azure 上定型和部署模型時,IaC 表示您在程式碼中定義程序需要的所有 Azure 資源,而程式碼會儲存在存放庫中。

提示

DevOps 轉換之旅中探索 Microsoft Learn 課程模組,可更加熟悉 DevOps