使用Azure ML Python SDK v2创建含AutoML组件的ML管道报错解决
错误原因
automl.regression()方法直接调用返回的是独立的RegressionJob作业实例,不是可在DSL管道中调用的组件对象,你提前在管道外初始化它再放到管道函数里加括号传参,自然会报不可调用的类型错误。这个功能在Azure Machine Learning Python SDK v2中已经正式支持,不需要自己封装自定义组件。
正确实现步骤
你不需要在管道外提前定义AutoML训练组件,直接在@dsl.pipeline装饰的管道函数内部初始化AutoML作业,绑定上游步骤的输出作为训练/验证输入即可。另外你原有代码存在配置错误:accuracy是分类任务的评估指标,不能用在回归任务上。
修正后的可运行代码示例:
from azure.ai.ml import dsl, Input from azure.ai.ml import automl # 前置依赖:已初始化MLClient实例ml_client、定义好数据预处理组件data_prep_component、获取计算目标compute_target、准备好输入数据集data @dsl.pipeline( compute=args.compute_name, description="AutoML训练管道", ) def automl_pipeline( pipeline_job_data_input, pipeline_job_test_size, ): # 数据预处理步骤 data_prep_job = data_prep_component( data=pipeline_job_data_input, test_size=pipeline_job_test_size, ) # 管道内直接初始化AutoML回归作业,绑定上游输出 train_job = automl.regression( compute=compute_target, experiment_name=args.experiment_name, training_data=data_prep_job.outputs.train_data, validation_data=data_prep_job.outputs.test_data, target_column_name=args.target, primary_metric="r2_score", # 回归任务使用对应指标,不要用分类的accuracy enable_model_explainability=True, # 可按需追加训练超时、允许模型列表、交叉验证配置等AutoML参数 ) return { "pipeline_job_train_data": data_prep_job.outputs.train_data, "pipeline_job_test_data": data_prep_job.outputs.test_data, "pipeline_job_model": train_job.outputs.best_model, } # 实例化管道 pipeline = automl_pipeline( pipeline_job_data_input=Input(type="uri_folder", path=data.path), pipeline_job_test_size=0.2, ) # 提交管道作业 pipeline_job = ml_client.jobs.create_or_update( pipeline, experiment_name="test_pipeline", ) # 可选:实时查看作业运行日志 ml_client.jobs.stream(pipeline_job.name)
补充说明
- 分类任务替换为
automl.classification()、时序预测任务替换为automl.forecasting()即可,注意匹配对应任务支持的primary_metric - AutoML步骤输出的
best_model是最优训练模型,可直接传给下游的模型评估、批量推理、模型注册步骤,不需要额外格式转换 - 该用法是SDK v2原生支持的管道能力,AutoML步骤和自定义命令组件、并行组件的使用逻辑完全一致,不需要额外封装。
内容的提问来源于stack exchange,提问作者Jun Choi
相关产品推荐
相关产品推荐

