在生產中部署ML前需要了解的事

在生產中部署ML前需要了解的事

譯自:What You Should Know before Deploying ML in Production

MLOps的必要性

MLOps之所以重要,有幾個原因。首先,機器學習模型依賴大量數據,科學家和工程師很難持續關注這些數據以及機器學習模型中可調節的不同參數。有時候對機器學習模型的微小變更可能會導致結果大相徑庭。此外還需要密切關注模型的功能。特徵工程是機器學習生命週期的重要一環並極大影響了模型的準確性。

image

一旦進入生產,就不能像監控其他類型的軟件(如web應用)一樣監控機器學習模型,且調試機器模型的過程也相對複雜。模型會使用實際數據來生成預測結果,但實際數據可能會隨時間變化。

由於數據會發生變化,因此有必要關注模型的性能,必要時需要升級模型。這意味着你不得不密切關注新數據的變化,並確保模型學習的正確性。

下面將討論在生產環境中部署機器學習模型前應該關注的四個主要方面:MLOps的能力、開源集成、機器學習流水線和MLflow。

image

MLOps的能力

在部署到生產環境前可以考慮多種不同的MLOps能力。首先是創建可複製的機器學習流水線的能力。機器學習流水線可以爲數據準備、訓練和評分過程定義可重用的步驟。這些步驟包括爲訓練和部署模型創建可重用的軟件環境,以及在任何地方註冊、打包和部署模型的能力。通過流水線可以頻繁更新模型,或與其他AI應用程序和服務一起推出新的模型。

image

此外還需要關注使用模型和爲端到端機器學習生命週期捕獲治理數據所需的元數據。在後一種情況下,沿襲信息可以包括,如誰發佈了模型,爲什麼在某個時間點進行了更改,以及在生產中部署或使用了不同的模型。

另一個要點是在機器學習生命週期中基於事件來進行通知和告警。例如,實驗完成、註冊模型、部署模型以及數據漂移檢測等。除此之外,還需要監控機器學習應用的操作和ML相關的問題。這裏,數據科學家需要通過比較訓練時間和推理時間的模型輸來探索特定模型的指標,並在機器學習基礎設施上配置監控和告警。

開源集成

在生產環境中部署機器學習之前應該知道的第二點是開源集成。這裏給出了三個非常重要的開源技術。第一個是開源訓練框架,非常適合加速機器學習解決方案。第二個是用於可解釋和公平模型的開源框架,最後是開源模型部署工具。

這裏有三個不同的開源訓練框架: PyTorch, TensorFlowRAY。PyTorch 是一個端到端的機器學習框架,它包括TorchServe(一種方便擴展PyTorch模型的部署工具)。PyTorch還支持移動端部署和雲平臺。PyTorch有一個C++ 前端,它遵循Python前端的設計和體系結構。

TensorFlow 是另一個業界有名的端到端機器學習框架。對於MLOps,它使用了一個名爲TensorFlow Extended (TFX) 的特性,這是一個端到端平臺,用於在大型生產環境環境中準備數據、訓練、校驗和部署機器學習模型。一個TFX流水線是一個順序的組件集,特別適用於可擴展的高性能機器學習任務。

RAY是一個強化學習(RL)框架,它包含幾個有用的訓練庫: Tune, RLlib, TrainDataset。Tune非常適合超參數調優。RLlib用於訓練RL模型。Train用於分佈式深度學習。Dataset用於分佈式數據加載。RAY還有兩個額外的庫:ServeWorkflows,用於將機器學習模型和分佈式應用部署到生產環境。

image

爲了創建可解釋和公平模型,可以使用兩個有用的框架: InterpretMLFairlearn。InterpretML是一個結合了幾種機器學習可解釋性技術的開源庫,你可以訓練可解釋的玻璃盒模型(glassbox models),也可以解釋黑盒系統(blackbox systems)。此外,還可以用於理解模型的整體行爲,或理解個值預測背後的原因。

Fairlearn是一個Python庫,它可以提供評估哪些組受到模型負面影響的指標,並可以使用公平性和準確性指來對比多個模型。它還支持多種算法,用於緩解各種AI 和機器學習任務中的不公平。

image

第三個開源技術用於模型部署。當使用不同的框架和工具時,需要根據每個框架的要求來部署模型。爲了標準化流程,可以使用ONNX格式。

ONNX 是Open Neural Network Exchange的簡稱。ONNX是一個機器學習模型的開源格式,用於支持不同框架的互操作性。這意味着,你可以使用某個機器學習框架(如PyTorch、TensorFlow或RAY)訓練一個模型,然後在其他框架(如 ML.NET)中將其轉換爲ONNX格式。

