mlflow.models

mlflow.models 模块提供了一个API,用于以不同下游工具可以理解的“风格”保存机器学习模型。

内置的风格有:

详情请参见 MLflow 模型

class mlflow.models.EvaluationArtifact(uri, content=None)[源代码]

基类:object

包含一个工件URI和内容的模型评估工件。

property content

工件的内容(表示方式各异)

property uri: str

工件的URI

class mlflow.models.EvaluationMetric(eval_fn, name, greater_is_better, long_name=None, version=None, metric_details=None, metric_metadata=None, genai_metric_args=None)[源代码]

基类:object

一个评估指标。

参数:
  • eval_fn – 一个计算指标的函数,具有以下签名:

  • name – 指标的名称。

  • greater_is_better – 指标的值越高是否越好。

  • long_name – (可选)指标的全名。例如,"均方根误差" 对应 "mse"

  • version – (可选) 指标版本。例如 v1

  • metric_details – (可选) 该指标的描述及其计算方法。

  • metric_metadata – (可选) 包含指标元数据的字典。

  • genai_metric_args – (可选)一个包含用户在调用 make_genai_metric 或 make_genai_metric_from_prompt 时指定的参数的字典。这些参数会被保留,以便我们稍后可以反序列化相同的指标对象。

class mlflow.models.EvaluationResult(metrics, artifacts, baseline_model_metrics=None, run_id=None)[源代码]

基类:object

表示 mlflow.evaluate() API 调用的模型评估输出,包含标量指标和性能图等输出工件。

property artifacts: Dict[str, EvaluationArtifact]

一个将标准化工件名称(例如“roc_data”)映射到工件内容和位置信息的字典

property baseline_model_metrics: Dict[str, Any]

一个将标量指标名称映射到基线模型标量指标值的字典

classmethod load(path)[源代码]

从指定的本地文件系统路径加载评估结果

property metrics: Dict[str, Any]

一个将标量指标名称映射到标量指标值的字典

save(path)[源代码]

将评估结果写入指定的本地文件系统路径

property tables: Dict[str, DataFrame]

一个字典,将标准化的工件名称(例如“eval_results_table”)映射到相应的表格内容,作为 pandas DataFrame。

备注

实验性:此属性可能会在未来的版本中无警告地更改或移除。

class mlflow.models.FlavorBackend(config, **kwargs)[源代码]

基类:object

Flavor 后端的抽象类。此类定义了 MLflow 模型风味的本地模型部署的 API 接口。

abstract build_image(model_uri, image_name, install_mlflow, mlflow_home, enable_mlserver, base_image=None)[源代码]
can_build_image()[源代码]
返回:

如果此风格定义了用于构建能够服务模型的docker容器的 build_image 方法,则为True,否则为False。

abstract can_score_model()[源代码]

检查此风格的后端是否可以在当前环境中部署。

返回:

如果当前环境可以应用此风味后端,则为真。

abstract generate_dockerfile(model_uri, output_path, install_mlflow, mlflow_home, enable_mlserver, base_image=None)[源代码]
abstract predict(model_uri, input_path, output_path, content_type)[源代码]

使用给定URI引用的已保存MLflow模型生成预测。输入和输出从文件或stdin/stdout读取和写入。

参数:
  • model_uri – 指向用于评分的 MLflow 模型的 URI。

  • input_path – 包含输入数据的文件路径。如果未指定,数据将从标准输入读取。

  • output_path – 包含输出预测的文件路径。如果未指定,数据将写入标准输出。

  • content_type – 指定输入格式。可以是以下之一 {json, csv}

prepare_env(model_uri, capture_output=False)[源代码]

执行预测或服务模型所需的任何准备工作,例如下载依赖项或初始化conda环境。准备工作完成后,调用预测或服务应快速进行。

abstract serve(model_uri, port, host, timeout, enable_mlserver, synchronous=True, stdout=None, stderr=None)[源代码]

在本地提供指定的 MLflow 模型。

参数:
  • model_uri – 指向用于评分的 MLflow 模型的 URI。

  • port – 用于模型部署的端口。

  • host – 用于模型部署的主机。默认为 localhost

  • timeout – 处理请求的超时时间,单位为秒。默认为 60。

  • enable_mlserver – 是否使用 MLServer 或本地评分服务器。

  • synchronous – 如果为 True,则等待服务器进程退出并返回 0,如果进程以非零返回码退出,则引发异常。如果为 False,则立即返回服务器进程 Popen 实例。

  • stdout – 重定向服务器标准输出

  • stderr – 重定向服务器标准错误

class mlflow.models.MetricThreshold(threshold=None, min_absolute_change=None, min_relative_change=None, greater_is_better=None, higher_is_better=None)[源代码]

基类:object

此类允许您为模型验证定义指标阈值。允许的阈值包括:阈值、最小绝对变化、最小相对变化。

参数:
  • threshold – (可选) 一个表示指标阈值的数字。 - 如果对于该指标来说,数值越高越好,那么指标值必须 >= 阈值才能通过验证。 - 否则,指标值必须 <= 阈值才能通过验证。

  • min_absolute_change – (可选) 一个代表候选模型通过基线模型验证所需的最小绝对变化的正数。 - 如果指标越高越好,则指标值必须 >= 基线模型指标值 + min_absolute_change 才能通过验证。 - 否则,指标值必须 <= 基线模型指标值 - min_absolute_change 才能通过验证。

  • min_relative_change – (可选) 一个介于0和1之间的浮点数,表示候选模型在与基线模型比较时所需的最小相对变化(以基线模型指标值的百分比表示)。 - 如果指标值越高越好,则指标值必须 >= 基线模型指标值 * (1 + min_relative_change) - 否则,指标值必须 <= 基线模型指标值 * (1 - min_relative_change) - 请注意,如果基线模型指标值等于0,则阈值将回退为简单验证候选模型指标值是否优于基线模型指标值,即如果越高越好,则指标值 >= 基线模型指标值 + 1e-10;如果越低越好,则指标值 <= 基线模型指标值 - 1e-10。

  • greater_is_better – 一个必需的布尔值,表示该指标的高值是否更好。

  • higher_is_better

    自 2.3.0 版本弃用: 使用 greater_is_better 代替。

    一个必需的布尔值,表示该指标的高值是否更好。

property greater_is_better

布尔值,表示该指标的高值是否更好。

property higher_is_better

警告

mlflow.models.evaluation.validation.MetricThreshold.higher_is_better 已被弃用。此方法将在未来的版本中移除。请改用 The attribute `higher_is_better` is deprecated. Use `greater_is_better` instead.

布尔值,表示该指标的高值是否更好。

property min_absolute_change

与基线模型进行模型比较时所需的最小绝对变化值。

property min_relative_change

与基线模型进行模型比较时,所需的最小相对变化浮点值。

property threshold

阈值的值。

