共用方式為


記錄模型相依性

在本文中,您將了解如何將模型及其相依性記錄為模型成品,以便它們可在您的環境中用於模型服務等生產任務。

記錄 Python 套件模型相依性

MLflow 有某些 Python ML 程式庫的原生支援,其中 MLflow 能可靠地記錄使用這些程式庫的模型的相依性。 請參閱內建模型變體

例如,MLflow 支援 mlflow.sklearn 模組中的 scikit-learn,而命令mlflow.sklearn.log_model 會記錄 sklearn 版本。 這也適用於使用這些 ML 程式庫進行自動記錄。 如需其他範例,請參閱 MLflow github 存放庫

注意

如果要啟用生成式 AI 工作負載的追蹤記錄,MLflow 支援 OpenAI 自動記錄

對於可使用 pip install PACKAGE_NAME==VERSION 安裝,但沒有內建的 MLflow 模型變體的 ML 程式庫,您可使用 mlflow.pyfunc.log_model 方法來記錄這些套件。 例如,請務必使用確切的程式庫版本來記錄需求,例如 f"nltk=={nltk.__version__}",而不只是 nltk

mlflow.pyfunc.log_model 支援下列項目的記錄:

  • 封裝為 Python Egg 或 Python Wheel 檔案的公用和自訂程式庫。
  • PyPI 上的公用套件和您自己的 PyPI 伺服器上的私有託管套件。

在使用 mlflow.pyfunc.log_model 時,MLflow 會嘗試自動推斷相依性。 MLflow 會使用 mlflow.models.infer_pip_requirements 來推斷相依性,並將其記錄至 requirements.txt 檔案作為模型成品。

在早期版本中,MLflow 有時不會自動識別所有 Python 需求,特別是如果程式庫不是內建的型變體的情況下。 在這些情況下,您可使用 log_model 命令中的 extra_pip_requirements 參數來指定其他相依性。 請參閱使用 extra_pip_requirements 參數的範例。

重要

您也可使用 conda_envpip_requirements 參數覆寫整個需求集,但通常不建議這麼做,因為這會覆寫 MLflow 自動挑選的相依性。 請參閱如何使用 pip_requirements 參數來覆寫需求的範例。

自訂模型記錄

對於需要更多自訂模型記錄的案例,您可以:

  • 撰寫自訂 Python 模型。 這麼做可讓您建立 mlflow.pyfunc.PythonModel 的子類別,以自訂初始化和預測。 此方法非常適用於自訂僅限 Python 的模型。
  • 撰寫自訂變體。 在此案例中,您可自訂超過泛型 pyfunc 變體的記錄,但這樣做需要執行更多工作才能實作。

自訂 Python 程式碼

您可能具有無法使用 %pip install 命令安裝的 Python 程式碼相依性,例如一或多個 .py 檔案。

當記錄模型時,您可透過 mlflow.pyfunc.log_model 中的 code_path 參數,告訴 MLflow 該模型可以在指定的路徑找到這些相依性。 MLflow 會儲存使用 code_path 作為成品傳遞的任何檔案或目錄,以及程式碼目錄中的模型。 當載入模型時,MLflow 會將這些檔案或目錄新增至 Python 路徑。 此路徑也適用於自訂的 Python Wheel 檔案,這些檔案可使用 code_path 包含在模型中,就像 .py 檔案一樣。

mlflow.pyfunc.log_model( artifact_path=artifact_path,
                         code_path=[filename.py],
                         data_path=data_path,
                         conda_env=conda_env,
                       )

記錄非 Python 套件模型相依性

MLflow 不會自動挑選非 Python 相依性,例如 Java 套件、R 套件和原生套件 (例如 Linux 套件)。 針對這些套件,您需要記錄其他資料。

  • 相依性清單:Databricks 建議使用指定這些非 Python 相依性的模型來記錄成品。 這可能是簡單的 .txt.json 檔案。 mlflow.pyfunc.log_model 可讓您使用 artifacts 引數來指定額外的成品。
  • 自訂套件:與上述自訂 Python 相依性一樣,您需要確定套件可在部署環境中使用。 對於位於中央位置 (例如 Maven Central 或您自己的存放庫) 的套件,請確定位置可在評分或服務時間取得。 對於未託管於別處的私人套件,您可將套件與模型一起記錄為成品。

