python - 加载MLFlow模型时如何加载私有(private)python包?

标签 python pandas mlflow mlops

我正在尝试使用 mlflow.pyfunc.PythonModel 将私有(private) Python 包用作模型。

我的 conda.yaml 看起来像

channels:
- defaults
dependencies:
- python=3.10.4
- pip
- pip:
  - mlflow==2.1.1
  - pandas
  - --extra-index-url <private-pypa-repo-link>
  - <private-package>
name: model_env

python_env.yaml

python: 3.10.4
build_dependencies:
- pip==23.0
- setuptools==58.1.0
- wheel==0.38.4
dependencies:
- -r requirements.txt

requirements.txt

mlflow==2.1.1
pandas
--extra-index-url <private-pypa-repo-link>
<private-package>

运行以下命令时

import mlflow
model_uri = '<run_id>'


# Load model as a PyFuncModel.
loaded_model = mlflow.pyfunc.load_model(model_uri)

# Predict on a Pandas DataFrame.
import pandas as pd
t = loaded_model.predict(pd.read_json("test.json"))
print(t)

结果是

WARNING mlflow.pyfunc: Encountered an unexpected error (InvalidRequirement('Parse error at "\'--extra-\'": Expected W:(0-9A-Za-z)')) while detecting model dependency mismatches. Set logging level to DEBUG to see the full traceback.

在加载模式之前添加以下内容使其工作

dep = mlflow.pyfunc.get_model_dependencies(model_uri)
print(dep)
 
import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", dep])

有没有办法自动安装这些依赖项而不是显式安装?我可以选择哪些选项来让 mlflow 安装私有(private)软件包?

最佳答案

在这里回答我自己的问题。事实证明,问题是我试图使用需要预先安装的 key 环库,并且在虚拟环境中进行推理时不支持该库。 不过,有一些方法可以解决这个问题。

  1. 将身份验证 token 添加到 extra-index-url 本身。您可以在 stackoverflow question 中找到它的记录。 .

  2. MlFlow 允许您使用 code_path 参数 ( link ) 记录与模型本身的任何依赖关系。使用此方法,您可以跳过添加私有(private)包的要求。这个question也涉及同一主题。代码看起来有点像这样。

mlflow.pyfunc.save_model(
  path=dest_path,
  python_model=MyModel(),
  artifacts=_get_artifact_dict(t_dir),
  conda_env=conda_env,
  # Adding the current script file as dependency
  code_path=[os.path.realpath(__file__), #Add any other script]
)

如果在 requirements.txt 中保存身份验证 token 可行,请选择第一种方法,否则使用第二种方法。使用 code_path 解决方案的缺点是,对于每个模型,您的包的代码都会被复制。

关于python - 加载MLFlow模型时如何加载私有(private)python包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75418655/

相关文章:

python - 我求1000以下所有3或5的倍数之和的方法

python - Pandas 数据框行为

python - 如何在运行 MLflow 的服务器上存储工件

azure - 如何从 Azure Databricks 导出 MLFlow 模型作为 CD 阶段的 Azure DevOps 工件?

Python:将函数应用于 Pandas DataFrame 的每一行并返回 **新数据帧**

python - 如何在tornado中异步写入redis

python - 如何在 Python 中创建一个简单的网络连接?

python - Pandas 将 DataFrame2 ROW append 到 DataFrame1 ROW

python - 保存和导出 python pandas 数据框的数据类型信息

amazon-sagemaker - 如何从 Amazon SageMaker 运行基于网络的 mlflow 用户界面?