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

Azure ML Pipeline获取模型遇msrest反序列化错误及EOFError求助

解决Azure ML管道获取最佳模型的反序列化警告与EOFError问题

针对你使用SDK 1.46.0时遇到的问题,以下是具体的修复方案:

问题根源

  1. get_pipeline_output方法在较新SDK版本中存在兼容性问题,引发msrest反序列化警告。
  2. 直接访问私有属性_path_on_datastore不可靠,导致指向空文件或错误路径,触发EOFError。

推荐解决方案:从AutoML步骤运行中直接获取模型

这种方式绕过管道输出的反序列化问题,且更可靠:

  1. 定位AutoML步骤的运行实例
from azureml.pipeline.core import StepRun

# 替换为你的管道中AutoML步骤的名称
automl_step_name = "automl_step"
step_runs = pipeline_run.get_step_runs()
automl_step_run = next(run for run in step_runs if run.name == automl_step_name)
  1. 获取最佳模型并加载
from azureml.train.automl.run import AutoMLRun
import pickle

# 转换为AutoMLRun实例
automl_run = AutoMLRun(automl_step_run.experiment, automl_step_run.id)
# 获取性能最优的子运行
best_child_run = automl_run.get_best_child()

# 下载模型文件到本地
best_child_run.download_file(name="outputs/model.pkl", output_file_path="./best_model.pkl")

# 加载模型
with open("./best_model.pkl", "rb") as f:
    best_model = pickle.load(f)

替代方案:修正管道输出的使用方式

如果必须依赖管道输出,按以下步骤调整:

  1. 使用get_output替代get_pipeline_output
# 替换为你的最佳模型输出名称
best_model_output_name = "best_model_output"
best_model_output = pipeline_run.get_output(best_model_output_name)
# 下载输出到本地
best_model_output.download(local_path="./", show_progress=True)
  1. 从正确路径加载模型
    避免使用私有属性,手动拼接下载后的模型路径(根据管道输出的实际结构调整):
import os
import pickle

# 模型文件通常在输出名称对应的子文件夹下
model_file_path = os.path.join("./", best_model_output_name, "model.pkl")
with open(model_file_path, "rb") as f:
    best_model = pickle.load(f)

内容的提问来源于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 08:20:27