MLFlow调用API无法查询实验对应run列表,如何通过实验id获取run id列表
Search Runs返回空的常见原因
- 请求方法错误:Search Runs API仅支持POST请求,使用GET方式调用会忽略所有传入参数,大概率返回空结果
- 参数格式错误:
experiment_ids必须传入数组格式,哪怕仅查询单个实验,也要将ID放在数组中传递 - 过滤条件限制:默认仅返回
ACTIVE状态的run,已删除、归档状态的run会被默认过滤;如果额外配置了时间、标签、参数等过滤条件,也可能导致匹配结果为空 - 分页参数限制:默认单页返回的最大条目数有限,若实验下run数量超过上限,未配置分页参数会只返回第一页结果,甚至部分场景下配置错误会返回空
正确获取指定实验下所有run ID的方法
方法1:使用MLFlow Python SDK(推荐)
import mlflow # 配置MLFlow跟踪服务地址 mlflow.set_tracking_uri("http://localhost:5000") # 查询实验0下的所有run,包含非活跃状态的run runs_df = mlflow.search_runs( experiment_ids=["0"], run_view_type=mlflow.entities.ViewType.ALL, max_results=1000 ) # 提取run ID列表 run_id_list = runs_df["run_id"].tolist()
如果实验下run总数超过1000,SDK会自动处理分页拉取全量数据,无需额外配置。
方法2:直接调用REST API
调用地址为 http://localhost:5000/api/2.0/mlflow/runs/search,必须使用POST方法,请求头指定Content-Type: application/json,请求体示例如下:
{ "experiment_ids": ["0"], "run_view_type": "ALL", "max_results": 1000 }
请求成功后,返回结果的runs数组中每个对象的info.run_id字段即为对应run的ID。如果返回结果中存在next_page_token字段,说明还有未拉取的run,下次请求时将该字段值作为page_token参数传入即可拉取下一页数据,直到返回结果无next_page_token即可拿到全量run ID。
内容的提问来源于stack exchange,提问作者Vetedde
相关产品推荐
相关产品推荐

