使用 Azure 機器學習 的適用於 Python 模型的 MLOps

Azure Blob 儲存體
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

此參考架構示範如何使用 Azure DevOps 和 Azure 機器學習 實作 AI 應用程式的持續整合(CI)、持續傳遞(CD)和重新定型管線。 此解決方案是以 scikit-learn 糖尿病數據集為基礎,但可以輕鬆地針對任何 AI 案例和其他熱門的建置系統,例如 Jenkins 或 Travis 進行調整。

GitHub提供此架構的參考實作。

架構

機器學習 DevOps 架構的圖表。

下載此架構的 Visio 檔案

工作流程

此架構包含下列服務:

Azure Pipelines。 此組建和測試系統是以 Azure DevOps 為基礎,並用於建置和發行管線。 Azure Pipelines 會將這些管線分成稱為工作的邏輯步驟。 例如, Azure CLI 工作可讓您更輕鬆地使用 Azure 資源。

Azure 機器學習 是一項雲端服務,可用於大規模定型、評分、部署和管理機器學習模型。 此架構會使用 Azure 機器學習 Python SDK 來建立工作區、計算資源、機器學習管線和評分映像。 Azure 機器學習 工作區提供實驗、定型和部署機器學習模型的空間。

Azure 機器學習 Compute 是隨選虛擬機叢集,具有自動調整和 GPU 和 CPU 節點選項。 定型作業會在此叢集上執行。

Azure 機器學習 管線提供可重複使用的機器學習工作流程,可跨案例重複使用。 針對此使用案例,定型、模型評估、模型註冊和映像建立會在這些管線內的不同步驟中進行。 管線會在建置階段結束時發佈或更新,並在新的數據抵達時觸發。

Azure Blob 儲存體。 Blob 容器可用來儲存評分服務的記錄。 在此情況下,會收集輸入數據和模型預測。 在進行一些轉換之後,這些記錄可用於模型重新定型。

Azure Container Registry。 評分 Python 腳本會封裝為 Docker 映射,並在登錄中建立版本。

Azure 容器執行個體。 作為發行管線的一部分,QA 和預備環境會藉由將評分 Web 服務映射部署到 容器執行個體 來模擬,以提供簡單、無伺服器的方式來執行容器。

Azure Kubernetes Service。 在 QA 環境中徹底測試評分 Web 服務映射之後,它會部署到受控 Kubernetes 叢集上的生產環境。

Azure Application Insights。 此監視服務可用來偵測效能異常。

MLOps 管線

此解決方案會使用軟體工程師已經熟悉的工具,示範 AI 專案各階段的端對端自動化。 機器學習問題很簡單,可以專注於DevOps管線。 此解決方案會使用 scikit-learn 糖尿病數據集 ,並建置山脊線性回歸模型來預測糖尿病的可能性。

此解決方案以下列三個管線為基礎:

  • 建置管線。 建置程式代碼並執行一組測試。
  • 重新定型管線。 根據排程重新定型模型,或當新的數據可供使用時。
  • 發行管線。 讓評分影像運作,並在不同環境中安全地升級影像。

下一節將說明每個管線。

組建管線

每次簽入程式碼時,就會觸發 CI 管線。 建立程式碼並執行測試套件之後,就會發佈更新的 Azure Machine Learning 管線。 組建管線包含下列工作:

  • 程式代碼品質。 這些測試可確保程式代碼符合小組的標準。

  • 單元測試。 這些測試可確保程式代碼可運作、具有適當的程式代碼涵蓋範圍,而且穩定。

  • 數據測試。 這些測試會確認數據範例符合預期的架構和散發。 針對其他使用案例自定義此測試,並以個別的數據理智管線的形式執行,以新數據送達時觸發。 例如,將數據測試工作移至 數據擷取管線 ,以便您稍早進行測試。

注意

您應該考慮為用來定型機器學習模型的數據啟用 DevOps 做法,但本文並未涵蓋此做法。 如需數據擷取管線 CI/CD 架構和最佳做法的詳細資訊,請參閱 數據擷取管線的 DevOps。

設定 Azure 機器學習 和 Python SDK 的基礎結構時,會發生下列一次性工作:

  • 建立裝載所有 Azure 機器學習 相關資源的工作區。
  • 建立執行定型作業的計算資源。
  • 使用更新的定型腳本建立機器學習管線。
  • 將機器學習管線發佈為 REST 端點,以協調定型工作流程。 下一節將說明此步驟。

重新定型管線

機器學習管線會以異步方式協調重新定型模型的程式。 您可依排程,或在有新的資料可供使用時,藉由呼叫上一個步驟中所發佈的管線 REST 端點來觸發重新定型。

此管線涵蓋下列步驟:

  • 定型模型。 定型 Python 腳本會在 Azure 機器學習 計算資源上執行,以取得儲存在執行歷程記錄中的模型檔案。 由於定型是 AI 專案中最密集的計算工作,因此解決方案會使用 Azure 機器學習 Compute

  • 評估模型。 簡單的評估測試會比較新模型與現有的模型。 只有當新模型較佳時,才會升級。 否則,不會註冊模型,而且會取消管線。

  • 註冊模型。 重新定型的模型會向 Azure 機器學習 模型登錄註冊。 此服務提供模型的版本控制以及元數據標記,以便輕鬆地重現它們。

