共用方式為


記錄、載入、註冊及部署 MLflow 模型

MLflow 模型 是封裝機器學習模型的標準格式,可用於各種下游工具,例如 Apache Spark 上的批次推斷,或透過 REST API 實時服務。 此格式會定義一個慣例,可讓您將模型儲存在不同的 口味 中(python-function、pytorch、sklearn 等等),這些模型可由不同的模型 服務與推斷平台瞭解。

記錄和載入模型

當您記錄模型時,MLflow 會自動記錄 requirements.txtconda.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 會自動產生代碼段,以便複製及用來載入和執行模型。 若要檢視這些代碼段:

  1. 流覽至 [執行] 畫面,以取得產生模型的執行。 (請參閱 檢視筆記本實驗 ,瞭解如何顯示 [執行] 畫面。
  2. 捲動至 [ 成品] 區 段。
  3. 按兩下記錄模型名稱。 面板隨即開啟右側,其中顯示可用來載入記錄模型的程序代碼,並在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 的內建部署工具,將模型部署到第三方服務架構。 請參閱下列範例。