class mlflow.models.Model(artifact_path=None, run_id=None, utc_time_created=None, flavors=None, signature=None, saved_input_example_info: ~typing.Dict[str, ~typing.Any] | None = None, model_uuid: str | ~typing.Callable | None = <function Model.<lambda>>, mlflow_version: str | None = '2.17.2', metadata: ~typing.Dict[str, ~typing.Any] | None = None, model_size_bytes: int | None = None, resources: str | ~typing.List[~mlflow.models.resources.Resource] | None = None, **kwargs)[源代码]

基类:object

一个可以支持多种模型风格的 MLflow 模型。提供了实现新模型风格的 API。

add_flavor(name, **params)[源代码]

添加一个条目,说明如何在给定格式下提供模型。

classmethod from_dict(model_dict)[源代码]

从其 YAML 表示中加载模型。

get_input_schema()[源代码]

如果模型在保存时带有模式定义,则检索模型的输入模式。

get_model_info()[源代码]

创建一个包含模型元数据的 ModelInfo 实例。

get_output_schema()[源代码]

如果模型在保存时带有模式定义,则检索模型的输出模式。

get_params_schema()[源代码]

如果模型在保存时带有模式定义,则检索模型的参数模式。

get_serving_input(path: str)[源代码]

从模型目录加载服务输入示例。如果没有服务输入示例,则返回 None。

参数:

path – 模型目录的路径。

返回:

提供输入示例,如果模型没有提供输入示例则为 None。

get_tags_dict()[源代码]
classmethod load(path)[源代码]

从其 YAML 表示中加载模型。

参数:

path – 一个指向 MLmodel YAML 文件表示的模型对象或包含 MLmodel YAML 文件表示的目录的本地文件系统路径或 URI。

返回:

Model 的一个实例。

例子
from mlflow.models import Model

# Load the Model object from a local MLmodel file
model1 = Model.load("~/path/to/my/MLmodel")

# Load the Model object from a remote model directory
model2 = Model.load("s3://mybucket/path/to/my/model")
load_input_example(path: str)[源代码]

加载与模型一起保存的输入示例。如果没有示例元数据(即模型保存时没有示例),则返回 None。如果存在模型元数据但示例文件缺失,则引发 FileNotFoundError。

参数:

path – 模型目录的路径。

返回:

输入示例(NumPy ndarray、SciPy csc_matrix、SciPy csr_matrix、pandas DataFrame、dict)或 None(如果模型没有示例)。

load_input_example_params(path: str)[源代码]

加载与模型一起保存的输入示例的参数。如果输入示例中没有参数,则返回None。

参数:

path – 模型目录的路径。

返回:

params (字典) 或 None,如果模型没有参数。

classmethod log(artifact_path, flavor, registered_model_name=None, await_registration_for=300, metadata=None, run_id=None, resources=None, **kwargs)[源代码]

使用提供的 flavor 模块记录模型。如果没有活动运行,此方法将创建一个新的活动运行。

参数:
  • artifact_path – 运行识别模型的相对路径。

  • flavor – 用于保存模型的Flavor模块。该模块必须具有 save_model 函数,该函数将模型持久化为有效的MLflow模型。

  • registered_model_name – 如果指定,在 registered_model_name 下创建一个模型版本,如果给定名称的注册模型不存在,则同时创建一个注册模型。

  • signature – {{ 签名 }}

  • input_example – {{ 输入示例 }}

  • await_registration_for – 等待模型版本完成创建并处于 READY 状态的秒数。默认情况下,函数等待五分钟。指定 0 或 None 以跳过等待。

  • metadata – {{ 元数据 }}

  • resources – {{ 资源 }}

  • kwargs – 传递给模型风格的额外参数。

返回:

一个包含记录模型元数据的 ModelInfo 实例。

property metadata: Dict[str, Any] | None

传递给模型并在 MLmodel 文件中存储的自定义元数据字典。

Getter:

检索已应用于模型实例的自定义元数据。

Setter:

设置一个包含自定义键和值的字典,以便与模型实例一起包含。

类型:

Optional[Dict[str, Any]]

返回:

用户定义元数据字典,如果已定义。

示例
# Create and log a model with metadata to the Model Registry
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import mlflow
from mlflow.models import infer_signature

with mlflow.start_run():
    iris = datasets.load_iris()
    clf = RandomForestClassifier()
    clf.fit(iris.data, iris.target)
    signature = infer_signature(iris.data, iris.target)
    mlflow.sklearn.log_model(
        clf,
        "iris_rf",
        signature=signature,
        registered_model_name="model-with-metadata",
        metadata={"metadata_key": "metadata_value"},
    )

# model uri for the above model
model_uri = "models:/model-with-metadata/1"

# Load the model and access the custom metadata
model = mlflow.pyfunc.load_model(model_uri=model_uri)
assert model.metadata.metadata["metadata_key"] == "metadata_value"

备注

实验性:此属性可能会在未来的版本中无警告地更改或移除。

property model_size_bytes: int | None

一个可选的整数,表示模型的大小(以字节为单位)

Getter:

如果在保存模型时计算了模型大小,则检索模型大小

Setter:

将模型大小设置为模型实例

类型:

Optional[int]

property resources: Dict[str, Dict[ResourceType, List[Dict]]]

一个可选的字典,包含提供模型所需的所有资源。

Getter:

检索服务模型所需的资源

Setter:

设置为模型提供服务所需的资源

类型:

Dict[str, Dict[ResourceType, List[Dict]]]

备注

实验性:此属性可能会在未来的版本中无警告地更改或移除。

save(path)[源代码]

将模型写为本地 YAML 文件。

property saved_input_example_info: Dict[str, Any] | None

包含保存的输入示例元数据的字典,例如 {"artifact_path": "input_example.json", "type": "dataframe", "pandas_orient": "split"}

property signature

模型对象的预期输入和输出的可选定义,通过字段名称和数据类型定义。签名支持基于列和基于张量的输入和输出。

Getter:

如果模型在保存时带有签名定义,则检索模型实例的签名。

Setter:

为模型实例设置签名。

类型:

可选的[模型签名]

to_dict()[源代码]

将模型序列化为字典。

to_json()[源代码]

将模型写为json。

to_yaml(stream=None)[源代码]

将模型写为 yaml 字符串。

class mlflow.models.ModelConfig(*, development_config: str | Dict[str, Any] | None = None)[源代码]

基类:object

ModelConfig 用于代码中读取 YAML 配置文件,并且在记录模型时可以覆盖此配置文件。

get(key)[源代码]

获取配置中顶级参数的值。

class mlflow.models.ModelSignature(inputs: Schema | dataclass | None = None, outputs: Schema | dataclass | None = None, params: ParamSchema | None = None)[源代码]

基类:object

ModelSignature 指定了模型输入、输出和参数的架构。