部署具有相依性的模型

從 MLflow 追蹤伺服器或模型登錄部署模型時,您需要確定部署環境已安裝正確的相依性。 最簡單的路徑可能取決於您的部署模式:批次/串流或線上服務,以及相依性類型。

針對所有部署模式,Databricks 建議在訓練期間所使用的相同執行階段版本上執行推斷,因為您已在其中建立模型的 Databricks Runtime 已安裝各種程式庫。 Databricks 中的 MLflow 會自動將該執行階段版本儲存在 databricks_runtime 欄位中的 MLmodel 中繼資料檔案中,例如 databricks_runtime: 10.2.x-cpu-ml-scala2.12

線上服務:Mosaic AI 模型服務

Databricks 提供模型服務,可將 MLflow 機器學習模型公開為可調整的 REST API 端點。

針對 requirements.txt 檔案中的 Python 相依性,Databricks 和 MLflow 會處理公用 PyPI 相依性的所有項目。 同樣地,如果您在使用 code_path 引數記錄模型時指定 .py 檔案或 Python Wheel 檔案,則 MLflow 會自動為您載入這些相依性。

如需這些模型服務案例,請參閱下列各項:

針對 requirements.txt 檔案中的 Python 相依性,Databricks 和 MLflow 會處理公用 PyPI 相依性的所有項目。 同樣地,如果您在使用 code_path 引數記錄模型時指定 .py 檔案或 Python Wheel 檔案,則 MLflow 會自動為您載入這些相依性。

線上服務:第三方系統或 Docker 容器

如果您的案例需要提供第三方服務解決方案或您自己的 Docker 型解決方案,可將模型匯出為 Docker 容器。

Databricks 針對第三方服務建議下列項目,以自動處理 Python 相依性。 不過,針對非 Python 相依性,必須修改容器以包含入內。

批次和串流工作

批次和串流評分應以 Databricks 工作的形式執行。 筆記本工作通常已足夠,而且準備程式碼最簡單的方式是使用 Databricks 模型登錄來產生評分筆記本。

下列項目說明程序,以及要遵循的步驟,以確保相依性會隨之安裝及套用:

  1. 使用訓練期間所使用的相同 Databricks Runtime 版本來啟動評分叢集。 從 MLmodel 中繼資料檔案讀取 databricks_runtime 欄位,並使用該執行階段版本啟動叢集。

    • 這可在叢集組態中手動完成,或使用自訂邏輯進行自動化。 針對自動化,您從工作 API叢集 API 中的中繼資料檔案讀取執行階段版本格式。
  2. 接下來,安裝任何非 Python 相依性。 若要確保您的非 Python 相依性可供部署環境存取,您可:

    • 在執行推斷之前,在 Databricks 叢集上手動安裝模型的非 Python 相依性,作為叢集組態的一部分。
    • 或者,您可在評分工作部署中撰寫自訂邏輯,將相依性安裝自動化到叢集。 假設您將非 Python 相依性儲存為成品,如記錄非 Python 套件模型相依性中所述,此自動化可使用程式庫 API 來安裝程式庫。 或者,您可撰寫特定程式碼來產生叢集範圍的初始化指令碼,以安裝相依性。
  3. 評分工作將會在工作執行環境中安裝 Python 相依性。 在 Databricks 中,模型登錄可讓您產生用於推斷的筆記本,以便為您執行這項作業。

    • 當您使用 Databricks 模型登錄來產生評分筆記本時,筆記本會包含程式碼,以在模型的 requirements.txt 檔案中安裝 Python 相依性。 針對批次或串流評分的筆記本工作,此程式碼會初始化您的筆記本環境,以便安裝模型相依性並使其準備好供模型使用。
  4. MLflow 會處理在 log_modelcode_path 參數中包含的任何自訂 Python 程式碼。 呼叫模型的 predict() 方法時,此程式碼會新增至 Python 路徑。 您也可手動執行下列其中一項動作:

    注意

    如果您在使用 code_path 引數記錄模型時指定 .py 檔案或 Python Wheel 檔案,則 MLflow 會自動為您載入這些相依性。