發行管線

此管線示範如何運作評分映射,並在不同環境中安全地升級映射。 此管線細分為兩個環境:QA 和生產環境:

QA 環境

  • 模型成品觸發程式。 每次有新的成品可用時,就會觸發發行管線。 向 Azure 註冊的新模型 機器學習 模型管理會被視為發行成品。 在此情況下,會為每個新模型註冊管線。

  • 建立評分影像。 已註冊的模型會與評分腳本和 Python 相依性(Conda YAML 檔案)一起封裝到作業化 Docker 映射中。 此映像會透過 Azure Container Registry 自動設定版本。

  • 在 容器執行個體 上部署。 此服務可用來建立非生產環境。 評分映像也會在這裡部署,這主要用於測試。 容器執行個體 提供簡單且快速的方式來測試 Docker 映像。

  • 測試 Web 服務。 簡單的 API 測試可確保映像已成功部署。

生產環境

  • 在 Azure Kubernetes Service 上部署。 此服務用於在生產環境中大規模將評分映射部署為 Web 服務。

  • 測試 Web 服務。 簡單的 API 測試可確保映像已成功部署。

考量

這些考慮會實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

延展性

Azure DevOps 上建置管線可針對任何大小的應用程式進行調整。 建置管線的逾時上限會根據執行代理程式而有所不同。 組建可以在自我裝載代理程式(私人代理程式)上永遠執行。 針對公用專案的 Microsoft 裝載代理程式,組建可以執行六個小時。 對於私人專案,限制為30分鐘。

若要使用最大逾時,請在 Azure Pipelines YAML 檔案中設定下列屬性:

jobs:
- job: <job_name>
  timeoutInMinutes: 0

在理想情況下,讓組建管線快速完成,並只執行單元測試和其他測試的子集。 這可讓您快速驗證變更,並在發生問題時加以修正。 在停機期間執行長時間執行的測試。

發行管線會發佈即時評分 Web 服務。 為了方便起見,QA 環境的發行會使用 容器執行個體 完成,但您可以使用在 QA/預備環境中執行的另一個 Kubernetes 叢集。

根據 Azure Kubernetes Service 叢集的大小調整生產環境。 叢集的大小取決於您預期的已部署評分 Web 服務負載。 針對即時評分架構,輸送量是關鍵優化計量。 針對非深度學習案例,CPU 應該足以處理負載;不過,對於深度學習工作負載,當速度是瓶頸時,GPU 通常會比 CPU 提供更好的效能。 Azure Kubernetes Service 同時支援 CPU 和 GPU 節點類型,這也是此解決方案用於映像部署的原因。 如需詳細資訊,請參閱 GPU 與 CPU,以部署深度學習模型

根據 Azure 機器學習 計算資源中的節點數目,相應增加和減少重新定型管線,並使用自動調整選項來管理叢集。 此架構使用 CPU。 對於深度學習工作負載,GPU 是較佳的選擇,且 Azure 機器學習 Compute 支援。

管理

  • 監視重新定型作業。 機器學習管線會協調機器叢集的重新定型,並提供簡單的方法來監視它們。 使用 Azure 機器學習 UI,並查看記錄的管線區段底下。 或者,這些記錄也會寫入 Blob,而且可以使用 Azure 儲存體 Explorer 之類的工具從該處讀取。

  • 記錄。 Azure 機器學習 可讓您輕鬆地記錄機器學習生命週期的每個步驟。 記錄會儲存在 Blob 容器中。 如需詳細資訊,請參閱在 Azure 機器學習 中啟用記錄。 如需更豐富的監視,請將ApplicationInsights設定為使用記錄。

  • 安全性。 所有秘密和認證都會儲存在 Azure 金鑰保存庫 中,並使用變數群組在 Azure Pipelines 中存取。

成本最佳化

成本優化是考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱 成本優化要素概觀。

Azure DevOps 適用於開放原始碼專案和最多五位使用者的小型專案。 對於較大的小組,請根據用戶數目購買方案。

計算是此架構中最大的成本驅動因素,其成本會根據使用案例而有所不同。 此架構使用 Azure 機器學習 計算,但有其他選項可供使用。 Azure 機器學習 不會在備份計算叢集的虛擬機成本上新增任何附加費。 將您的計算叢集設定為至少 0 個節點,以便在未使用時,它可以縮減為 0 個節點,而不會產生任何成本。 計算成本取決於節點類型、節點數目和布建模式(低優先順序或專用)。 您可以使用 Azure 定價計算機來估計 機器學習 和其他服務的成本。

部署此案例

若要部署此參考架構,請遵循 GitHub 存放庫中快速入門指南中所述的步驟。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主體作者:

  • 普拉內特·辛格·索蘭基 |資深軟體工程師

下一步

  • 想要深入了解? 查看相關的學習路徑: 使用 MLOps 啟動機器學習生命週期。