如何通过Python获取SageMaker管道HPO调优作业步骤详情
获取SageMaker Pipeline中HPO步骤超参数配置与作业详情的实现方法
你已经通过list_pipeline_execution_steps拿到了HPO步骤对应的超参数调优作业ARN,直接调用SageMaker原生服务API即可获取所需信息,不需要依赖Pipeline层面的额外接口:
- 调用
describe_hyper_parameter_tuning_job:可获取该调优作业的全量详情,包括配置的所有超参数的取值规则、调优策略、资源配置、指标定义、作业运行状态、最优训练作业结果等核心信息,入参传入调优作业名称即可。 - 若需要获取调优过程中每一次训练任务实际使用的超参数组合、对应运行指标,可先调用
list_training_jobs_for_hyper_parameter_tuning_job列出该调优作业下启动的所有训练任务,再遍历每个训练任务ARN调用describe_training_job获取单任务的超参数与运行详情。
可直接复用的代码示例
import boto3 from botocore.config import Config config = Config(retries=dict(max_attempts=20)) sm_client = boto3.client('sagemaker', config=config) # 替换为你从Pipeline步骤元数据中拿到的超参数调优作业ARN tuning_job_arn = "arn:aws:sagemaker:us-east-1:111111111111:hyper-parameter-tuning-job/xxxxxxxxxx-hpo-zzzzzzzzz" # 从ARN中解析出调优作业名(ARN最后一段即为作业名) tuning_job_name = tuning_job_arn.split("/")[-1] # 1. 查询调优作业完整详情、配置的超参数列表 tuning_job_detail = sm_client.describe_hyper_parameter_tuning_job( HyperParameterTuningJobName=tuning_job_name ) # 配置的所有超参数定义存储在以下字段中,包含整数、连续值、分类三类参数的取值范围、缩放规则 configured_hyper_params = tuning_job_detail["HyperParameterTuningJobConfig"]["ParameterRanges"] # 2. (可选)查询调优作业下所有训练任务的实际运行超参数与结果 # 注意:如果训练任务数超过单页返回上限,需要用NextToken分页遍历拿全量数据 hpo_training_jobs = [] next_token = None while True: list_kwargs = {"HyperParameterTuningJobName": tuning_job_name, "MaxResults": 100} if next_token: list_kwargs["NextToken"] = next_token resp = sm_client.list_training_jobs_for_hyper_parameter_tuning_job(**list_kwargs) hpo_training_jobs.extend(resp["TrainingJobSummaries"]) next_token = resp.get("NextToken") if not next_token: break # 遍历获取每个训练任务的实际超参数 for job in hpo_training_jobs: job_detail = sm_client.describe_training_job(TrainingJobName=job["TrainingJobName"]) # 该次训练实际传入的超参数 runtime_params = job_detail["HyperParameters"] # 该次训练的最终评估指标 final_metrics = job_detail.get("FinalMetricDataList", [])
注意:SageMaker的调优作业配置中定义的是超参数的搜索范围,单训练任务实际使用的超参数是调优算法从搜索范围中采样得到的具体值,两类数据分别从上述两个不同接口获取。
内容的提问来源于stack exchange,提问作者NDS
相关产品推荐
相关产品推荐

