如何通过Python SDK检索AutoML多模型预测训练的子作业结果?
解决Azure ML多模型训练子作业结果检索问题
获取所有子作业ID
先连接到Azure ML工作区,找到对应的父流水线作业,定位到mm-models train步骤作业后,即可列出所有子作业:
from azure.ai.ml import MLClient from azure.identity import DefaultAzureCredential # 初始化ML客户端 ml_client = MLClient( DefaultAzureCredential(), subscription_id="<你的订阅ID>", resource_group_name="<你的资源组名称>", workspace_name="<你的工作区名称>" ) # 获取父流水线作业 parent_job = ml_client.jobs.get(name="<父流水线作业名称>", version="<作业版本>") # 定位到mm-models train步骤对应的作业 train_step_job = None for step in parent_job.jobs: if step.name == "mm-models train": train_step_job = ml_client.jobs.get(name=step.name, version=step.version) break # 列出该步骤下的所有子作业 child_jobs = ml_client.jobs.list_child_jobs( parent_job_name=train_step_job.name, parent_job_version=train_step_job.version ) # 收集子作业ID和分区信息(分区信息通常在tags或properties中) for job in child_jobs: partition = job.tags.get("partition_keys", "未知分区") print(f"分区: {partition}, 子作业ID: {job.name}, 状态: {job.status}")
获取子作业训练结果
针对每个子作业,可提取最佳模型、超参数、训练指标,以及下载交叉验证预测、可解释性文件等输出:
# 指定目标子作业ID target_child_job_id = "<目标子作业ID>" child_job = ml_client.jobs.get(name=target_child_job_id) # 获取AutoML最佳运行实例 best_run = child_job.best_run # 提取超参数 print("最佳模型超参数:") for param, value in best_run.parameters.items(): print(f"{param}: {value}") # 提取训练指标 metrics = ml_client.jobs.get_metrics(best_run.name) print("\n训练指标:") for metric, value in metrics.items(): print(f"{metric}: {value}") # 查看作业输出项 print("\n作业输出文件路径:") for output_name, output in child_job.outputs.items(): print(f"{output_name}: {output.path}") # 下载指定输出到本地(示例:下载predictions输出) ml_client.jobs.download( name=target_child_job_id, output_name="predictions", download_path="./local_download_dir" )
注意事项
- 分区信息的存储位置可能因作业配置略有差异,若
tags.get("partition_keys")无法获取,可尝试从job.properties.get("azureml.partition_keys")提取。 - 若子作业状态为
Completed,才能正常获取所有结果;若处于Running或Failed状态,部分结果可能无法提取。
内容的提问来源于stack exchange,提问作者Robin Reiners
相关产品推荐
相关产品推荐

