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

Azure ML中AutoMLStep训练模型的注册与推理问题

解决Azure ML AutoMLStep最佳模型获取EOFError及模型注册推理流程

问题根源

EOFError是因为直接读取AutoMLStep输出的文件时,该文件并非可直接反序列化的模型文件,而是AutoML运行的元数据/Run引用,必须通过AutoML Run对象提取最佳模型。

步骤1:修正pipeline.py中的AutoMLStep配置

确保AutoMLStep输出正确的Run相关信息,为后续步骤提供获取最佳模型的入口:

from azureml.pipeline.steps import AutoMLStep
from azureml.train.automl import AutoMLConfig
from azureml.data import PipelineData
from azureml.core import Datastore

# 获取默认数据存储
default_datastore = Datastore.get(ws, 'workspaceblobstore')

# 定义AutoML训练配置
automl_config = AutoMLConfig(
    task='classification', # 根据你的任务类型调整为regression/forecasting等
    primary_metric='accuracy',
    training_data=train_dataset,
    label_column_name='label',
    n_cross_validations=5,
    iterations=10,
    model_explainability=True
)

# 定义AutoMLStep,指定输出存储AutoML运行ID
automl_step = AutoMLStep(
    name='automl_train',
    automl_config=automl_config,
    outputs=[PipelineData(name='automl_run_ref', datastore=default_datastore)],
    allow_reuse=True
)

步骤2:在register_model.py中正确获取并注册最佳模型

通过AutoML Run对象提取模型,避免直接读取输出文件引发EOFError:

import os
import joblib
from azureml.core import Workspace, Run, Model

# 获取当前运行上下文
run = Run.get_context()
ws = run.experiment.workspace

# 下载AutoMLStep输出的Run ID文件并读取
automl_run_file = run.input_datasets['automl_run_ref'].download()[0]
with open(automl_run_file, 'r') as f:
    automl_run_id = f.strip()

# 获取AutoML运行实例
automl_run = Run(experiment=run.experiment, run_id=automl_run_id)

# 获取最佳模型及对应运行记录
best_run, fitted_model = automl_run.get_output()

# 按非AutoML流程保存模型到本地
model_save_path = './automl_best_model.pkl'
joblib.dump(fitted_model, model_save_path)

# 注册模型到工作区
registered_model = Model.register(
    workspace=ws,
    model_path=model_save_path,
    model_name='automl-production-model',
    tags={'task': 'classification', 'training_source': 'automl_step'},
    description='AutoML训练生成的最佳分类模型'
)

# 记录模型ID到运行日志,方便后续追踪
run.log('registered_model_id', registered_model.id)

步骤3:推理阶段加载模型

使用Model.get_model_path加载注册后的模型,与非AutoML流程完全一致:

from azureml.core import Workspace, Model
import joblib
import pandas as pd

# 加载工作区配置
ws = Workspace.from_config()

# 获取已注册模型的本地路径
model_path = Model.get_model_path(model_name='automl-production-model')

# 加载模型
trained_model = joblib.load(model_path)

# 推理示例:对测试数据做预测
test_data = pd.read_csv('./test_data.csv')
predictions = trained_model.predict(test_data)

关键注意事项

  • 不要直接读取AutoMLStep的输出文件内容,必须通过Run ID关联到AutoML运行实例
  • automl_run.get_output()会直接返回拟合完成的模型,无需手动处理原始输出文件的反序列化
  • 注册模型时确保本地保存的模型路径正确,注册后模型由工作区统一管理,可跨环境调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:05