You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AzureML SDK管道训练步骤中结合HyperDrive超参数调优配置

核心实现逻辑

你之前找不到config=hyperdrive的放置位置,本质是混淆了独立运行Hyperdrive和在AzureML管道中嵌入Hyperdrive的场景:管道内跑超参调优不能用普通的PythonScriptStep,必须用专用的HyperDriveStep,Hyperdrive配置是作为这个步骤的入参传递的,不是随便塞给原有PythonScriptStep或者pipeline提交接口的。

分步改动指南

1. 替换原训练步骤的基础配置

把原来给独立Hyperdrive用的ScriptRunConfig适配管道流转逻辑,不要硬编码静态数据集输入,要对接上游预处理步骤的输出:

  • 用你已经注册好环境的run_config作为运行配置,不要混用之前独立测试用的sklearn_env
  • 把训练脚本的入参对齐原有管道的输入逻辑,接收上游prep_step输出的预处理数据路径
# 构造适配管道的训练脚本运行配置
train_script_config = ScriptRunConfig(
    source_directory=experiment_folder,
    script='train_diabetes.py',
    arguments=[
        # 对齐原有PythonScriptStep的输入逻辑,把预处理输出作为命名输入传给训练脚本
        '--training-folder', prepped_data_folder.as_named_input('prepped_data')
    ],
    run_config=run_config # 复用你之前配好的计算目标、环境的运行配置
)

2. 保留原有Hyperdrive超参配置逻辑

你之前写的网格采样、指标定义、运行数限制这些逻辑完全不用改,只需要把run_config参数替换成上面适配管道的train_script_config就行:

from azureml.train.hyperdrive import GridParameterSampling, PrimaryMetricGoal, HyperDriveConfig
from azureml.core.runconfig import RunConfiguration

# 超参采样逻辑和独立运行时完全一致
params = GridParameterSampling(
    {
        '--learning_rate': choice(0.01, 0.1, 1.0),
        '--n_estimators' : choice(10, 100)
    }
)

# 构造HyperDrive配置,和独立运行的参数保持一致
hyperdrive_config = HyperDriveConfig(
    run_config=train_script_config,
    hyperparameter_sampling=params,
    policy=None,
    primary_metric_name='AUC',
    primary_metric_goal=PrimaryMetricGoal.MAXIMIZE,
    max_total_runs=6,
    max_concurrent_runs=2
)

3. 替换原训练步骤为HyperDriveStep

这就是config=hyperdrive的核心放置位置:把原来的普通PythonScriptStep训练代码整段删掉,替换成HyperDriveStep,把上面构造好的hyperdrive_config传进去:

from azureml.pipeline.steps import HyperDriveStep

# 删掉原来的普通PythonScriptStep训练步骤,替换成下面的HyperDriveStep
train_step = HyperDriveStep(
    name="超参调优训练",
    hyperdrive_config=hyperdrive_config, # 这里就是你要找的Hyperdrive配置的挂载位置
    inputs=[prepped_data_folder], # 声明步骤依赖上游预处理的输出,保证执行顺序
    allow_reuse=True
)

不需要改动的部分

  • 上游prep_step的代码完全保留,不用做任何修改
  • 管道构造、提交的逻辑完全和原来一致:
pipeline_steps = [prep_step, train_step]
pipeline = Pipeline(workspace=ws, steps=pipeline_steps)
experiment = Experiment(workspace=ws, name = 'mslearn-diabetes-pipeline')
pipeline_run = experiment.submit(pipeline, regenerate_outputs=True)

常见踩坑提醒

  • 不要把hyperdrive_config直接塞给原PythonScriptStep的runconfig参数,普通脚本步骤不识别Hyperdrive配置,提交会直接报类型错误
  • 不要把hyperdrive_config作为参数传给experiment.submit(),管道提交接口只接受Pipeline对象,超参调优是管道内部的一个执行步骤
  • 要保证训练脚本train_diabetes.py的逻辑和独立Hyperdrive运行时一致:能接收超参命令行参数、能在日志里打印AUC指标供Hyperdrive抓取
  • 如果需要把超参调优得到的最佳模型传给管道后续的注册、部署步骤,可以在HyperDriveStep里声明对应的输出路径,正常被后续步骤引用

内容的提问来源于stack exchange,提问作者Mohsen Sichani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 10:57:04