ModelSignature 可以通过训练数据集、使用模型预测和推理参数 推断,或者通过传递输入和输出 Schema 以及参数 ParamSchema 手动构建。

classmethod from_dict(signature_dict: Dict[str, Any])[源代码]

从字典表示中反序列化。

参数:

signature_dict – 模型签名的字典表示。预期的字典格式为:{‘inputs’: <json字符串>, ‘outputs’: <json字符串>, ‘params’: <json字符串>}

返回:

ModelSignature 用字典中的数据填充。

to_dict() Dict[str, Any][源代码]

序列化为一个’可JSON化’的字典。

输入和输出模式表示为json字符串。这样做是为了在嵌入MLmodel yaml文件时,表示形式更加紧凑。

返回:

字典表示法,输入和输出模式表示为json字符串。

class mlflow.models.Resource(type: ResourceType, target_uri: str)[源代码]

基类:ABC

用于定义服务模型所需资源的基类。

参数:
  • type (ResourceType) – 资源类型。

  • target_uri (str) – 这些资源托管的目标URI。

classmethod from_dict(data)[源代码]

将字典转换为资源。子类必须实现此方法。

target_uri: str
abstract to_dict()[源代码]

将资源转换为字典。子类必须实现此方法。

type: ResourceType
class mlflow.models.ResourceType(value)[源代码]

基类:Enum

枚举以定义服务模型所需的不同类型的资源。

