REST API
MLflow 的 REST API 允许您创建、列出和获取实验和运行,并记录参数、指标和工件。
该 API 托管在 MLflow 跟踪服务器的 /api 路由下。例如,要在托管于 http://localhost:5000 的跟踪服务器上搜索实验,请对
http://localhost:5000/api/2.0/mlflow/experiments/search 发起 POST 请求。
目录
Create Experiment
端点 |
HTTP 方法 |
|---|---|
|
|
使用给定名称创建一个实验。返回新创建实验的 ID。会验证是否已存在同名的实验;如果已经存在同名实验,则操作会失败。
如果具有给定名称的实验已存在,则抛出 RESOURCE_ALREADY_EXISTS。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
实验名称。 此字段为必填项。 |
artifact_location |
|
存储该实验所有工件的位置。 如果未提供,远程服务器将选择一个合适的默认值。 |
tags |
一个 ExperimentTag 数组 |
要在实验上设置的一组标签。单次请求的最大标签大小和标签数量取决于存储后端。所有存储后端均保证支持标签键最大为250字节、标签值最大为5000字节。所有存储后端也保证每个请求最多支持20个标签。 |
Search Experiments
端点 |
HTTP 方法 |
|---|---|
|
|
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
max_results |
|
所需的最大实验数量。服务器可选择一个希望的默认 max_results 值。所有服务器都保证支持至少 1,000 的 max_results 阈值,但可能支持更高。建议对该端点的调用者显式传递 max_results 并利用 page_token 来迭代实验。 |
page_token |
|
指示要获取哪一页实验的令牌 |
筛选 |
|
用于对实验属性和标签进行过滤的表达式,可用于返回实验的子集。该语法是 SQL 的一个子集,支持将属性或标签与常量之间的二元操作通过 AND 连接起来。 示例: 你可以使用双引号或反引号来选择包含特殊字符(连字符、空格、句点等)的列。 示例: 支持的操作符是 |
order_by |
一个由 |
用于对搜索结果进行排序的列的列表,可以包含实验名称和 id,并可带有可选的 “DESC” 或 “ASC” 注释,其中 “ASC” 为默认值。平局情况由实验 id DESC 决定。 |
view_type |
用于限定要返回的实验类型。 如果未指定,则仅返回活动的实验。 |
响应结构
字段名称 |
类型 |
描述 |
|---|---|---|
experiments |
一个 Experiment 数组 |
与搜索条件匹配的实验 |
next_page_token |
|
可用于检索下一页实验的令牌。空令牌表示没有更多可检索的实验。 |
Get Experiment By Name
端点 |
HTTP 方法 |
|---|---|
|
|
获取实验的元数据。
此端点将返回已删除的实验,但如果活动的和已删除的实验同名,会优先返回活动的实验。如果多个已删除的实验同名,API 会返回其中一个。
如果不存在具有指定名称的实验,则抛出 RESOURCE_DOES_NOT_EXIST。
Delete Experiment
端点 |
HTTP 方法 |
|---|---|
|
|
标记一个实验及其关联的元数据、运行、指标、参数和标签以便删除。如果该实验使用 FileStore,则与实验关联的工件也会被删除。
Restore Experiment
端点 |
HTTP 方法 |
|---|---|
|
|
恢复一个被标记为删除的实验。这也会恢复相关的元数据、runs、metrics、params 和 tags。如果实验使用 FileStore,与实验关联的底层 artifacts 也会被恢复。
如果实验从未创建或已被永久删除,则抛出 RESOURCE_DOES_NOT_EXIST。
Create Run
端点 |
HTTP 方法 |
|---|---|
|
|
在实验中创建一个新的运行。一次运行通常是机器学习或数据 ETL 管道的单次执行。MLflow 使用运行来跟踪 Param、Metric 和 RunTag 与单次执行相关的内容。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
experiment_id |
|
ID of the associated experiment. |
user_id |
|
执行该运行的用户 ID。此字段自 MLflow 1.0 起已弃用,并将在未来的 MLflow 版本中移除。请改用 ‘mlflow.user’ 标签。 |
run_name |
|
运行的名称。 |
start_time |
|
运行开始时的 Unix 毫秒时间戳。 |
tags |
一个由 RunTag 组成的数组 |
运行的附加元数据。 |
Get Run
端点 |
HTTP 方法 |
|---|---|
|
|
获取某次运行的元数据、指标、参数和标签。在为某次运行记录了多个具有相同键的指标时,只返回具有最新时间戳的值。如果存在多个具有最新时间戳的值,则返回这些值中的最大值。
Log Metric
端点 |
HTTP 方法 |
|---|---|
|
|
为一次运行记录一个指标。指标是一个键值对(string key, float value),并带有相关的时间戳。示例包括表示 ML 模型准确率的各种指标。指标可以被多次记录。
Log Batch
端点 |
HTTP 方法 |
|---|---|
|
|
为一次运行记录一批指标、参数和标签。 如果任何数据未能持久化,服务器将返回错误(非200 状态码)。 在发生错误的情况下(由于内部服务器错误或无效请求),可能会写入部分数据。
你可以以交错的方式写入 metrics、params 和 tags,但在给定的实体类型内,保证遵循请求正文中指定的顺序。也就是说,对于像以下这样的 API 请求
{
"run_id": "2a14ed5c6a87499199e0106c3501eab8",
"metrics": [
{"key": "mae", "value": 2.5, "timestamp": 1552550804},
{"key": "rmse", "value": 2.7, "timestamp": 1552550804},
],
"params": [
{"key": "model_class", "value": "LogisticRegression"},
]
}
服务器保证会在写入指标“mae”之后写入指标“rmse”,但它可能会在两个指标之前、在“mae”之后,或在两个指标之后写入参数“model_class”。
metrics、params 和 tags 的覆盖行为如下:
指标:指标值永远不会被覆盖。记录一个指标 (key, value, timestamp) 会将其追加到具有提供的 key 的该指标的值集合中。
Tags:对同一 tag key 的连续写入会覆盖 tag values。也就是说,如果在同一 API request 中为相同的 key 提供了多个 tag values,则会写入最后提供的 tag value。允许记录相同的 tag(key, value)——也就是说,记录 tag 是幂等的。
参数:一旦写入,参数值无法更改(尝试覆盖参数值将导致错误)。但是,允许记录相同的参数(key, value)——也就是说,记录参数是幂等的。
请求限制
单个 JSON 序列化的 API 请求大小可达 1 MB,并且可以包含:
总共不超过1000个指标、参数和标签
最多 1000 个指标
最多100个参数
最多 100 个标签
例如,一个有效的请求可能包含 900 个指标、50 个参数和 50 个标签,但记录 900 个指标、50 个参数和 51 个标签则无效。以下限制也适用于指标、参数和标签的键和值:
度量、参数和标签键的长度最多可达250个字符
参数和标签值最多可包含 250 个字符
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
run_id |
|
要在其下记录的运行的 ID |
metrics |
一个由 Metric 组成的数组 |
要记录的指标。单次请求最多可以包含 1000 个 metrics,且 metrics、params 和 tags 的总数最多为 1000。 |
params |
一个由 Param 组成的数组 |
要记录的 params。单个请求最多可包含 100 个 params,总计最多包含 1000 个 metrics、params 和 tags。 |
tags |
一个由 RunTag 组成的数组 |
要记录的 tags。单个请求最多可以包含 100 个 tags,并且 metrics、params 和 tags 的总数最多为 1000。 |
Log Inputs
端点 |
HTTP 方法 |
|---|---|
|
|
Set Experiment Tag
端点 |
HTTP 方法 |
|---|---|
|
|
给实验设置一个标签。实验标签是可更新的元数据。
Log Param
端点 |
HTTP 方法 |
|---|---|
|
|
记录用于一次运行的参数。参数是一个键值对(字符串键,字符串值)。示例包括用于机器学习模型训练的超参数,以及在 ETL 管道中使用的固定日期和固定值。参数在一次运行中只能记录一次。
Get Metric History
端点 |
HTTP 方法 |
|---|---|
|
|
获取给定运行中指定指标的所有值的列表。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
run_id |
|
用于获取指标值的运行 ID。必须提供。 |
run_uuid |
|
[已弃用,请改用 run_id] 要从中获取指标值的运行 ID。此字段将在未来的 MLflow 版本中移除。 |
metric_key |
|
指标名称。此字段为必填。 |
page_token |
|
指示要获取的指标历史页面的令牌 |
max_results |
|
每次调用返回的某次运行中记录的指标实例的最大数量。后端服务器可能会根据性能要求限制max_results的值。不指定此值的请求将表现为非分页查询,即在一次响应中返回给定运行中某个指标的所有指标历史值。 |
响应结构
字段名 |
类型 |
描述 |
|---|---|---|
metrics |
一个 Metric 的数组 |
该指标的所有已记录值。 |
next_page_token |
|
可用于对下一页指标历史值发出查询的令牌。缺少令牌表示没有更多可供获取的指标。 |
Search Runs
端点 |
HTTP 方法 |
|---|---|
|
|
搜索满足表达式的运行记录。搜索表达式可以使用 Metric 和 Param 键。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
experiment_ids |
一个由 |
要搜索的实验 ID 列表。 |
筛选 |
|
基于 params、metrics 和 tags 的筛选表达式,允许返回 runs 的一个子集。该语法是 SQL 的一个子集,支持将 param、metric 或 tag 与常量之间的二元运算用 AND 连接起来。 示例: 你可以通过使用双引号选择包含特殊字符(连字符、空格、句点等)的列:
支持的运算符有 |
run_view_type |
是否只显示活动运行、只显示已删除运行,或显示所有运行。默认为只显示活动运行。 |
|
max_results |
|
所需的最大运行数。如果未指定,默认为1000。 所有服务器都保证支持至少50,000的max_results阈值,但可能支持更多。建议此端点的调用者显式传入max_results并利用page_token来遍历实验。 |
order_by |
一个由 |
要排序的列列表,包括属性、params、metrics 和 tags,可选地带有 “DESC” 或 “ASC” 注释,默认为 “ASC”。示例: [“params.input DESC”, “metrics.alpha ASC”, “metrics.rmse”]。平局按照 start_time DESC,然后对于具有相同 start_time 的运行再按 run_id 进行排序(如果未提供 order_by,则这是默认的排序标准)。 |
page_token |
|
List Artifacts
端点 |
HTTP 方法 |
|---|---|
|
|
列出某次运行的 artifacts。可选地使用 artifact_path 前缀;如果指定,响应仅包含具有该前缀的 artifacts。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
run_id |
|
要列出其工件的运行 ID。必须提供。 |
run_uuid |
|
[已弃用,请改用 run_id] 要列出其工件的运行 ID。该字段将在未来的 MLflow 版本中移除。 |
路径 |
|
过滤匹配此路径的 artifacts(相对于根 artifact 目录的相对路径)。 |
page_token |
|
用于指示要获取哪一页工件结果的令牌 |
响应结构
字段名 |
类型 |
描述 |
|---|---|---|
root_uri |
|
运行的根工件目录。 |
文件 |
一个 FileInfo 数组 |
工件的文件位置和元数据。 |
next_page_token |
|
可用于检索下一页工件结果的令牌 |
Update Run
端点 |
HTTP 方法 |
|---|---|
|
|
更新运行元数据。
Create RegisteredModel
端点 |
HTTP 方法 |
|---|---|
|
|
如果存在具有给定名称的已注册模型,则抛出 RESOURCE_ALREADY_EXISTS。
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
在此名称下注册模型 这是必填字段。 |
tags |
一个 RegisteredModelTag 的数组 |
注册模型的附加元数据。 |
描述 |
|
已注册模型的可选描述。 |
deployment_job_id |
|
此模型的部署作业 ID。 |
Get RegisteredModel
端点 |
HTTP 方法 |
|---|---|
|
|
Rename RegisteredModel
端点 |
HTTP 方法 |
|---|---|
|
|
Update RegisteredModel
端点 |
HTTP 方法 |
|---|---|
|
|
Delete RegisteredModel
端点 |
HTTP 方法 |
|---|---|
|
|
Get Latest ModelVersions
端点 |
HTTP 方法 |
|---|---|
|
|
响应结构
字段名 |
类型 |
描述 |
|---|---|---|
model_versions |
一个由 ModelVersion 组成的数组 |
每个请求阶段的最新版本模型。仅返回当前状态为 |
Create ModelVersion
端点 |
HTTP 方法 |
|---|---|
|
|
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
在此名称下注册模型 这是必填字段。 |
来源 |
|
URI 指示模型工件的位置。 此字段为必填。 |
run_id |
|
用于关联的 MLflow 运行 ID,如果 |
tags |
由 ModelVersionTag 组成的数组 |
模型版本的附加元数据。 |
run_link |
|
MLflow 运行链接 - 这是生成此模型版本的运行的精确链接,可能托管在另一个 MLflow 实例上。 |
描述 |
|
模型版本的可选描述。 |
model_id |
|
可选的 model_id,用于指定用于将已注册模型链接到源已记录模型的模型版本 |
Get ModelVersion
端点 |
HTTP 方法 |
|---|---|
|
|
Update ModelVersion
端点 |
HTTP 方法 |
|---|---|
|
|
Delete ModelVersion
端点 |
HTTP 方法 |
|---|---|
|
|
Search ModelVersions
端点 |
HTTP 方法 |
|---|---|
|
|
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
筛选 |
|
字符串过滤条件,例如 “name=’my-model-name’”。必须是单一的布尔条件,字符串值需用单引号括起来。 |
max_results |
|
所需的最大模型数。最大阈值为20万。后端可能会选择更低的默认值和最大阈值。 |
order_by |
一个由 |
要排序的列列表,包括模型名称、版本、阶段,并可选择带有 “DESC” 或 “ASC” 注释,其中 “ASC” 为默认值。 并列时先按最近的阶段转换时间戳,其次按名称 ASC,再按版本 DESC。 |
page_token |
|
分页令牌,用于根据之前的搜索查询跳转到下一页。 |
响应结构
字段名 |
类型 |
描述 |
|---|---|---|
model_versions |
一个由 ModelVersion 组成的数组 |
与搜索条件匹配的模型 |
next_page_token |
|
用于请求相同搜索查询的下一页模型的分页令牌。 |
Get Download URI For ModelVersion Artifacts
端点 |
HTTP 方法 |
|---|---|
|
|
Transition ModelVersion Stage
端点 |
HTTP 方法 |
|---|---|
|
|
Search RegisteredModels
端点 |
HTTP 方法 |
|---|---|
|
|
请求结构
字段名 |
类型 |
描述 |
|---|---|---|
筛选 |
|
字符串过滤条件,例如 “name LIKE ‘my-model-name’”。在后台会自动解释为 “name LIKE ‘%my-model-name%’”。单个布尔条件,字符串值用单引号包裹。 |
max_results |
|
所需的最大模型数量。默认值为100。最大阈值为1000。 |
order_by |
一个由 |
用于对搜索结果进行排序的列列表,可以包含模型名称和最后更新时间戳,并可选择添加 “DESC” 或 “ASC” 注释,其中 “ASC” 为默认。平局由模型名称按 ASC 决定。 |
page_token |
|
分页令牌,用于根据先前的搜索查询转到下一页。 |
响应结构
字段名 |
类型 |
描述 |
|---|---|---|
registered_models |
一个由 RegisteredModel 组成的数组 |
符合搜索条件的注册模型。 |
next_page_token |
|
用于请求下一页模型的分页令牌。 |
Set Registered Model Tag
端点 |
HTTP 方法 |
|---|---|
|
|
Set Model Version Tag
端点 |
HTTP 方法 |
|---|---|
|
|
Delete Registered Model Tag
端点 |
HTTP 方法 |
|---|---|
|
|
Delete Model Version Tag
端点 |
HTTP 方法 |
|---|---|
|
|
Delete Registered Model Alias
端点 |
HTTP 方法 |
|---|---|
|
|
Get Model Version by Alias
端点 |
HTTP 方法 |
|---|---|
|
|
Set Registered Model Alias
端点 |
HTTP 方法 |
|---|---|
|
|
Data Structures
数据集
数据集。表示在模型开发过程中用于训练、测试或评估的数据引用。
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
数据集的名称。例如 “my.uc.table@2” “nyc-taxi-dataset”, “fantastic-elk-3” 这是必填字段。 |
摘要 |
|
数据集摘要,例如标识数据集的 md5 哈希,用于在同名的数据集中唯一识别它。此字段为必填。 |
source_type |
|
数据集来源的类型,例如 ‘databricks-uc-table’, ‘DBFS’, ‘S3’, …。该字段为必填项。 |
来源 |
|
数据集的来源信息。请注意,如果在与 MLflow 一起使用之前对数据集进行了转换/修改,则该来源可能无法完全重现数据集。该字段为必填项。 |
模式 |
|
数据集的模式。例如:用于 dataframe 的 MLflow ColSpec JSON、用于 ndarray 的 MLflow TensorSpec JSON,或另一种模式格式。 |
配置文件 |
|
数据集的概况。数据集的汇总统计信息,例如表格中的行数、表中每列的均值 / 标准差 / 众数,或数组中的元素数量。 |
DatasetInput
DatasetInput。表示一个数据集和输入标签。
字段名 |
类型 |
描述 |
|---|---|---|
tags |
由 InputTag 组成的数组 |
用于数据集输入的标签列表,例如具有值“training”的“context”标签 |
数据集 |
用于作为 Run 输入的数据集。该字段是必需的。 |
实验
实验
字段名 |
类型 |
描述 |
|---|---|---|
experiment_id |
|
实验的唯一标识符。 |
名称 |
|
用于标识实验的可读名称。 |
artifact_location |
|
Location where artifacts for the experiment are stored. |
lifecycle_stage |
|
实验当前的生命周期阶段:“active” 或 “deleted”。已删除的实验不会被 APIs 返回。 |
last_update_time |
|
最后更新时间 |
creation_time |
|
创建时间 |
tags |
一个由 ExperimentTag 组成的数组 |
标签:附加的元数据键值对。 |
文件信息
字段名 |
类型 |
描述 |
|---|---|---|
路径 |
|
相对于运行的根 artifact 目录的路径。 |
is_dir |
|
路径是否为目录。 |
file_size |
|
大小(以字节为单位)。对于目录未设置。 |
指标
与运行关联的指标,以键值对表示。
字段名 |
类型 |
描述 |
|---|---|---|
键 |
|
用于标识该指标的键。 |
值 |
|
与该指标关联的值。 |
时间戳 |
|
记录该指标的时间戳。 |
步骤 |
|
记录该指标的步骤。 |
ModelInput
表示一个作为 Run 输入的 LoggedModel 或 Registered Model Version。
字段名 |
类型 |
描述 |
|---|---|---|
model_id |
|
模型的唯一标识符。 该字段为必填项。 |
模型指标
与模型相关的指标,以键值对表示。 复制自 MLflow 指标
字段名 |
类型 |
描述 |
|---|---|---|
键 |
|
用于标识此指标的键。 |
值 |
|
与此指标关联的值。 |
时间戳 |
|
记录该指标时的时间戳。 |
步骤 |
|
记录指标时的步数。 |
ModelOutput
表示 Run 的 LoggedModel 输出。
字段名 |
类型 |
描述 |
|---|---|---|
model_id |
|
模型的唯一标识符。该字段为必填项。 |
步骤 |
|
模型产生时的步骤。此字段为必填。 |
模型版本
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
模型的唯一名称 |
版本 |
|
模型的版本号。 |
creation_timestamp |
|
记录此 |
last_updated_timestamp |
|
记录的时间戳,表示此 |
user_id |
|
创建此 |
current_stage |
|
此 |
描述 |
|
关于此 |
来源 |
|
URI,指示源模型工件的位置,在创建 |
run_id |
|
在创建 |
状态 |
当前状态: |
|
status_message |
|
有关当前 |
标签 |
一个ModelVersionTag的数组 |
标签:该 |
run_link |
|
运行链接:指向生成此版本的运行的直接链接。此字段仅在模型版本创建时设置,且仅适用于其源运行来自与注册服务器不同的跟踪服务器的模型版本。 |
别名 |
一个由 |
指向此 |
model_id |
|
可选的 model_id,用于指定用于将已注册模型链接到源已记录模型的模型版本 |
model_params |
一个由 ModelParam 组成的数组 |
模型的可选参数。 |
model_metrics |
一个由 ModelMetric 组成的数组 |
模型的可选指标。 |
deployment_job_state |
此模型版本的部署作业状态。 |
ModelVersionDeploymentJobState
字段名 |
类型 |
描述 |
|---|---|---|
job_id |
|
|
run_id |
|
|
job_state |
||
run_state |
||
current_task_name |
|
RegisteredModel
字段名 |
类型 |
描述 |
|---|---|---|
名称 |
|
模型的唯一名称。 |
creation_timestamp |
|
记录该 |
last_updated_timestamp |
|
记录此 |
user_id |
|
创建此 |
描述 |
|
此 |
latest_versions |
一个由 ModelVersion 组成的数组 |
每个阶段的最新模型版本的集合。仅包含当前状态为 |
标签 |
一个由 RegisteredModelTag 组成的数组 |
标签:此 |
别名 |
一个由 RegisteredModelAlias 组成的数组 |
指向与此 |
deployment_job_id |
|
该模型的部署作业 ID。 |
deployment_job_state |
此模型的部署作业状态。 |
RunData
运行数据(指标、参数和标签)。
字段名 |
类型 |
描述 |
|---|---|---|
metrics |
一个 Metric 数组 |
Run 指标。 |
params |
由 Param 组成的数组 |
运行参数。 |
tags |
一个由 RunTag 组成的数组。 |
附加的元数据键值对。 |
运行信息
单次运行的元数据。
字段名 |
类型 |
描述 |
|---|---|---|
run_id |
|
运行的唯一标识符。 |
run_uuid |
|
[已弃用,请改用 run_id] 该运行的唯一标识符。此字段将在未来的 MLflow 版本中移除。 |
run_name |
|
运行的名称。 |
experiment_id |
|
实验 ID。 |
user_id |
|
发起运行的用户。此字段自 MLflow 1.0 起已弃用,并将在未来的 MLflow 版本中移除。请改用 ‘mlflow.user’ 标签。 |
status |
运行的当前状态。 |
|
start_time |
|
运行开始时的 Unix 时间戳(以毫秒为单位)。 |
end_time |
|
运行结束时的 Unix 时间戳(以毫秒为单位)。 |
artifact_uri |
|
用于上传工件的目录的 URI。
它可以是本地路径(以“/”开头),也可以是分布式文件系统(DFS)路径,例如 |
lifecycle_stage |
|
实验的当前生命周期阶段:OneOf(“active”, “deleted”) |
运行输入
运行输入。
字段名 |
类型 |
描述 |
|---|---|---|
dataset_inputs |
一个由 DatasetInput 组成的数组 |
Run 的数据集输入。 |
model_inputs |
一个由 ModelInput 组成的数组 |
Run 的模型输入。 |
DeploymentJobRunState
名称 |
描述 |
|---|---|
DEPLOYMENT_JOB_RUN_STATE_UNSPECIFIED |
|
NO_VALID_DEPLOYMENT_JOB_FOUND |
|
运行中 |
|
成功 |
|
失败 |
|
等待中 |
|
审批 |
ModelVersionStatus
名称 |
描述 |
|---|---|
PENDING_REGISTRATION |
在服务器执行后台任务时,请求注册新模型版本处于挂起状态。 |
FAILED_REGISTRATION |
注册新模型版本的请求失败。 |
已就绪 |
模型版本已可使用。 |