mlflow.models
mlflow.models 模块提供了一个 API,用于以不同下游工具可以理解的“风味”(flavors)保存机器学习模型。
内置的风味包括
有关详细信息,请参阅 MLflow 模型指南。
- class mlflow.models.EvaluationArtifact(uri, content=None)[源代码]
Bases:
object包含工件 URI 和内容的模型评估工件。
- class mlflow.models.EvaluationResult(metrics, artifacts, run_id=None)[源代码]
Bases:
object表示
mlflow.evaluate()API 调用的模型评估输出,包含标量指标和性能图等输出工件。- property artifacts: dict[str, 'mlflow.models.EvaluationArtifact']
一个字典,将标准化工件名称(例如“roc_data”)映射到工件内容和位置信息
- classmethod load(path)[源代码]
从指定的本地文件系统路径加载评估结果
- save(path)[源代码]
将评估结果写入指定的本地文件系统路径
- class mlflow.models.FlavorBackend(config, **kwargs)[源代码]
Bases:
objectFlavor Backend 的抽象类。此类定义了 MLflow 模型风味的本地模型部署的 API 接口。
- abstract build_image(model_uri, image_name, install_java=False, install_mlflow=False, mlflow_home=None, enable_mlserver=False, base_image=None)[源代码]
- can_build_image()[源代码]
- 返回
如果此风味具有为构建能够服务模型的 Docker 容器而定义的
build_image方法,则返回 True,否则返回 False。
- abstract can_score_model()[源代码]
检查此风味后端是否可以在当前环境中部署。
- 返回
如果此风味后端可以在当前环境中应用,则返回 True。
- abstract generate_dockerfile(model_uri, output_dir, install_java=False, install_mlflow=False, mlflow_home=None, enable_mlserver=False, base_image=None)[源代码]
- abstract predict(model_uri, input_path, output_path, content_type)[源代码]
使用给定 URI 引用的已保存 MLflow 模型生成预测。输入和输出从文件或 stdin/stdout 读取和写入。
- 参数
model_uri – 指向要用于评分的 MLflow 模型的 URI。
input_path – 包含输入数据的文件路径。如果未指定,则从 stdin 读取数据。
output_path – 包含输出预测的文件路径。如果未指定,则写入 stdout。
content_type – 指定输入格式。可以是 {
json,csv} 中的一个
- prepare_env(model_uri, capture_output=False)[源代码]
执行预测或服务模型所需的任何准备工作,例如下载依赖项或初始化 conda 环境。准备就绪后,调用 predict 或 serve 应该很快。
- 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 – 重定向服务器 stdout
stderr – 重定向服务器 stderr
- class mlflow.models.MetricThreshold(threshold=None, min_absolute_change=None, min_relative_change=None, greater_is_better=None)[源代码]
Bases:
object此类允许您为模型验证定义指标阈值。允许的阈值包括:threshold、min_absolute_change、min_relative_change。
- 参数
threshold –
(可选) 代表指标值阈值的数字。
如果指标是“越大越好”,则指标值必须 >= threshold 才能通过验证。
否则,指标值必须 <= 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 – 一个必需的布尔值,表示指标值越大越好。
- class mlflow.models.Model(artifact_path=None, run_id=None, utc_time_created=None, flavors=None, signature=None, saved_input_example_info: Optional[dict[str, typing.Any]] = None, model_uuid: Optional[Union[str, Callable[[], str]]] = <function Model.<lambda>>, mlflow_version: str | None = '3.9.0', metadata: Optional[dict[str, typing.Any]] = None, model_size_bytes: Optional[int] = None, resources: Optional[Union[str, list[mlflow.models.resources.Resource]]] = None, env_vars: Optional[list[str]] = None, auth_policy: Optional[mlflow.models.auth_policy.AuthPolicy] = None, model_id: Optional[str] = None, prompts: Optional[list[str]] = None, **kwargs)[源代码]
Bases:
object一个可以支持多种模型风味的 MLflow 模型。提供用于实现新模型风味的 API。
- add_flavor(name, **params) mlflow.models.model.Model[源代码]
添加一个条目,说明如何以给定格式服务模型。
- property auth_policy: dict[str, dict[str, typing.Any]]
一个可选字典,包含服务模型所需的身份验证策略。
- Getter
检索服务模型所需的 auth_policy
- Setter
设置服务模型所需的 auth_policy
- 类型
Dict[str, dict]
- classmethod from_dict(model_dict) mlflow.models.model.Model[源代码]
从其 YAML 表示加载模型。
- get_input_schema()[源代码]
检索模型的输入 Schema(仅当模型保存时带有 Schema 定义时)。
- get_model_info(logged_model: Optional[LoggedModel] = None) mlflow.models.model.ModelInfo[源代码]
创建一个
实例,其中包含模型元数据。ModelInfo
- get_output_schema()[源代码]
检索模型的输出 Schema(仅当模型保存时带有 Schema 定义时)。
- get_params_schema()[源代码]
检索模型的参数 Schema(仅当模型保存时带有 Schema 定义时)。
- get_serving_input(path: str) str | None[源代码]
从模型目录加载服务输入示例。如果没有任何服务输入示例,则返回 None。
- 参数
path – 模型目录的路径。
- 返回
服务输入示例,如果模型没有服务输入示例,则为 None。
- get_tags_dict() dict[str, typing.Any][源代码]
- classmethod load(path) mlflow.models.model.Model[源代码]
从其 YAML 表示加载模型。
- 参数
path – 本地文件系统路径或 URI,指向 Model 对象的 MLmodel YAML 文件表示或包含 MLmodel YAML 文件表示的目录。
- 返回
Model 的一个实例。
- load_input_example(path: Optional[str] = None) str | None[源代码]
加载与模型一起保存的输入示例。如果没有任何示例元数据(即模型保存时没有示例),则返回 None。如果存在模型元数据但缺少示例文件,则引发 FileNotFoundError。
- 参数
path – 模型或运行 URI,或指向
model目录的路径。例如 models://<model_name>/<model_version>、runs:/<run_id>/<artifact_path> 或 /path/to/model- 返回
输入示例(NumPy ndarray、SciPy csc_matrix、SciPy csr_matrix、pandas DataFrame、dict)或 None(如果模型没有示例)。
- load_input_example_params(path: str)[源代码]
加载与模型一起保存的输入示例的参数。如果输入示例中没有参数,则返回 None。
- 参数
path – 模型目录的路径。
- 返回
参数 (dict) 或 None(如果模型没有参数)。
- classmethod log(artifact_path, flavor, registered_model_name=None, await_registration_for=300, metadata=None, run_id=None, resources=None, auth_policy=None, prompts=None, name: Optional[str] = None, model_type: Optional[str] = None, params: Optional[dict[str, typing.Any]] = None, tags: Optional[dict[str, typing.Any]] = None, step: int = 0, model_id: Optional[str] = None, **kwargs) mlflow.models.model.ModelInfo[源代码]
如果未激活运行,此方法将创建一个新的激活运行。
- 参数
artifact_path – Deprecated. Use name instead.
flavor – 用于保存模型的模块。该模块必须具有
save_model函数,该函数将模型持久化为有效的 MLflow 模型。registered_model_name – 如果提供,则在
registered_model_name下创建一个模型版本,如果给定名称的注册模型不存在,也会创建该注册模型。await_registration_for – 等待模型版本完成创建并处于
READY状态的秒数。默认情况下,函数等待五分钟。指定 0 或 None 可跳过等待。metadata – {{ metadata }}
run_id – 与此模型关联的运行 ID。
resources – {{ resources }}
auth_policy – {{ auth_policy }}
prompts – {{ prompts }}
name – 模型的名称。
model_type – {{ model_type }}
params – {{ params }}
tags – {{ tags }}
step – {{ step }}
model_id – {{ model_id }}
kwargs – 传递给模型风格的额外参数。
- 返回
一个包含已记录模型元数据的
ModelInfo实例。
- property metadata: dict[str, typing.Any] | None
添加到模型实例的自定义元数据字典。
- 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, name="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[mlflow.models.resources.ResourceType, list[dict[str, typing.Any]]]]
包含模型所需资源的字典。
- Getter
检索模型所需的资源
- Setter
设置模型所需的资源
- 类型
Dict[str, Dict[ResourceType, List[Dict]]]
- save(path) None[源代码]
将模型写入本地 YAML 文件。
- property saved_input_example_info: dict[str, typing.Any] | None
包含已保存输入示例元数据的字典,例如
{"artifact_path": "input_example.json", "type": "dataframe", "pandas_orient": "split"}。
- property signature
对模型对象的预期输入和输出的可选定义,使用字段名称和数据类型定义。签名支持基于列的输入和基于张量的输入以及输出。
- Getter
检索模型实例的签名(如果模型已保存签名定义)。
- Setter
将签名设置为模型实例。
- 类型
Optional[ModelSignature]
- to_dict() dict[str, typing.Any][源代码]
将模型序列化为字典。
- to_json() str[源代码]
将模型写入 json。
- to_yaml(stream=None) str[源代码]
将模型写入 yaml 字符串。
- class mlflow.models.ModelConfig(*, development_config: Optional[Union[str, dict[str, typing.Any]] = None)[源代码]
Bases:
objectModelConfig 用于代码中以读取 YAML 配置文件或字典。
- 参数
development_config – YAML 配置文件或包含配置的字典的路径。如果未提供配置,则会引发错误
from mlflow.models import ModelConfig # Load the configuration from a dictionary config = ModelConfig(development_config={"key1": "value1"}) print(config.get("key1"))
from mlflow.models import ModelConfig # Load the configuration from a file config = ModelConfig(development_config="config.yaml") print(config.get("key1"))
当在模型文件中本地调用 ModelConfig 时,可以传入 development_config,它将用作模型的配置。
import mlflow from mlflow.models import ModelConfig config = ModelConfig(development_config={"key1": "value1"}) class TestModel(mlflow.pyfunc.PythonModel): def predict(self, context, model_input, params=None): return config.get("key1") mlflow.models.set_model(TestModel())
但是,当记录模型时,此 development_config 配置文件将被覆盖。当记录模型时未传入 model_config 时,尝试使用 ModelConfig 加载模型时将引发错误。注意:记录模型时不使用 development_config。
model_config = {"key1": "value2"} with mlflow.start_run(): model_info = mlflow.pyfunc.log_model( name="model", python_model="agent.py", model_config=model_config ) loaded_model = mlflow.pyfunc.load_model(model_info.model_uri) # This will print "value2" as the model_config passed in while logging the model print(loaded_model.predict(None))
- get(key)[源代码]
获取配置中顶级参数的值。
- to_dict()[源代码]
将配置返回为字典。
- class mlflow.models.ModelSignature(inputs: Optional[Union[mlflow.types.schema.Schema, Any]] = None, outputs: Optional[Union[mlflow.types.schema.Schema, Any]] = None, params: Optional[mlflow.types.schema.ParamSchema] = None)[源代码]
Bases:
objectModelSignature 指定模型输入的模式、输出和参数。
ModelSignature 可以从训练数据集中推断出来,使用模型预测和推理的参数,或者通过手动传入输入和输出
Schema,以及参数ParamSchema来构建。- classmethod from_dict(signature_dict: dict[str, typing.Any])[源代码]
从字典表示中反序列化。
- 参数
signature_dict – 模型签名的字典表示。预期的字典格式:{‘inputs’: <json string>, ‘outputs’: <json string>, ‘params’: <json string>” }
- 返回
使用字典中的数据填充 ModelSignature。
- to_dict() dict[str, typing.Any][源代码]
序列化为“可 JSON 化”的字典。
输入和输出模式表示为 json 字符串。这样,当嵌入到 MLmodel yaml 文件中时,表示是紧凑的。
- 返回
带有表示为 json 字符串的输入和输出模式的字典表示。
- class mlflow.models.Resource[源代码]
Bases:
abc.ABC定义模型所需的资源的基类。
- 参数
type (ResourceType) – 资源类型。
target_uri (str) – 托管这些资源的 URI。
- abstract classmethod from_dict(data: dict[str, str])[源代码]
将字典转换为 Resource。子类必须实现此方法。
- abstract to_dict()[源代码]
将资源转换为字典。子类必须实现此方法。
- abstract property type: mlflow.models.resources.ResourceType
资源类型(必须由子类定义)。
- class mlflow.models.ResourceType(value)[源代码]
Bases:
enum.Enum枚举,用于定义服务模型所需的资源类型。
- mlflow.models.add_libraries_to_model(model_uri, run_id=None, registered_model_name=None)[源代码]
给定一个注册的模型 URI(例如 models:/<model_name>/<model_version>),此实用程序将模型及其所有必需的模型库重新记录回模型注册表。必需的模型库与模型一起作为模型工件存储。此外,模型的支持文件(例如 conda.yaml、requirements.txt)将修改为使用添加的库。
默认情况下,此实用程序将在
model_uri指定的同一注册模型下创建一个新的模型版本。可以通过指定registered_model_name参数来覆盖此行为。- 参数
model_uri – 模型注册表中的注册模型 URI,格式为 models:/<model_name>/<model_version/stage/latest>
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, name="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 镜像,其默认入口点使用 python_function 风格在端口 8080 上提供 MLflow 模型。容器服务由
model_uri引用的模型(如果指定)。如果未指定model_uri,则必须将 MLflow 模型目录作为卷挂载到容器中的 /opt/ml/model 目录。重要提示
自 MLflow 2.10.1 起,使用
--model-uri构建的 Docker 镜像 不安装 Java 以提高性能,除非模型风格是["johnsnowlabs", "h2o" "spark"]之一。如果您需要为其他风格(例如使用 SparkML 的自定义 Python 模型)安装 Java,请指定install-java=True以强制安装 Java。在早期版本中,Java 始终安装到镜像中。警告
如果未指定
model_uri,则生成的映像不支持使用 RFunc 服务器提供模型。注意:默认情况下,容器将启动 nginx 和 uvicorn 进程。如果您不需要启动 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.cn/docs/latest/tracking.html#artifact-stores
name – 要构建的 Docker 镜像的名称。默认为 'mlflow-pyfunc'。
env_manager – 如果指定,则使用指定的环境管理器为 MLmodel 创建环境。支持以下值:(1)virtualenv(默认):使用 virtualenv 和 pyenv 进行 Python 版本管理(2)conda:使用 conda(3)local:使用本地环境而不创建新环境。
mlflow_home – MLflow 项目的本地克隆路径。仅用于开发。
install_java – 如果指定,则在镜像中安装 Java。默认为 False,以减少镜像大小和构建时间。需要 Java 的模型风格会自动启用此设置,例如 Spark 风格。(此参数仅在 MLflow 2.10.1 及更高版本中可用。在早期版本中,Java 始终安装到镜像中。)
install_mlflow – 如果指定并且存在要激活的 conda 或 virtualenv 环境,则在激活后将 mlflow 安装到环境中。安装的 mlflow 版本将与调用此命令时使用的版本相同。
enable_mlserver – 如果指定,则镜像将使用 Seldon MLserver 作为后端构建。
base_image – Docker 镜像的基础镜像。如果未指定,默认镜像为 UBUNTU_BASE_IMAGE = "ubuntu:22.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, extra_metrics=None, custom_artifacts=None, env_manager='local', model_config=None, inference_params=None, model_id=None, _called_from_genai_evaluate=False)[源代码]
在给定数据和选定指标上评估模型性能。
此函数使用指定的
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): true_negatives, false_positives, false_negatives, true_positives, recall, precision, f1_score, accuracy_score, example_count, log_loss, roc_auc, precision_recall_auc。
产物 (artifacts): lift curve plot, precision-recall plot, ROC plot。
- 对于多类别分类器,默认评估器还会记录
指标 (metrics): accuracy_score, example_count, f1_score_micro, f1_score_macro, log_loss
产物 (artifacts): 一个 CSV 文件用于 “per_class_metrics”(每类指标包括 true_negatives/false_positives/false_negatives/true_positives/recall/precision/roc_auc, precision_recall_auc),合并的精确率-召回率曲线图,合并的 ROC 曲线图。
- 对于问答模型,默认评估器记录
指标 (metrics):
exact_match,token_count, toxicity (需要安装 evaluate, torch, flesch_kincaid_grade_level (需要安装 textstat) 和 ari_grade_level。产物 (artifacts): 一个 JSON 文件,其中包含模型的输入、输出、目标(如果提供了
targets参数)以及每行的指标,以表格形式呈现。
- 对于文本摘要模型,默认评估器记录
指标 (metrics):
token_count, ROUGE (需要安装 evaluate, nltk 和 rouge_score), toxicity (需要 evaluate, torch, transformers), ari_grade_level (需要 textstat), flesch_kincaid_grade_level (需要 textstat)。产物 (artifacts): 一个 JSON 文件,其中包含模型的输入、输出、目标(如果提供了
targets参数)以及每行的指标,以表格形式呈现。
- 对于文本模型,默认评估器记录
指标 (metrics):
token_count, toxicity (需要 evaluate, torch, transformers), ari_grade_level (需要 textstat), flesch_kincaid_grade_level (需要 textstat)。产物 (artifacts): 一个 JSON 文件,其中包含模型的输入、输出、目标(如果提供了
targets参数)以及每行的指标,以表格形式呈现。
- 对于检索模型,默认评估器记录
指标 (metrics):
precision_at_k(k),recall_at_k(k)和ndcg_at_k(k)- 它们都有一个默认值retriever_k= 3。产物 (artifacts): 一个 JSON 文件,其中包含模型的输入、输出、目标和每行的指标,以表格形式呈现。
对于 sklearn 模型,默认评估器还会记录通过 model.score 方法计算出的模型评估标准(例如分类器的平均准确率)。
上述指标/产物被记录到活动的 MLflow 运行中。如果不存在活动的运行,将创建一个新的 MLflow 运行来记录这些指标和产物。
此外,有关指定数据集的信息——哈希值、名称(如果指定)、路径(如果指定)以及评估它的模型的 UUID——将被记录到
mlflow.datasets标签中。- 默认评估器可用的
evaluator_config选项包括 log_model_explainability: 一个布尔值,指定是否记录模型可解释性洞察,默认值为 True。
- log_explainer: 如果为 True,将用于计算模型可解释性的解释器记录为模型。
默认值为 False。
explainability_algorithm: 一个字符串,用于指定模型可解释性的 SHAP 解释器算法。支持的算法包括:'exact', 'permutation', 'partition', 'kernel'。如果未设置,则使用具有“auto”算法的
shap.Explainer,该算法根据模型选择最佳解释器。explainability_nsamples: 用于计算模型可解释性洞察的样本行数。默认值为 2000。
explainability_kernel_link: shap kernel 解释器使用的核链接函数。可用值有 "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)的前 k 个检索到的文档数。默认值为 3。对于所有其他模型类型,此参数将被忽略。
- 默认评估器可用的
- 评估数据集的局限性
对于分类任务,数据集标签用于推断类总数。
对于二元分类任务,负标签值必须是 0 或 -1 或 False,正标签值必须是 1 或 True。
- 指标/产物计算的局限性
对于分类任务,一些指标和产物计算要求模型输出类别概率。目前,对于 scikit-learn 模型,默认评估器调用底层模型的
predict_proba方法以获取概率。对于其他模型类型,默认评估器不计算需要概率输出的指标/产物。
- 默认评估器记录模型可解释性洞察的局限性
shap.Explainer的auto算法对线性模型使用Linear解释器,对树模型使用Tree解释器。由于 SHAP 的Linear和Tree解释器不支持多类别分类,默认评估器会退而求其次,对多类别分类任务使用Exact或Permutation解释器。目前不支持为 PySpark 模型记录模型可解释性洞察。
评估数据集的标签值必须是数字或布尔值,所有特征值必须是数字,并且每个特征列只能包含标量值。
- 启用环境恢复时的限制
当为被评估模型启用环境恢复时(即指定了非本地
env_manager),模型将作为客户端加载,该客户端在具有安装了模型训练时间依赖项的独立 Python 环境中调用 MLflow 模型评分服务器进程。因此,模型的predict_proba方法(用于概率输出)或score方法(计算 sklearn 模型的评估标准)将变得不可访问,默认评估器不会计算需要这些方法的指标或产物。由于模型是 MLflow 模型服务器进程,SHAP 解释的计算速度较慢。因此,当指定非本地
env_manager时,模型可解释性默认禁用,除非evaluator_config选项 log_model_explainability 被明确设置为True。
- 参数
model –
可选。如果指定,它应该是以下之一
一个 pyfunc 模型实例
引用 pyfunc 模型的 URI
引用 MLflow 部署端点的 URI,例如
"endpoints:/my-chat"一个可调用函数:此函数应能接收模型输入并返回预测结果。它应遵循
predict方法的签名。这是一个有效函数的示例model = mlflow.pyfunc.load_model(model_uri) def fn(model_input): return model.predict(model_input)
如果省略,则表示将使用静态数据集而不是模型进行评估。在这种情况下,
data参数必须是包含模型输出的 Pandas DataFrame 或 mlflow PandasDataset,并且predictions参数必须是data中包含模型输出的列的名称。data –
以下之一
一个 numpy 数组或评估特征列表,不包括标签。
- 一个包含评估特征、标签以及可选模型输出的 Pandas DataFrame。
模型输出在未指定模型时是必需的。如果未指定
feature_names参数,则除标签列和预测列外的所有列都被视为特征列。否则,只有存在于feature_names中的列名才被视为特征列。
- 一个包含评估特征和标签的 Spark DataFrame。如果
未指定
feature_names参数,则除标签列外的所有列都被视为特征列。否则,只有存在于feature_names中的列名才被视为特征列。Spark DataFrame 中只有前 10000 行将被用作评估数据。
- 一个
mlflow.data.dataset.Dataset实例,包含评估 特征、标签以及可选的模型输出。模型输出仅支持与 PandasDataset 一起使用。在未指定模型时需要模型输出,并且应通过 PandasDataset 的
predictions属性指定。
- 一个
model_type –
(可选)描述模型类型的字符串。默认评估器支持以下模型类型
'classifier''regressor''question-answering''text-summarization''text''retriever'
如果没有指定
model_type,则必须通过extra_metrics参数提供要计算的指标列表。注意
'question-answering','text-summarization','text'和'retriever'处于实验阶段,未来版本中可能会更改或删除。targets – 如果
data是 numpy 数组或列表,则为评估标签的 numpy 数组或列表。如果data是 DataFrame,则是data中包含评估标签的列的字符串名称。对于分类器和回归模型是必需的,但对于问答、文本摘要和文本模型是可选的。如果data是定义了目标的mlflow.data.dataset.Dataset,则targets是可选的。predictions –
可选。包含模型输出的列的名称。
当
model被指定且输出多列时,predictions可用于指定将用于存储模型输出进行评估的列的名称。当未指定
model且data是 pandas dataframe 时,predictions可用于指定data中包含模型输出的列的名称。
# Evaluate a model that outputs multiple columns data = pd.DataFrame({"question": ["foo"]}) def model(inputs): return pd.DataFrame({"answer": ["bar"], "source": ["baz"]}) results = evaluate( model=model, data=data, predictions="answer", # other arguments if needed ) # Evaluate a static dataset data = pd.DataFrame({"question": ["foo"], "answer": ["bar"], "source": ["baz"]}) results = evaluate( data=data, predictions="answer", # other arguments if needed )
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 模块。import mlflow import numpy as np def root_mean_squared_error(eval_df, _builtin_metrics): return np.sqrt((np.abs(eval_df["prediction"] - eval_df["target"]) ** 2).mean()) rmse_metric = mlflow.models.make_metric( eval_fn=root_mean_squared_error, greater_is_better=False, ) mlflow.evaluate(..., extra_metrics=[rmse_metric])
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中通过环境变量定义自定义设置。其他对象将尝试使用默认协议进行 pickling。
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])
env_manager –
指定一个环境管理器,用于在隔离的 Python 环境中加载候选
model并恢复其依赖项。默认值为local,支持以下值virtualenv: (推荐) 使用 virtualenv 恢复用于训练模型的 python 环境。conda: 使用 Conda 恢复训练模型时使用的软件环境。local: 使用当前 Python 环境进行模型推理,这可能与训练模型时使用的环境不同,并可能导致错误或无效的预测。
model_config – 用于 pyfunc 加载模型的模型配置。检查模型的 pyfunc flavor 以了解您的特定模型支持哪些键。如果未指定,则使用模型的默认模型配置(如果存在)。
inference_params – (可选)在进行预测时传递给模型的推理参数字典,例如
{"max_tokens": 100}。这仅在model是 MLflow 部署端点 URI(例如"endpoints:/my-chat")时使用。model_id – (可选)MLflow LoggedModel 或模型版本的 ID,评估结果(例如指标和跟踪)将链接到此 ID。如果未指定 model_id 但指定了 model,则将使用来自 model 的 ID。
_called_from_genai_evaluate – (可选)仅供内部使用。
- 返回
一个
mlflow.models.EvaluationResult实例,其中包含使用给定数据集评估模型的指标。
- mlflow.models.get_model_info(model_uri: str) mlflow.models.model.ModelInfo[source]
获取指定模型的元数据,例如其输入/输出签名。
- 参数
model_uri –
MLflow 模型在 URI 格式中的位置。例如:
/Users/me/path/to/local/modelrelative/path/to/local/models3://my_bucket/path/to/modelruns:/<mlflow_run_id>/run-relative/path/to/modelmodels:/<model_name>/<model_version>models:/<model_name>/<stage>mlflow-artifacts:/path/to/model
For more information about supported URI schemes, see Referencing Artifacts.
- 返回
一个包含已记录模型元数据的
ModelInfo实例。
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 = [[0, 1]] y = [1] signature = mlflow.models.infer_signature(X, y) rfr = RandomForestRegressor(**params).fit(X, y) mlflow.log_params(params) mlflow.sklearn.log_model(rfr, name="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)[source]
通过创建子进程并在其中加载模型来推断指定模型的 pip 依赖项,以确定导入了哪些包。
- 参数
model_uri – 模型的 URI。
flavor – 模型的 flavor 名称。
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, typing.Any] | None = None) mlflow.models.signature.ModelSignature[source]
根据训练数据(输入)、模型预测(输出)和参数(用于推理)推断 MLflow 模型签名。
签名将模型输入和输出表示为数据框,其中(可选地)指定了命名的列和数据类型,数据类型是
mlflow.types.DataType中定义的一种类型。它还包括用于推理的参数 schema。如果用户数据包含不兼容的类型或未以下面列出的支持格式之一传递,此方法将引发异常。- 输入应是以下之一
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 方法来设置模型上的参数。
有效参数的一个示例
from mlflow.models import infer_signature from mlflow.transformers import generate_signature_output # Define parameters for inference params = { "num_beams": 5, "max_length": 30, "do_sample": True, "remove_invalid_values": True, } # Infer the signature including parameters signature = infer_signature( data, generate_signature_output(model, data), params=params, ) # Saving model with model signature mlflow.transformers.save_model( model, path=model_path, signature=signature, ) pyfunc_loaded = mlflow.pyfunc.load_model(model_path) # Passing params to `predict` function directly result = pyfunc_loaded.predict(data, params=params)
- 返回
ModelSignature
- mlflow.models.list_evaluators()[source]
返回所有可用评估器的名称列表。
- 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)[source]
一个工厂函数,用于创建
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 – (可选)指标的完整名称。例如,
"mse"的"mean_squared_error"。version – (可选)指标版本。例如
v1。metric_details – (可选)指标及其计算方法的描述。
metric_metadata – (可选)包含指标元数据的字典。
genai_metric_args – (可选)一个字典,包含用户在调用 make_genai_metric 或 make_genai_metric_from_prompt 时指定的参数。这些参数被持久化,以便我们稍后可以反序列化相同的指标对象。
另请参阅
mlflow.models.EvaluationMetric
- 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, extra_envs=None)[source]
使用已保存的 MLflow 模型以 json 格式生成预测。有关此函数接受的输入数据格式的信息,请参阅以下文档:https://www.mlflow.org/docs/latest/models.html#built-in-deployment-tools。
注意
为了在调试目的下增加详细程度(以便检查处理瞬态依赖项时的完整依赖项解析器操作),请考虑设置以下环境变量
# For virtualenv export PIP_VERBOSE=1 # For uv export RUST_LOG=uv=debug
另请参阅
- 参数
model_uri – 模型的 URI。本地路径、本地或远程 URI,例如 runs:/, s3://。
input_data –
用于预测的输入数据。必须是 PyFunc 模型的有效输入。有关此函数支持的输入类型,请参阅
mlflow.pyfunc.PyFuncModel.predict()。注意
如果由于 input_data 中的错误导致此 API 失败,请使用 mlflow.models.convert_input_example_to_serving_input 手动验证您的输入数据。
input_path – 包含输入数据的文件路径。如果提供了此参数,则 ‘input_data’ 必须为 None。
content_type – 输入数据的 MIME 类型。可以是 {‘json’, ‘csv’} 中的一个。
output_path – 用于输出结果的 JSON 文件。如果未提供,则输出到 stdout。
env_manager –
指定一种为 MLmodel 推理创建环境的方法
”virtualenv” (默认):使用 virtualenv(以及 pyenv 用于 Python 版本管理)
”uv”:使用 uv
”local”:使用本地环境
”conda”:使用 conda
install_mlflow – 如果指定并且存在要激活的 conda 或 virtualenv 环境,则在激活后将 mlflow 安装到环境中。安装的 mlflow 版本将与调用此命令时使用的版本相同。
pip_requirements_override –
如果指定,则将指定的 Python 依赖项安装到模型推理环境中。当您想添加额外依赖项或尝试日志记录模型中定义的依赖项的不同版本时,这特别有用。
提示
在验证 pip 依赖项覆盖按预期工作后,您可以使用 mlflow.models.update_model_requirements API 更新已记录模型的依赖项,而无需重新记录它。请注意,注册的模型是不可变的,因此您需要使用更新后的模型为注册的模型注册一个新版本。
extra_envs –
如果指定,一个包含额外环境变量的字典将被传递给模型推理环境。这对于测试模型正常运行所需的哪些环境变量很有用。默认情况下,会传递当前 os.environ 中存在的环境变量,并且此参数可用于覆盖它们。
注意
如果您的模型依赖项包括预发布版本,例如 mlflow==3.2.0rc0 并且您将 uv 用作环境管理器,请在 extra_envs 中将 UV_PRERELEASE 环境变量设置为 “allow”,以允许安装预发布版本。例如 extra_envs={“UV_PRERELEASE”: “allow”}。
注意
此参数仅在 env_manager 设置为 “virtualenv”、“conda” 或 “uv” 时受支持。
代码示例
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 "uv" as the environment manager mlflow.models.predict( model_uri=f"runs:/{run_id}/model", input_data={"x": 1, "y": 2}, env_manager="uv", ) # Run prediction with additional pip dependencies and extra environment variables 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"], extra_envs={"OPENAI_API_KEY": "some_value"}, ) # Run prediction with output_path mlflow.models.predict( model_uri=f"runs:/{run_id}/model", input_data={"x": 1, "y": 2}, env_manager="uv", output_path="output.json", ) # Run prediction with pre-release versions mlflow.models.predict( model_uri=f"runs:/{run_id}/model", input_data={"x": 1, "y": 2}, env_manager="uv", extra_envs={"UV_PRERELEASE": "allow"}, )
- mlflow.models.set_model(model) None[源代码]
在将模型记录为代码时,此函数可用于设置要记录的模型对象。
- 参数
model –
要记录的模型对象。支持的模型类型有
一个 Python 函数或可调用对象。
一个 Langchain 模型或 Langchain 模型的路径。
一个 Llama Index 模型或 Llama Index 模型的路径。
- mlflow.models.set_retriever_schema(*, primary_key: str, text_column: str, doc_uri: Optional[str] = None, other_columns: Optional[list[str]] = None, name: str | None = 'retriever')[源代码]
在您的代理或生成式 AI 应用代码中指定检索器跨度的返回架构。
自 3.3.2 版本起弃用: 此函数已被弃用,将在未来版本中删除。
注意:MLflow 建议您的检索器返回 https://mlflow.org.cn/docs/latest/genai/data-model/traces/#retriever-spans 中描述的默认 MLflow 检索器输出架构,在这种情况下您无需调用 set_retriever_schema。读取 MLflow 跟踪并查找检索器跨度的 API(例如 MLflow 评估)将自动检测与 MLflow 默认检索器架构匹配的检索器跨度。
如果您的检索器未返回默认的 MLflow 检索器输出架构,请调用此 API 以指定每个检索到的文档中哪些字段对应于页面内容、文档 URI、文档 ID 等。这使得下游功能(如 MLflow 评估)能够正确识别这些字段。请注意,set_retriever_schema 假设您的检索器跨度返回一个对象列表。
- 参数
primary_key – 检索器或向量索引的主键。
text_column – 用于嵌入的文本列的名称。
doc_uri – 包含文档 URI 的列的名称。
other_columns – 向量索引的其他列的列表,这些列需要在跟踪日志记录期间检索。
name – 检索器工具或向量存储索引的名称。
from mlflow.models import set_retriever_schema # The following call sets the schema for a custom retriever that retrieves content from # MLflow documentation, with an output schema like: # [ # { # 'document_id': '9a8292da3a9d4005a988bf0bfdd0024c', # 'chunk_text': 'MLflow is an open-source platform, purpose-built to assist...', # 'doc_uri': 'https://mlflow.org.cn/docs/latest/index.html', # 'title': 'MLflow: A Tool for Managing the Machine Learning Lifecycle' # }, # { # 'document_id': '7537fe93c97f4fdb9867412e9c1f9e5b', # 'chunk_text': 'A great way to get started with MLflow is...', # 'doc_uri': 'https://mlflow.org.cn/docs/latest/getting-started/', # 'title': 'Getting Started with MLflow' # }, # ... # ] set_retriever_schema( primary_key="chunk_id", text_column="chunk_text", doc_uri="doc_uri", other_columns=["title"], name="my_custom_retriever", )
- mlflow.models.set_signature(model_uri: str, signature: mlflow.models.signature.ModelSignature)[源代码]
为指定的模型工件设置模型签名。
该过程涉及下载模型工件中的 MLmodel 文件(如果它不是本地的)、更新其模型签名,然后覆盖现有 MLmodel 文件。如果模型工件关联的工件存储库不允许覆盖,此函数将失败。
此外,由于模型注册表工件是只读的,因此使用
models:/URI 方案表示的模型注册表工件与此 API 不兼容。要在模型版本上设置签名,请首先加载源模型工件。然后,使用加载的模型工件和相应的签名生成一个新的模型版本。有关在模型版本上设置签名的更多信息,请参阅此文档部分。- 参数
model_uri –
MLflow 模型在 URI 格式中的位置。例如:
/Users/me/path/to/local/modelrelative/path/to/local/models3://my_bucket/path/to/modelruns:/<mlflow_run_id>/run-relative/path/to/modelmlflow-artifacts:/path/to/modelmodels:/<model_id>
For more information about supported URI schemes, see Referencing Artifacts.
请注意,使用
models:/<name>/<version>方案的模型 URI 不受支持。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/modelrelative/path/to/local/models3://my_bucket/path/to/modelruns:/<mlflow_run_id>/run-relative/path/to/modelmlflow-artifacts:/path/to/model
For more information about supported URI schemes, see Referencing Artifacts.
operation – 要执行的操作。必须是 “add” 或 “remove” 之一。
requirement_list – 要添加到模型中或从模型中删除的依赖项列表。例如:[“numpy==1.20.3”, “pandas>=1.3.3”]
- mlflow.models.validate_schema(data: Union[pandas.core.frame.DataFrame, pandas.core.series.Series, numpy.ndarray, scipy.sparse._csc.csc_matrix, scipy.sparse._csr.csr_matrix, List[Any], Dict[str, Any], datetime.datetime, bool, bytes, float, int, str, pyspark.sql.dataframe.DataFrame], expected_schema: mlflow.types.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 – 当输入数据与架构不匹配时。
- mlflow.models.validate_serving_input(model_uri: str, serving_input: str | dict[str, typing.Any])[源代码]
在提供模型进行服务之前,用于验证模型是否可以被服务以及提供的输入是否有效的帮助函数。
- 参数
model_uri – 要服务的模型的 URI。
serving_input – 要验证的输入数据。应为字典或 JSON 字符串。
- 返回
模型的预测结果。
- 类 mlflow.models.model.ModelInfo(artifact_path: str, flavors: dict[str, typing.Any], model_uri: str, model_uuid: str, run_id: str, saved_input_example_info: dict[str, typing.Any] | None, signature, utc_time_created: str, mlflow_version: str, metadata: Optional[dict[str, typing.Any]] = None, registered_model_version: Optional[int] = None, env_vars: Optional[list[str]] = None, prompts: Optional[list[str]] = None, logged_model: Optional[LoggedModel] = None)[源代码]
已记录的 MLflow 模型的元数据。
- 属性 flavors: dict[str, typing.Any]
一个字典,将已记录模型的 flavor 名称映射到如何以该 flavor 提供模型服务。
- Getter
获取定义了模型服务参数的已记录模型的 flavor 映射
- 类型
Dict[str, str]
- 属性 metadata: dict[str, typing.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, name="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"
- 属性 metrics: list[Metric] | None
返回已记录模型的指标。
- Getter
检索已记录模型的指标
- 属性 model_uri: str
已记录模型的
model_uri,格式为'runs:/<run_id>/<artifact_path>'。- Getter
从 URI runs:/<run_id> 路径封装获取已记录模型的 URI 路径
- 类型
str
- 属性 model_uuid: str
已记录模型的
model_uuid,例如'39ca11813cfc46b09ab83972740b80ca'。- Getter
[旧版] 获取已记录模型的 model_uuid (run_id)
- 类型
str
- 属性 registered_model_version: int | None
如果模型已注册,则是注册的模型版本。
- Getter
获取注册的模型版本(如果模型已在模型注册表中注册)。
- Setter
设置注册的模型版本。
- 类型
Optional[int]
- 属性 run_id: str
与已记录模型关联的
run_id,例如'8ede7df408dd42ed9fc39019ef7df309'- Getter
获取已记录模型的 run_id 标识符
- 类型
str
- 属性 saved_input_example_info: dict[str, typing.Any] | None
包含已保存输入示例元数据的字典,例如
{"artifact_path": "input_example.json", "type": "dataframe", "pandas_orient": "split"}。- Getter
获取模型记录期间指定的输入示例
- 类型
Optional[Dict[str, str]]
- 属性 signature
描述模型输入和输出的
ModelSignature。- Getter
获取模型签名(如果已定义)
- 类型
Optional[ModelSignature]