FUNCTION = 'function'
GENIE_SPACE = 'genie_space'
SERVING_ENDPOINT = 'serving_endpoint'
SQL_WAREHOUSE = 'sql_warehouse'
UC_CONNECTION = 'uc_connection'
VECTOR_SEARCH_INDEX = 'vector_search_index'
mlflow.models.add_libraries_to_model(model_uri, run_id=None, registered_model_name=None)[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

给定一个已注册的 model_uri(例如 models:/<model_name>/<model_version>),此工具将模型及其所有必需的模型库重新记录到模型注册表中。所需的模型库作为模型工件与模型一起存储。此外,对模型(例如 conda.yaml、requirements.txt)的支持文件会进行修改,以使用添加的库。

默认情况下,此工具在由 model_uri 指定的同一注册模型下创建一个新模型版本。可以通过指定 registered_model_name 参数来覆盖此行为。

参数:
  • model_uri – 模型注册表中的注册模型URI,格式为 models:/<模型名称>/<模型版本/阶段/最新>

  • run_id – 记录带有库的模型的运行ID。如果为None,则带有库的模型将记录到与``model_uri``指定的模型版本相对应的源运行中;如果模型版本没有源运行,则创建一个新的运行。

  • registered_model_name – 新模型版本(包含其库的模型)在输入的 registered_model_name 下注册。如果为 None,则会在模型注册表中现有模型下记录新版本。

备注

此工具仅对已注册到模型注册表的模型进行操作。

备注

这些库仅与添加它们的平台兼容。不支持跨平台库。

示例
# Create and log a model to the Model Registry
import pandas as pd
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import mlflow
import mlflow.sklearn
from mlflow.models import infer_signature

with mlflow.start_run():
    iris = datasets.load_iris()
    iris_train = pd.DataFrame(iris.data, columns=iris.feature_names)
    clf = RandomForestClassifier(max_depth=7, random_state=0)
    clf.fit(iris_train, iris.target)
    signature = infer_signature(iris_train, clf.predict(iris_train))
    mlflow.sklearn.log_model(
        clf, "iris_rf", signature=signature, registered_model_name="model-with-libs"
    )

# model uri for the above model
model_uri = "models:/model-with-libs/1"

# Import utility
from mlflow.models.utils import add_libraries_to_model

# Log libraries to the original run of the model
add_libraries_to_model(model_uri)

# Log libraries to some run_id
existing_run_id = "21df94e6bdef4631a9d9cb56f211767f"
add_libraries_to_model(model_uri, run_id=existing_run_id)

# Log libraries to a new run
with mlflow.start_run():
    add_libraries_to_model(model_uri)

# Log libraries to a new registered model named 'new-model'
with mlflow.start_run():
    add_libraries_to_model(model_uri, registered_model_name="new-model")
mlflow.models.build_docker(model_uri=None, name='mlflow-pyfunc', env_manager='virtualenv', mlflow_home=None, install_java=False, install_mlflow=False, enable_mlserver=False, base_image=None)[源代码]

构建一个Docker镜像,其默认入口点在端口8080上提供一个MLflow模型,使用python_function风格。如果指定了``model_uri``,容器将提供该模型。如果未指定``model_uri``,则必须将MLflow模型目录作为卷挂载到容器的/opt/ml/model目录中。

重要

自 MLflow 2.10.1 起,使用 --model-uri 构建的 Docker 镜像**不会安装 Java**以提高性能,除非模型风格是 ["johnsnowlabs", "h2o", "mleap", "spark"] 之一。如果你需要为其他风格安装 Java,例如使用 SparkML 的自定义 Python 模型,请指定 install-java=True 以强制安装 Java。对于早期版本,Java 总是会被安装到镜像中。

警告

如果 model_uri 未指定,生成的镜像不支持使用 RFunc 或 Java MLeap 模型服务器提供模型服务。

注意:默认情况下,容器将启动 nginx 和 gunicorn 进程。如果你不需要启动 nginx 进程(例如,如果你将容器部署到 Google Cloud Run),你可以通过 DISABLE_NGINX 环境变量来禁用它:

docker run -p 5001:8080 -e DISABLE_NGINX=true "my-image-name"

更多关于 ‘python_function’ 风格的信息,请参见 https://www.mlflow.org/docs/latest/python_api/mlflow.pyfunc.html

参数:
  • model_uri – 模型的URI。本地路径、’runs:/’ URI 或远程存储 URI(例如,’s3://’ URI)。有关模型工件支持的远程URI的更多信息,请参阅 https://mlflow.org/docs/latest/tracking.html#artifact-stores

  • name – 要构建的 Docker 镜像名称。默认为 ‘mlflow-pyfunc’。

  • install_java – 如果指定,则在镜像中安装Java。默认值为False,以减少镜像大小和构建时间。需要Java的模型风格将自动启用此设置,例如Spark风格。(此参数仅在MLflow 2.10.1及更高版本中可用。在早期版本中,Java始终安装到镜像中。)

  • enable_mlserver – 如果指定,图像将使用 Seldon MLserver 作为后端构建。

  • env_manager – 如果指定,使用指定的环境管理器为 MLmodel 创建一个环境。支持以下值:(1) virtualenv(默认):使用 virtualenv 和 pyenv 进行 Python 版本管理 (2) conda:使用 conda (3) local:使用本地环境而不创建新环境。

  • install_mlflow – 如果指定并且存在需要激活的 conda 或 virtualenv 环境,mlflow 将在环境激活后安装到该环境中。安装的 mlflow 版本将与调用此命令的版本相同。

  • mlflow_home – MLflow 项目的本地克隆路径。仅用于开发。

  • base_image – Docker 镜像的基础镜像。如果未指定,默认镜像为 UBUNTU_BASE_IMAGE = “ubuntu:20.04” 或 PYTHON_SLIM_BASE_IMAGE = “python:{version}-slim”。注意:如果使用自定义镜像,不能保证镜像能正常工作。通过基于 ubuntu 镜像构建您的镜像,您可能会发现更高的兼容性。此外,您必须安装 Java 和 virtualenv 以使镜像正常工作。

mlflow.models.convert_input_example_to_serving_input(input_example) str | None[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

将模型的输入示例转换为可用于评分服务器中模型推理的服务输入示例的辅助函数。

参数:

input_example – 模型输入示例。支持的类型包括 pandas.DataFrame、numpy.ndarray、字典(名称 -> numpy.ndarray)、列表、标量以及包含可序列化值的json字典。

返回:

将输入示例作为JSON字符串提供

mlflow.models.evaluate(model=None, data=None, *, model_type=None, targets=None, predictions=None, dataset_path=None, feature_names=None, evaluators=None, evaluator_config=None, custom_metrics=None, extra_metrics=None, custom_artifacts=None, validation_thresholds=None, baseline_model=None, env_manager='local', model_config=None, baseline_config=None, inference_params=None)[源代码]

在给定数据和选定指标上评估模型性能。

此函数使用指定的 evaluators 对指定的数据集上的 PyFunc 模型或自定义可调用对象进行评估,并将结果指标和工件记录到 MLflow 跟踪服务器。用户也可以跳过设置 model ,直接将模型输出放在 data 中进行评估。有关详细信息,请阅读 模型评估文档

默认评估器行为:
  • 默认的评估器,可以通过 evaluators="default"evaluators=None 调用,支持以下模型类型。对于每个预定义的模型类型,默认的评估器会在选定的一组指标上评估您的模型,并生成图表等工件。请在下方找到更多详细信息。

  • 对于 "regressor""classifier" 模型类型,默认的评估器使用 SHAP 生成模型摘要图和特征重要性图。

  • 对于回归模型,默认的评估器还会记录:
    • metrics: example_count, mean_absolute_error, mean_squared_error, root_mean_squared_error, sum_on_target, mean_on_target, r2_score, max_error, mean_absolute_percentage_error.

  • 对于二元分类器,默认的评估器还会记录:
    • metrics: 真负例, 假正例, 假负例, 真正例, 召回率, 精确率, f1分数, 准确率, 样本数量, 对数损失, ROC曲线下面积, 精确率-召回率曲线下面积。

    • artifacts: 提升曲线图, 精确召回曲线图, ROC曲线图。

  • 对于多类分类器,默认的评估器还会记录:
    • 指标: 准确率, 样本数量, 微平均F1分数, 宏平均F1分数, 对数损失

    • artifacts: 一个用于“per_class_metrics”的CSV文件(每个类别的指标包括真负例/假正例/假负例/真正例/召回率/精确率/ROC AUC,精确率-召回率 AUC),精确率-召回率合并曲线图,ROC合并曲线图。

  • 对于问答模型,默认的评估器记录:
  • 对于文本摘要模型,默认的评估器记录:
  • 对于文本模型,默认的评估器记录:
  • 对于检索器模型,默认的评估器记录:
    • 指标: precision_at_k(k), recall_at_k(k)ndcg_at_k(k) - 所有指标的默认值均为 retriever_k = 3。

    • artifacts: 一个包含模型输入、输出、目标以及每行指标的JSON文件,以表格格式呈现。

  • 对于 sklearn 模型,默认的评估器还会记录模型通过 model.score 方法计算的评估标准(例如分类器的平均准确率)。

  • 上述指标/工件会被记录到活动的 MLflow 运行中。如果没有活动的运行,则会创建一个新的 MLflow 运行来记录这些指标和工件。请注意,baseline_model 不会记录任何指标/工件。

  • 此外,关于指定数据集的信息——哈希、名称(如果指定)、路径(如果指定)以及评估它的模型的UUID——会被记录到 mlflow.datasets 标签中。

  • 默认评估器的可用 evaluator_config 选项包括:
    • log_model_explainability: 一个布尔值,指定是否记录模型可解释性洞察,默认值为 True。

    • explainability_algorithm: 一个字符串,用于指定模型可解释性的SHAP解释器算法。支持的算法包括:’exact’, ‘permutation’, ‘partition’, ‘kernel’。如果未设置,将使用 shap.Explainer 并选择“auto”算法,该算法会根据模型选择最佳的解释器。

    • explainability_nsamples: 用于计算模型可解释性洞察的样本行数。默认值为2000。

    • explainability_kernel_link: shap 核解释器使用的核链接函数。可用值为 “identity” 和 “logit”。默认值为 “identity”。

    • max_classes_for_multiclass_roc_pr: 对于多类分类任务,记录每个类别的ROC曲线和精确召回曲线的最大类别数。如果类别数超过配置的最大值,则不记录这些曲线。

    • metric_prefix:一个可选的前缀,用于在评估过程中为每个生成的指标和工件名称添加前缀。

    • log_metrics_with_dataset_info:一个布尔值,指定在评估期间是否在记录到MLflow Tracking的每个指标名称中包含评估数据集的信息,默认值为True。

    • pos_label:如果指定,在计算二分类模型的精度、召回率、F1等分类指标时使用的正类标签。对于多分类和回归模型,此参数将被忽略。

    • average: 计算多类分类模型(如精度、召回率、f1等)分类指标时使用的平均方法(默认:'weighted')。对于二分类和回归模型,此参数将被忽略。

    • sample_weights:在计算模型性能指标时,为每个样本应用的权重。

    • col_mapping: 一个字典,用于将输入数据集或输出预测中的列名映射到调用评估函数时使用的列名。

    • retriever_k: 当 model_type="retriever" 时使用的参数,作为计算内置指标 precision_at_k(k)recall_at_k(k)ndcg_at_k(k) 时使用的顶级检索文档的数量。默认值为 3。对于所有其他模型类型,此参数将被忽略。

  • 评估数据集的局限性:
    • 对于分类任务,数据集标签用于推断类的总数。

    • 对于二分类任务,负标签值必须是0或-1或False,正标签值必须是1或True。

  • 指标/工件计算的限制:
    • 对于分类任务,某些指标和工件计算需要模型输出类概率。目前,对于 scikit-learn 模型,默认评估器会调用底层模型的 predict_proba 方法来获取概率。对于其他模型类型,默认评估器不会计算需要概率输出的指标/工件。

  • 默认评估器日志记录模型的局限性:
    • shap.Explainerauto 算法对线性模型使用 Linear 解释器,对树模型使用 Tree 解释器。由于 SHAP 的 LinearTree 解释器不支持多类分类,因此默认评估器在处理多类分类任务时会回退到使用 ExactPermutation 解释器。

    • 目前不支持记录 PySpark 模型的可解释性洞察。

    • 评估数据集的标签值必须是数值型或布尔型,所有特征值必须是数值型,并且每个特征列必须只包含标量值。

  • 启用环境恢复时的限制:
    • 当为评估模型启用了环境恢复(即指定了非本地的 env_manager),模型被加载为一个客户端,该客户端在一个独立的Python环境中调用MLflow模型评分服务器进程,该环境安装了模型的训练时依赖项。因此,模型的 ``predict_proba``(用于概率输出)或 ``score``(计算sklearn模型的评估标准)等方法变得不可访问,默认的评估器不会计算需要这些方法的指标或工件。

    • 由于模型是一个 MLflow 模型服务器进程,SHAP 解释的计算速度较慢。因此,当指定非本地的 env_manager 时,模型解释性功能默认被禁用,除非 evaluator_config 选项 log_model_explainability 被显式设置为 True

参数:
  • model – 可选。如果指定,它应该是以下之一: - 一个 pyfunc 模型实例 - 一个指向 pyfunc 模型的 URI - 一个指向 MLflow Deployments 端点的 URI,例如 "endpoints:/my-chat" - 一个可调用的函数:此函数应能够接受模型输入并返回预测。它应遵循 predict 方法的签名。以下是一个有效函数的示例:

  • data – 以下之一: - 一个numpy数组或评估特征的列表,不包括标签。 - 一个包含评估特征、标签和可选模型输出的Pandas DataFrame。当模型未指定时,需要提供模型输出。如果未指定``feature_names``参数,则除标签列和模型输出列之外的所有列都被视为特征列。否则,只有``feature_names``中存在的列名被视为特征列。 - 一个包含评估特征和标签的Spark DataFrame。如果未指定``feature_names``参数,则除标签列之外的所有列都被视为特征列。否则,只有``feature_names``中存在的列名被视为特征列。只有Spark DataFrame中的前10000行将被用作评估数据。 - 一个包含评估特征、标签和可选模型输出的:py:class:`mlflow.data.dataset.Dataset`实例。模型输出仅在使用PandasDataset时支持。当模型未指定时,需要提供模型输出,并且应通过PandasDataset的``predictions``属性指定。

  • targets – 如果 data 是一个 numpy 数组或列表,则返回一个评估标签的 numpy 数组或列表。如果 data 是一个 DataFrame,则返回 data 中包含评估标签的列的字符串名称。分类器和回归器模型需要此项,但对于问答、文本摘要和文本模型则是可选的。如果 data 是一个定义了目标的 mlflow.data.dataset.Dataset,那么 targets 是可选的。

  • predictions – 可选。包含模型输出的列名。 - 当指定 model 并且输出多列时,可以使用 predictions 来指定用于存储模型输出以进行评估的列名。 - 当未指定 modeldata 是 pandas 数据框时,可以使用 predictions 来指定 data 中包含模型输出的列名。 .. code-block:: python

  • model_type – (可选) 描述模型类型的字符串。默认的评估器支持以下模型类型: - 'classifier' - 'regressor' - 'question-answering' - 'text-summarization' - 'text' - 'retriever' 如果没有指定 model_type ,则必须通过 extra_metrics 参数提供要计算的指标列表。 .. 注意:: 'question-answering', 'text-summarization', 'text', 和 'retriever' 是实验性的,可能在未来的版本中被更改或移除。

  • inference_params – (可选) 一个推理参数的字典,在模型进行预测时传递给模型,例如 {"max_tokens": 100}。仅当 model 是 MLflow Deployments 端点 URI 时使用,例如 "endpoints:/my-chat"

  • dataset_path – (可选) 数据存储的路径。不得包含双引号 ()。如果指定,路径会记录到 mlflow.datasets 标签中,用于血统追踪目的。

  • feature_names – (可选) 一个列表。如果 data 参数是一个 numpy 数组或列表,feature_names 是每个特征的特征名称列表。如果 feature_names=None,则使用格式 feature_{feature_index} 生成 feature_names。如果 data 参数是一个 Pandas DataFrame 或 Spark DataFrame,feature_names 是 DataFrame 中特征列名称的列表。如果 feature_names=None,则除了标签列和预测列之外的所有列都被视为特征列。

  • evaluators – 用于模型评估的评估器名称,或评估器名称列表。如果未指定,则使用所有能够对指定数据集上的指定模型进行评估的评估器。默认评估器可以通过名称 "default" 来引用。要查看所有可用的评估器,请调用 mlflow.models.list_evaluators()

  • evaluator_config – 一个额外的配置字典,提供给评估器。如果指定了多个评估器,每个配置应作为一个嵌套字典提供,其键为评估器名称。

  • extra_metrics – (可选) 一个 EvaluationMetric 对象列表。这些指标除了与预定义 model_type 关联的默认指标外,还会被计算。设置 model_type=None 将仅计算在 extra_metrics 中指定的指标。有关内置指标和如何定义额外指标的更多信息,请参阅 mlflow.metrics 模块。 .. code-block:: python

  • custom_artifacts

    (可选) 具有以下签名的自定义工件函数列表:

    def custom_artifact(
        eval_df: Union[pandas.Dataframe, pyspark.sql.DataFrame],
        builtin_metrics: Dict[str, float],
        artifacts_dir: str,
    ) -> Dict[str, Any]:
        """
        Args:
            eval_df:
                A Pandas or Spark DataFrame containing ``prediction`` and ``target``
                column.  The ``prediction`` column contains the predictions made by the
                model.  The ``target`` column contains the corresponding labels to the
                predictions made on that row.
            builtin_metrics:
                A dictionary containing the metrics calculated by the default evaluator.
                The keys are the names of the metrics and the values are the scalar
                values of the metrics. Refer to the DefaultEvaluator behavior section
                for what metrics will be returned based on the type of model (i.e.
                classifier or regressor).
            artifacts_dir:
                A temporary directory path that can be used by the custom artifacts
                function to temporarily store produced artifacts. The directory will be
                deleted after the artifacts are logged.
    
        Returns:
            A dictionary that maps artifact names to artifact objects
            (e.g. a Matplotlib Figure) or to artifact paths within ``artifacts_dir``.
        """
        ...
    

    工件可以表示的对象类型:

    • 表示工件文件路径的字符串 uri。MLflow 将根据文件扩展名推断工件的类型。

    • JSON 对象的字符串表示。这将保存为一个 .json 文件。

    • Pandas DataFrame。这将解析为一个CSV制品。

    • Numpy 数组。这将保存为一个 .npy 工件。

    • Matplotlib 图形。这将保存为一个图像工件。注意,matplotlib.pyplot.savefig 在幕后被调用,使用默认配置。要自定义,可以保存图形并返回其文件路径,或者通过 matplotlib.rcParams 中的环境变量定义自定义。

    • 其他对象将尝试使用默认协议进行pickle化。

    自定义工件的示例用法
    import mlflow
    import matplotlib.pyplot as plt
    
    
    def scatter_plot(eval_df, builtin_metrics, artifacts_dir):
        plt.scatter(eval_df["prediction"], eval_df["target"])
        plt.xlabel("Targets")
        plt.ylabel("Predictions")
        plt.title("Targets vs. Predictions")
        plt.savefig(os.path.join(artifacts_dir, "example.png"))
        plt.close()
        return {"pred_target_scatter": os.path.join(artifacts_dir, "example.png")}
    
    
    def pred_sample(eval_df, _builtin_metrics, _artifacts_dir):
        return {"pred_sample": pred_sample.head(10)}
    
    
    mlflow.evaluate(..., custom_artifacts=[scatter_plot, pred_sample])
    

  • validation_thresholds – (可选) 一个从指标名称到 mlflow.models.MetricThreshold 的字典,用于模型验证。每个指标名称必须是内置指标的名称或 extra_metrics 参数中定义的指标名称。 .. code-block:: python

  • baseline_model – (可选)一个指向具有 pyfunc 风味的 MLflow 模型的字符串 URI。如果指定,候选 model 将与这个基线进行模型验证比较。

  • env_manager – 指定一个环境管理器来在隔离的 Python 环境中加载候选 modelbaseline_model 并恢复它们的依赖项。默认值是 local,支持以下值: - virtualenv:(推荐)使用 virtualenv 恢复用于训练模型的 Python 环境。 - conda:使用 Conda 恢复用于训练模型的软件环境。 - local:使用当前的 Python 环境进行模型推理,这可能与用于训练模型的环境不同,并可能导致错误或无效的预测。

  • model_config – 用于通过 pyfunc 加载模型的模型配置。检查模型的 pyfunc 风格以了解您的特定模型支持哪些键。如果未指定,则使用模型中的默认模型配置(如果有)。

  • baseline_config – 用于加载基线模型的模型配置。如果未指定,则使用基线模型中的默认模型配置(如果有)。

返回:

一个包含候选模型和基线模型指标以及候选模型工件的 mlflow.models.EvaluationResult 实例。

mlflow.models.get_model_info(model_uri: str) ModelInfo[源代码]

获取指定模型的元数据,例如其输入/输出签名。

参数:

model_uri – MLflow 模型的位置,采用 URI 格式。例如: - /Users/me/path/to/local/model - relative/path/to/local/model - s3://my_bucket/path/to/model - runs:/<mlflow_run_id>/run-relative/path/to/model - models:/<model_name>/<model_version> - models:/<model_name>/<stage> - mlflow-artifacts:/path/to/model 有关支持的 URI 方案的更多信息,请参阅 引用工件

返回:

一个包含记录模型元数据的 ModelInfo 实例。

get_model_info 的使用示例
import mlflow.models
import mlflow.sklearn
from sklearn.ensemble import RandomForestRegressor

with mlflow.start_run() as run:
    params = {"n_estimators": 3, "random_state": 42}
    X, y = [[0, 1]], [1]
    signature = mlflow.models.infer_signature(X, y)
    rfr = RandomForestRegressor(**params).fit(X, y)
    mlflow.log_params(params)
    mlflow.sklearn.log_model(rfr, artifact_path="sklearn-model", signature=signature)

model_uri = f"runs:/{run.info.run_id}/sklearn-model"
# Get model info with model_uri
model_info = mlflow.models.get_model_info(model_uri)
# Get model signature directly
model_signature = model_info.signature
assert model_signature == signature
mlflow.models.infer_pip_requirements(model_uri, flavor, fallback=None, timeout=None, extra_env_vars=None)[源代码]

通过创建一个子进程并加载模型来推断指定模型的pip需求,以确定导入了哪些包。

参数:
  • model_uri – 模型的URI。

  • flavor – 模型的风味名称。

  • fallback – 如果提供了 fallback,则在推理过程中发生的意外错误会被吞没,并返回 fallback 的值。否则,错误将被抛出。

  • timeout – 如果指定,推理操作将受限于超时(以秒为单位)。

  • extra_env_vars – 传递给子进程的额外环境变量的字典。默认为 None。

返回:

推断出的 pip 需求列表(例如 ["scikit-learn==0.24.2", ...])。

mlflow.models.infer_signature(model_input: Any = None, model_output: MlflowInferableDataset = None, params: Dict[str, Any] | None = None) ModelSignature[源代码]

从训练数据(输入)、模型预测(输出)和参数(用于推理)推断MLflow模型签名。

签名表示模型输入和输出为数据框,其中列(可选)命名并指定数据类型为 mlflow.types.DataType 中定义的类型之一。它还包括推理的参数模式。如果用户数据包含不兼容的类型或未以以下支持的格式之一传递,此方法将引发异常。

输入应为以下之一:
  • pandas.DataFrame

  • pandas.Series

  • 字典 { 名称 -> numpy.ndarray }

  • numpy.ndarray

  • pyspark.sql.DataFrame

  • scipy.sparse.csr_matrix

  • scipy.sparse.csc_matrix

  • 字典 / 字典列表的 JSON 可转换类型

元素类型应可映射到 mlflow.types.DataType 之一。

对于 pyspark.sql.DataFrame 输入,类型为 DateType 和 TimestampType 的列都被推断为类型 datetime,这在推断时会被强制转换为 TimestampType。

参数:
  • model_input – 模型的有效输入。例如(训练数据集的子集)。

  • model_output – 有效的模型输出。例如,模型对(部分)训练数据集的预测。

  • params – 推理的有效参数。它应该是一个字典,包含在推理过程中可以通过传递 params 给 pyfunc predict 方法来设置在模型上的参数。有效参数的示例:

返回:

模型签名

mlflow.models.list_evaluators()[源代码]

返回所有可用评估器的名称列表。

mlflow.models.make_metric(*, eval_fn, greater_is_better, name=None, long_name=None, version=None, metric_details=None, metric_metadata=None, genai_metric_args=None)[源代码]

一个用于创建 EvaluationMetric 对象的工厂函数。

参数:
  • eval_fn

    一个具有以下签名的计算度量的函数:

    def eval_fn(
        predictions: pandas.Series,
        targets: pandas.Series,
        metrics: Dict[str, MetricValue],
        **kwargs,
    ) -> Union[float, MetricValue]:
        """
        Args:
            predictions: A pandas Series containing the predictions made by the model.
            targets: (Optional) A pandas Series containing the corresponding labels
                for the predictions made on that input.
            metrics: (Optional) A dictionary containing the metrics calculated by the
                default evaluator.  The keys are the names of the metrics and the values
                are the metric values.  To access the MetricValue for the metrics
                calculated by the system, make sure to specify the type hint for this
                parameter as Dict[str, MetricValue].  Refer to the DefaultEvaluator
                behavior section for what metrics will be returned based on the type of
                model (i.e. classifier or regressor).  kwargs: Includes a list of args
                that are used to compute the metric. These args could information coming
                from input data, model outputs or parameters specified in the
                `evaluator_config` argument of the `mlflow.evaluate` API.
            kwargs: Includes a list of args that are used to compute the metric. These
                args could be information coming from input data, model outputs,
                other metrics, or parameters specified in the `evaluator_config`
                argument of the `mlflow.evaluate` API.
    
        Returns: MetricValue with per-row scores, per-row justifications, and aggregate
            results.
        """
        ...
    

  • greater_is_better – 指标的值越高是否越好。

  • name – 指标的名称。如果 eval_fn 是一个 lambda 函数或 eval_fn.__name__ 属性不可用,则必须指定此参数。

  • long_name – (可选) 指标的长名称。例如,"mean_squared_error" 对应 "mse"

  • version – (可选) 指标版本。例如 v1

  • metric_details – (可选) 该指标的描述及其计算方法。

  • metric_metadata – (可选) 包含指标元数据的字典。

  • genai_metric_args – (可选)一个包含用户在调用 make_genai_metric 或 make_genai_metric_from_prompt 时指定的参数的字典。这些参数会被保留,以便我们稍后可以反序列化相同的指标对象。

mlflow.models.predict(model_uri, input_data=None, input_path=None, content_type='json', output_path=None, env_manager='virtualenv', install_mlflow=False, pip_requirements_override=None)[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

使用保存的 MLflow 模型生成 JSON 格式的预测。有关此函数接受的输入数据格式的信息,请参阅以下文档:https://www.mlflow.org/docs/latest/models.html#built-in-deployment-tools

参数:
  • model_uri – 模型的URI。本地路径,本地或远程URI,例如 runs:/, s3://。

  • input_data – 用于预测的输入数据。必须是 PyFunc 模型的有效输入。请参考 mlflow.pyfunc.PyFuncModel.predict() 以了解支持的输入类型。 .. 注意:: 如果此 API 因 input_data 中的错误而失败,请使用 mlflow.models.convert_input_example_to_serving_input 手动验证您的输入数据。

  • input_path – 包含输入数据的文件路径。如果提供,’input_data’ 必须为 None。

  • content_type – 输入数据的类型。可以是以下之一:{‘json’, ‘csv’}。

  • output_path – 输出结果的文件为 json。如果未提供,则输出到标准输出。

  • env_manager – 指定一种为 MLmodel 推理创建环境的方法: - “virtualenv”(默认):使用 virtualenv(以及用于 Python 版本管理的 pyenv) - “local”:使用本地环境 - “conda”:使用 conda

  • install_mlflow – 如果指定并且存在需要激活的 conda 或 virtualenv 环境,mlflow 将在环境激活后安装到该环境中。安装的 mlflow 版本将与调用此命令的版本相同。

  • pip_requirements_override – 如果指定,将指定的 Python 依赖项安装到模型推理环境中。当你想要添加额外的依赖项或尝试定义在已记录模型中的依赖项的不同版本时,这特别有用。 .. tip:: 在验证 pip 需求覆盖按预期工作后,你可以使用 mlflow.models.update_model_requirements API 更新已记录模型的依赖项,而无需重新记录模型。请注意,已注册的模型是不可变的,因此你需要使用更新后的模型注册一个新版本。

代码示例:

import mlflow

run_id = "..."

mlflow.models.predict(
    model_uri=f"runs:/{run_id}/model",
    input_data={"x": 1, "y": 2},
    content_type="json",
)

# Run prediction with additional pip dependencies
mlflow.models.predict(
    model_uri=f"runs:/{run_id}/model",
    input_data={"x": 1, "y": 2},
    content_type="json",
    pip_requirements_override=["scikit-learn==0.23.2"],
)
mlflow.models.set_model(model)[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

当以代码形式记录模型时,可以使用此函数来设置要记录的模型对象。

参数:

model – 要记录的模型对象。支持的模型类型包括: - Python 函数或可调用对象。 - Langchain 模型或 Langchain 模型的路径。 - Llama Index 模型或 Llama Index 模型的路径。

mlflow.models.set_retriever_schema(*, primary_key: str, text_column: str, doc_uri: str | None = None, other_columns: List[str] | None = None, name: str | None = 'retriever')[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

在Python文件或笔记本中定义了向量存储后,调用set_retriever_schema(),以便在模型推理期间MLflow检索文档时,MLflow能够解释每个检索到的文档中的字段,并确定哪些字段对应于文档文本、文档URI等。

参数:
  • primary_key – 检索器或向量索引的主键。

  • text_column – 用于嵌入的文本列的名称。

  • doc_uri – 包含文档URI的列的名称。

  • other_columns – 在跟踪日志记录期间需要检索的向量索引中其他列的列表。

  • name – 检索工具或向量存储索引的名称。

示例
from mlflow.models import set_retriever_schema

set_retriever_schema(
    primary_key="chunk_id",
    text_column="chunk_text",
    doc_uri="doc_uri",
    other_columns=["title"],
)
mlflow.models.set_signature(model_uri: str, signature: ModelSignature)[源代码]

为指定的模型工件设置模型签名。

该过程包括下载模型工件中的 MLmodel 文件(如果它是非本地的),更新其模型签名,然后覆盖现有的 MLmodel 文件。如果与模型工件关联的工件库不允许覆盖,此函数将失败。

此外,由于模型注册表中的工件是只读的,位于模型注册表中并以 models:/ URI 方案表示的模型工件与此 API 不兼容。要为模型版本设置签名,首先在源模型工件上设置签名。然后,使用更新后的模型工件生成新的模型版本。有关为模型版本设置签名的更多信息,请参阅 此文档部分

参数:
  • model_uri – MLflow 模型的位置,采用 URI 格式。例如: - /Users/me/path/to/local/model - relative/path/to/local/model - s3://my_bucket/path/to/model - runs:/<mlflow_run_id>/run-relative/path/to/model - mlflow-artifacts:/path/to/model

  • signature – 要设置在模型上的 ModelSignature。

示例
import mlflow
from mlflow.models import set_signature, infer_signature

# load model from run artifacts
run_id = "96771d893a5e46159d9f3b49bf9013e2"
artifact_path = "models"
model_uri = f"runs:/{run_id}/{artifact_path}"
model = mlflow.pyfunc.load_model(model_uri)

# determine model signature
test_df = ...
predictions = model.predict(test_df)
signature = infer_signature(test_df, predictions)

# set the signature for the logged model
set_signature(model_uri, signature)
mlflow.models.update_model_requirements(model_uri: str, operation: Literal['add', 'remove'], requirement_list: List[str]) None[源代码]

添加或删除模型 conda.yaml 和 requirements.txt 文件中的依赖项。

该过程涉及从模型工件中下载这两个文件(如果它们是非本地的),根据指定的要求更新它们,然后覆盖现有文件。如果与模型工件关联的工件仓库不允许覆盖,此功能将失败。

请注意,模型注册表的 URI(即形式为 models:/ 的 URI)不受支持,因为模型注册表中的工件旨在为只读。

如果添加需求,该函数将覆盖任何现有的重叠需求,否则将新需求附加到现有列表中。

如果移除需求,该函数将忽略任何版本指定符,并移除所有指定的包名。任何在现有文件中未找到的需求将被忽略。

参数:
  • model_uri – MLflow 模型的位置,采用 URI 格式。例如: - /Users/me/path/to/local/model - relative/path/to/local/model - s3://my_bucket/path/to/model - runs:/<mlflow_run_id>/run-relative/path/to/model - mlflow-artifacts:/path/to/model 有关支持的 URI 方案的更多信息,请参阅 引用工件

  • operation – 要执行的操作。必须是“add”或“remove”之一。

  • requirement_list – 要从模型中添加或删除的需求列表。例如:[“numpy==1.20.3”, “pandas>=1.3.3”]

mlflow.models.validate_schema(data: DataFrame | Series | ndarray | csc_matrix | csr_matrix | List[Any] | Dict[str, Any] | datetime | bool | bytes | float | int | str | DataFrame, expected_schema: Schema) None[源代码]

验证输入数据是否符合预期的模式。

参数:
  • data – 要验证的输入数据。支持的类型有: - pandas.DataFrame - pandas.Series - numpy.ndarray - scipy.sparse.csc_matrix - scipy.sparse.csr_matrix - List[Any] - Dict[str, Any] - str

  • expected_schema – 输入数据的预期模式。

抛出:

mlflow.exceptions.MlflowException – 当输入数据与模式不匹配时。

validate_schema 的示例用法
import mlflow.models

# Suppose you've already got a model_uri
model_info = mlflow.models.get_model_info(model_uri)
# Get model signature directly
model_signature = model_info.signature
# validate schema
mlflow.models.validate_schema(input_data, model_signature.inputs)
mlflow.models.validate_serving_input(model_uri: str, serving_input: str | Dict[str, Any])[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

帮助函数,用于在提供模型服务之前验证模型是否可以服务以及提供的输入是否有效。

参数:
  • model_uri – 要服务的模型的URI。

  • serving_input – 要验证的输入数据。应为字典或JSON字符串。

返回:

模型的预测结果。

class mlflow.models.model.ModelInfo(artifact_path: str, flavors: Dict[str, Any], model_uri: str, model_uuid: str, run_id: str, saved_input_example_info: Dict[str, Any] | None, signature, utc_time_created: str, mlflow_version: str, signature_dict: Dict[str, Any] | None = None, metadata: Dict[str, Any] | None = None, registered_model_version: int | None = None)[源代码]

已记录的 MLflow 模型的元数据。

property artifact_path

运行识别已记录模型的相对路径。

Getter:

获取已记录模型的相对路径。

类型:

str

property flavors

一个将风格名称映射到如何以该风格提供模型的字典。

Getter:

获取已记录模型的映射,该映射定义了模型服务中使用的参数

类型:

Dict[str, str]

scikit-learn 记录模型的示例风味映射
{
    "python_function": {
        "model_path": "model.pkl",
        "loader_module": "mlflow.sklearn",
        "python_version": "3.8.10",
        "env": "conda.yaml",
    },
    "sklearn": {
        "pickled_model": "model.pkl",
        "sklearn_version": "0.24.1",
        "serialization_format": "cloudpickle",
    },
}
property metadata: Dict[str, Any] | None

添加到模型中的用户定义元数据。

Getter:

获取关于模型的用户定义元数据

类型:

Optional[Dict[str, Any]]

模型元数据的示例用法
# Create and log a model with metadata to the Model Registry

from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
import mlflow
from mlflow.models import infer_signature

with mlflow.start_run():
    iris = datasets.load_iris()
    clf = RandomForestClassifier()
    clf.fit(iris.data, iris.target)
    signature = infer_signature(iris.data, iris.target)
    mlflow.sklearn.log_model(
        clf,
        "iris_rf",
        signature=signature,
        registered_model_name="model-with-metadata",
        metadata={"metadata_key": "metadata_value"},
    )

# model uri for the above model
model_uri = "models:/model-with-metadata/1"

# Load the model and access the custom metadata from its ModelInfo object
model = mlflow.pyfunc.load_model(model_uri=model_uri)
assert model.metadata.get_model_info().metadata["metadata_key"] == "metadata_value"

# Load the ModelInfo and access the custom metadata
model_info = mlflow.models.get_model_info(model_uri=model_uri)
assert model_info.metadata["metadata_key"] == "metadata_value"

备注

实验性:此属性可能会在未来的版本中无警告地更改或移除。

property mlflow_version

用于记录模型的 MLflow 版本

Getter:

获取在记录模型时安装的 MLflow 版本

类型:

str

property model_uri

记录模型的 model_uri 格式为 'runs:/<run_id>/<artifact_path>'

Getter:

从 uri runs:/<run_id> 路径封装中获取已记录模型的 uri 路径

类型:

str

property model_uuid

记录模型的 model_uuid,例如 '39ca11813cfc46b09ab83972740b80ca'

Getter:

[Legacy] 获取记录模型的 model_uuid (run_id)

类型:

str

property registered_model_version: int | None

已注册的模型版本,如果模型已注册。

Getter:

获取已注册的模型版本,如果该模型已在模型注册表中注册。

Setter:

设置已注册的模型版本。

类型:

Optional[int]

property run_id

与记录模型关联的 run_id,例如 '8ede7df408dd42ed9fc39019ef7df309'

Getter:

获取记录模型的 run_id 标识符

类型:

str

property saved_input_example_info

包含保存的输入示例元数据的字典,例如 {"artifact_path": "input_example.json", "type": "dataframe", "pandas_orient": "split"}

Getter:

如果在模型记录期间指定,则获取输入示例

类型:

Optional[Dict[str, str]]

property signature

一个描述模型输入和输出的 ModelSignature

Getter:

如果定义了模型签名,则获取它

类型:

可选的[模型签名]

property signature_dict

一个描述模型输入和输出的字典,由 ModelSignature.to_dict() 生成。

Getter:

获取模型签名作为字典

类型:

Optional[Dict[str, Any]]

property utc_time_created

记录的模型创建的UTC时间,例如 '2022-01-12 05:17:31.634689'

Getter:

获取模型记录时的UTC格式时间戳

类型:

str