記錄、載入、註冊及部署 MLflow 模型
MLflow 模型 是封裝機器學習模型的標準格式,可用於各種下游工具,例如 Apache Spark 上的批次推斷,或透過 REST API 實時服務。 此格式會定義一個慣例,可讓您將模型儲存在不同的 口味 中(python-function、pytorch、sklearn 等等),這些模型可由不同的模型 服務與推斷平台瞭解。
記錄和載入模型
當您記錄模型時,MLflow 會自動記錄 requirements.txt
和 conda.yaml
檔案。 您可以使用這些檔案重新建立模型開發環境,並使用 (建議) 或 conda
重新安裝相依性virtualenv
。
重要
Anaconda Inc. 更新了其 anaconda.org 頻道服務條款 。 根據新的服務條款,如果您依賴 Anaconda 的封裝和散發,您可能需要商業授權。 如需詳細資訊,請參閱 Anaconda Commercial Edition 常見問題 。 您使用任何 Anaconda 通道會受到其服務條款的規範。
在 v1.18 之前記錄的 MLflow 模型(Databricks Runtime 8.3 ML 或更早版本)預設會以 conda defaults
通道 (https://repo.anaconda.com/pkgs/) 記錄為相依性。 由於此授權變更,Databricks 已停止針對使用 MLflow v1.18 和更新版本記錄的模型使用 defaults
通道。 記錄的預設通道現在是 conda-forge
,指向社群管理的 https://conda-forge.org/。
如果您在 MLflow v1.18 之前記錄模型,但未從模型的 conda 環境排除 defaults
通道,該模型可能相依 defaults
於您可能未預期的通道。
若要手動確認模型是否具有此相依性,您可以檢查 channel
以記錄模型封裝的 conda.yaml
檔案中的值。 例如,具有defaults
通道相依性之conda.yaml
模型的 可能如下所示:
channels:
- defaults
dependencies:
- python=3.8.8
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
由於 Databricks 無法判斷您在與 Anaconda 的關係下是否允許使用 Anaconda 存放庫與模型互動,因此 Databricks 不會強制其客戶進行任何變更。 如果您在 Anaconda 條款下允許使用 Anaconda.com 存放庫,您就不需要採取任何動作。
如果您想要變更模型環境中所使用的通道,您可以使用新的 conda.yaml
將模型重新登錄至模型登錄。 您可以藉由在 的 log_model()
參數中conda_env
指定通道來執行此動作。
如需 API 的詳細資訊 log_model()
,請參閱您正在使用之模型類別的 MLflow 檔, 例如 scikit-learn log_model。
如需檔案的詳細資訊 conda.yaml
,請參閱 MLflow 檔。
API 命令
若要將模型記錄至 MLflow 追蹤伺服器,請使用 mlflow.<model-type>.log_model(model, ...)
。
若要載入先前記錄的模型以進行推斷或進一步開發,請使用 mlflow.<model-type>.load_model(modelpath)
,其中 modelpath
是下列其中一項:
- 執行相對路徑 (例如
runs:/{run_id}/{model-path}
) - DBFS 路徑
- 已註冊的模型路徑(例如
models:/{model_name}/{model_stage}
)。
如需載入 MLflow 模型之選項的完整清單,請參閱 MLflow 檔中的參考成品。
對於 Python MLflow 模型,另一個選項是用來 mlflow.pyfunc.load_model()
將模型載入為泛型 Python 函式。
您可以使用下列代碼段來載入模型並評分數據點。
model = mlflow.pyfunc.load_model(model_path)
model.predict(model_input)
或者,您可以將模型導出為 Apache Spark UDF,以用於在 Spark 叢集上評分,以作為批次作業或即時 Spark 串流 作業。
# load input data table as a Spark DataFrame
input_data = spark.table(input_table_name)
model_udf = mlflow.pyfunc.spark_udf(spark, model_path)
df = input_data.withColumn("prediction", model_udf())
記錄模型相依性
若要正確載入模型,您應該確定模型相依性已使用正確的版本載入筆記本環境。 在 Databricks Runtime 10.5 ML 和更新版本中,MLflow 會在目前環境與模型相依性之間偵測到不相符時,警告您。
Databricks Runtime 11.0 ML 和更新版本包含可簡化還原模型相依性的其他功能。 在 Databricks Runtime 11.0 ML 和更新版本中,針對 pyfunc
口味模型,您可以呼叫 mlflow.pyfunc.get_model_dependencies
來擷取和下載模型相依性。 此函式會傳回相依性檔案的路徑,然後您可以使用 進行安裝 %pip install <file-path>
。 當您將模型載入為 PySpark UDF 時,請在呼叫中mlflow.pyfunc.spark_udf
指定 env_manager="virtualenv"
。 這會還原 PySpark UDF 內容中的模型相依性,而且不會影響外部環境。
您也可以手動安裝 MLflow 1.25.0 版或更新版本,在 Databricks Runtime 10.5 或更新版本中使用此功能:
%pip install "mlflow>=1.25.0"
如需有關如何記錄模型相依性(Python 和非 Python)和成品的其他資訊,請參閱 記錄模型相依性。
瞭解如何記錄模型相依性,以及模型服務的自定義成品:
MLflow UI 中自動產生的代碼段
當您在 Azure Databricks 筆記本中記錄模型時,Azure Databricks 會自動產生代碼段,以便複製及用來載入和執行模型。 若要檢視這些代碼段:
- 流覽至 [執行] 畫面,以取得產生模型的執行。 (請參閱 檢視筆記本實驗 ,瞭解如何顯示 [執行] 畫面。
- 捲動至 [ 成品] 區 段。
- 按兩下記錄模型名稱。 面板隨即開啟右側,其中顯示可用來載入記錄模型的程序代碼,並在Spark或 pandas DataFrame 上做出預測。
範例
如需記錄模型的範例,請參閱追蹤機器學習訓練回合範例中的 範例。 如需載入記錄模型以進行推斷的範例,請參閱 模型推斷範例。
在模型登錄中註冊模型
您可以在 MLflow 模型登錄中註冊模型,這是一個集中式模型存放區,可提供 UI 和一組 API 來管理 MLflow 模型的完整生命週期。 如需如何使用模型登錄來管理 Databricks Unity 目錄中模型的指示,請參閱 在 Unity 目錄中管理模型生命週期。 若要使用工作區模型登錄,請參閱使用工作區模型登錄管理模型生命週期(舊版)。
若要使用 API 註冊模型,請使用 mlflow.register_model("runs:/{run_id}/{model-path}", "{registered-model-name}")
。
將模型儲存至 DBFS
若要在本機儲存模型,請使用 mlflow.<model-type>.save_model(model, modelpath)
。 modelpath
必須是 DBFS 路徑。 例如,如果您使用 DBFS 位置 dbfs:/my_project_models
來儲存專案工作,則必須使用模型路徑 /dbfs/my_project_models
:
modelpath = "/dbfs/my_project_models/model-%f-%f" % (alpha, l1_ratio)
mlflow.sklearn.save_model(lr, modelpath)
針對 MLlib 模型,請使用 ML 管線。
下載模型成品
您可以使用各種 API 下載已註冊模型的記錄模型成品(例如模型檔案、繪圖和計量)。
Python API 範例:
from mlflow.store.artifact.models_artifact_repo import ModelsArtifactRepository
model_uri = MlflowClient.get_model_version_download_uri(model_name, model_version)
ModelsArtifactRepository(model_uri).download_artifacts(artifact_path="")
Java API 範例:
MlflowClient mlflowClient = new MlflowClient();
// Get the model URI for a registered model version.
String modelURI = mlflowClient.getModelVersionDownloadUri(modelName, modelVersion);
// Or download the model artifacts directly.
File modelFile = mlflowClient.downloadModelVersion(modelName, modelVersion);
CLI 命令 範例:
mlflow artifacts download --artifact-uri models:/<name>/<version|stage>
部署在線服務的模型
您可以使用 模型服務 ,將模型登錄中的機器學習模型裝載為 REST 端點。 這些端點會根據模型版本及其階段的可用性自動更新。
您也可以使用 MLflow 的內建部署工具,將模型部署到第三方服務架構。 請參閱下列範例。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應