記錄模型相依性
在本文中,您將了解如何將模型及其相依性記錄為模型成品,以便它們可在您的環境中用於模型服務等生產任務。
記錄 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_env
和 pip_requirements
參數覆寫整個需求集,但通常不建議這麼做,因為這會覆寫 MLflow 自動挑選的相依性。 請參閱如何使用 pip_requirements
參數來覆寫需求的範例。
自訂模型記錄
對於需要更多自訂模型記錄的案例,您可以:
- 撰寫自訂 Python 模型。 這麼做可讓您建立
mlflow.pyfunc.PythonModel
的子類別,以自訂初始化和預測。 此方法非常適用於自訂僅限 Python 的模型。- 如需簡單的範例,請參閱新增 N 模型範例。
- 如需更複雜的範例,請參閱自訂 XGBoost 模型範例。
- 撰寫自訂變體。 在此案例中,您可自訂超過泛型
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 相依性,必須修改容器以包含入內。
適用於 Docker 型服務解決方案的 MLflow Docker 整合:MLflow 模型 build-docker
Azure Machine Learning 的 MLflow 整合:
批次和串流工作
批次和串流評分應以 Databricks 工作的形式執行。 筆記本工作通常已足夠,而且準備程式碼最簡單的方式是使用 Databricks 模型登錄來產生評分筆記本。
下列項目說明程序,以及要遵循的步驟,以確保相依性會隨之安裝及套用:
使用訓練期間所使用的相同 Databricks Runtime 版本來啟動評分叢集。 從
MLmodel
中繼資料檔案讀取databricks_runtime
欄位,並使用該執行階段版本啟動叢集。接下來,安裝任何非 Python 相依性。 若要確保您的非 Python 相依性可供部署環境存取,您可:
- 在執行推斷之前,在 Databricks 叢集上手動安裝模型的非 Python 相依性,作為叢集組態的一部分。
- 或者,您可在評分工作部署中撰寫自訂邏輯,將相依性安裝自動化到叢集。 假設您將非 Python 相依性儲存為成品,如記錄非 Python 套件模型相依性中所述,此自動化可使用程式庫 API 來安裝程式庫。 或者,您可撰寫特定程式碼來產生叢集範圍的初始化指令碼,以安裝相依性。
評分工作將會在工作執行環境中安裝 Python 相依性。 在 Databricks 中,模型登錄可讓您產生用於推斷的筆記本,以便為您執行這項作業。
- 當您使用 Databricks 模型登錄來產生評分筆記本時,筆記本會包含程式碼,以在模型的
requirements.txt
檔案中安裝 Python 相依性。 針對批次或串流評分的筆記本工作,此程式碼會初始化您的筆記本環境,以便安裝模型相依性並使其準備好供模型使用。
- 當您使用 Databricks 模型登錄來產生評分筆記本時,筆記本會包含程式碼,以在模型的
MLflow 會處理在
log_model
的code_path
參數中包含的任何自訂 Python 程式碼。 呼叫模型的predict()
方法時,此程式碼會新增至 Python 路徑。 您也可手動執行下列其中一項動作:- 使用
env_manager=['virtualenv'/'conda']
引數呼叫 mlflow.pyfunc.spark_udf。 - 使用 mlflow.pyfunc.get_model_dependencies 擷取需求,並使用 %pip install 加以安裝。
注意
如果您在使用
code_path
引數記錄模型時指定.py
檔案或 Python Wheel 檔案,則 MLflow 會自動為您載入這些相依性。- 使用