ONNX Runtime (ORT)表示使用一組通用操作符的機器學習模型,這些操作符是機器學習和深度學習模型的構建塊,允許模型在不同的硬件和操作系統上運行。ORT優化和加速了機器學習推理,可以實現更快的客戶體驗以及更低的產品成本。它支持如PyTorch和TensorFlow這樣的深入學習框架模型,但也支持經典的機器學習庫,如Scikit-learn。

image

還有很多有名的框架可以支持轉換爲ONNX格式,如PyTorch內置了導出爲ONNX格式,其他工具,如TensorFlow 或Keras則使用獨立的安裝包來處理轉換邏輯。該過程非常直接:首先需要使用一個支持導出爲ONNX格式的框架來訓練出模型,然後使用ONNX Runtime加載並運行該模型,最後可以使用多種運行時配置或硬件加速器來調節性能。

image

機器學習流水線

在生產環境中部署機器學習前應該考慮的第三點時如何爲機器學習解決方案構建流水線。流水線的第一個任務是數據預處理,包括導入、校驗、清理、轉換和規範化數據。

接下來,流水線包含訓練配置,包括參數、文件路徑、日誌和報告等。然後以高效且可複用的方式執行實際訓練和驗證工作。效率可能受自特定的數據子集、不同的硬件、計算資源、分佈式處理以及過程監控的影響。最後是部署階段,包含版本、擴展、資源調配和訪問控制。

流水線技術的選擇取決於特定的需求,通常分爲如下三種場景:模型編排、數據編排或代碼或應用編排。每個場景都圍繞一個作爲該技術主要用戶的角色以及一個標準流水線(這是典型的工作流)。

image

在模型編排場景中,重要角色是數據科學家。這種場景下的標準流水線涉及從數據到模型。在開源技術選項方面,可以選擇Kubeflow Pipelines

對於數據編排場景,主要角色是數據科學家,標準流水線涉及從數據到數據。這種場景下通常會使用Apache Airflow

最後一個是代碼和應用編排。主要的角色是應用開發人員。標準流水線涉及從代碼+模型到服務。通常選擇的開源解決方案是Jenkins

下圖展示了在Azure Machine Learning上創建流水線的過程。對於每一個階段,Azure Machine Learning 服務都會計算所需的硬件計算資源、OS資源(如Docker鏡像)、軟件資源(如 Conda)和數據輸入。

image

而後服務會確定步驟之間的依賴關係,從而生成一個動態執行圖。當執行動態執行圖中的步驟時,服務會配置必要的硬件和軟件環境。該步驟還會向其包含的實驗對象發送日誌記錄和監控信息。當步驟結束時,其輸出會作爲下一步驟的輸入。最後,確定並分離不需要的資源。

MLflow

最後一個在生產環境中部署機器學習前應該考慮的工具是MLlow。 MLflow 是一個管理端到端機器學習生命週期的開源平臺。包含四個生命週期中非常重要的主要組件。

image

第一個是 MLflow Tracking,它會對實驗進行跟蹤,記錄並比較參數和結果。MLflow可以將執行過程記錄到一個本地文件和兼容 SQLAlchemy的數據庫或遠程追蹤服務器中。可以使用Python、R、Java或REST API來記錄執行數據。MLflow允許分組運行,用於比較執行過程,也可以用於比較用於處理特定任務的執行過程。

下一個是MLflow Projects,它可以以一種可重用的形式將ML代碼打包到項目中,以便與其他數據科學家共享代碼或將代碼傳輸到生產環境。它根據約定指定了打包數據科學代碼的格式。此外,該組件還包含一個API以及命令行工具,用於執行項目,使其能夠將多個項目鏈接到工作流中。

下一個是MLflow Models,它管理和部署從各種機器學習庫到模型服務和推理平臺的模型。通過使用標準格式來打包機器學習模型,使其能夠適用於多種下游工具。例如,通過REST API或基於Apache Spark的批量推斷來提供實時服務。每個模型都是一個包含任意文件的目錄,且根目錄中包含一個模型文件,該目錄可以定義多種模型查看風格。

最後一個組件是 MLflow Registry,它是一個集中式的模型存儲、一組APIs和以協作的方式管理一個MLflow模型的完整生命週期的UI。它提供了模型沿襲、模型版本控制、階段轉換和註釋。如果你正在尋找一個集中的模型存儲和一組不同的API,以便管理機器學習模型的整個生命週期,那麼可以選擇Registry。

總結

這四個方面:MLOps能力、開源集成、機器學習流水線和MLflow可以幫助創建一個簡單且可重複的流程,方便在生產中部署機器學習。這使數據科學家能夠快速、輕鬆地使用不同的模型和框架進行實驗。此外,通過改進生產的機器學習系統操作流程,使你能夠在實際數據隨時間變化時快速更新模型,從而將限制轉化爲機會。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章