記錄模型相依性

在本文中,您將瞭解如何將模型及其相依性記錄為模型成品,以便在您的環境中取得模型服務等生產工作。

記錄 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==VERSIONML 連結庫,但沒有內建的 MLflow 模型類別,您可以使用 mlflow.pyfunc.log_model 方法來記錄這些套件。 例如,請務必使用確切的連結庫版本來記錄需求, f"nltk=={nltk.__version__}" 而不只是 nltk

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

  • 封裝為 Python 蛋或 Python 轉輪檔案的公用和自定義連結庫。
  • 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,模型可以使用 mlflow.pyfunc.log_model 中的 參數,在指定的路徑code_path找到這些相依性。 MLflow 會儲存使用 code_path 作為成品傳遞的任何檔案或目錄,以及程式代碼目錄中的模型。 載入模型時,MLflow 會將這些檔案或目錄新增至 Python 路徑。 此路由也適用於自定義 Python 轉輪檔案,其可包含在模型中 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 運行時間已安裝各種連結庫。 Databricks 中的 MLflow 會自動將該執行時間版本儲存在 MLmodel 欄位中的元資料檔案 databricks_runtime 中,例如 databricks_runtime: 10.2.x-cpu-ml-scala2.12

在線服務:馬賽克 AI 模型服務

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

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

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

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

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

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

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

批次和串流作業

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

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

  1. 使用定型期間所使用的相同 Databricks 運行時間版本來啟動評分叢集。 databricks_runtimeMLmodel元數據檔案讀取 欄位,並使用該運行時間版本啟動叢集。

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

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

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

    注意

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