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

如何加载Azure AutoML模型对应环境以解决版本兼容问题?

问题描述

我想在代码中使用Azure AutoML生成的模型做测试(暂不部署),当前用以下代码加载模型:

import joblib
from azureml.core.model import Model
from azureml.core import Workspace
import os
import pickle

ws = Workspace.from_config()
path=Model.get_model_path('my_automl_model', version=1, _workspace=ws)
model_path = os.path.join(path, 'model.pkl')
model = joblib.load(model_path)

运行时出现错误:

/anaconda/envs/azureml_py38/lib/python3.8/site-packages/spacy/util.py:873: UserWarning: [W094] Model 'en_core_web_sm' (2.1.0) specifies an under-constrained spaCy version requirement: >=2.1.0. This can lead to compatibility problems with older versions, or as new spaCy versions are released, because the model may say it's compatible when it's not. Consider changing the "spacy_version" in your meta.json to a version range, with a lower and upper pin. For example: >=3.4.0,<3.5.0
  warnings.warn(warn_msg)
Output exceeds the size limit. Open the full output data in a text editor
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
/home/azureuser/....ipynb Cellule 4 in <cell line: 11>()
      9 model_path = os.path.join(path, 'model.pkl')
     10 print(os.stat(model_path))
---> 11 model = joblib.load(model_path)

File /anaconda/envs/azureml_py38/lib/python3.8/site-packages/joblib/numpy_pickle.py:605, in load(filename, mmap_mode)
    599             if isinstance(fobj, _basestring):
    600                 # if the returned file object is a string, this means we
    601                 # try to load a pickle file generated with an version of
    602                 # Joblib so we load it with joblib compatibility function.
    603                 return load_compatibility(fobj)
--> 605             obj = _unpickle(fobj, filename, mmap_mode)
    607 return obj

File /anaconda/envs/azureml_py38/lib/python3.8/site-packages/joblib/numpy_pickle.py:529, in _unpickle(fobj, filename, mmap_mode)
    527 obj = None
    528 try:
--> 529     obj = unpickler.load()
    530     if unpickler.compat_mode:
    531         warnings.warn("The file '%s' has been generated with a "
    532                       "joblib version less than 0.10. "
    533                       "Please regenerate this pickle file."
    534                       % filename,
...
    679     return config.from_disk(
    680         config_path, overrides=overrides, interpolate=interpolate
    681     )

OSError: [E053] Could not read config file from /anaconda/envs/azureml_py38/lib/python3.8/site-packages/en_core_web_sm/en_core_web_sm-2.1.0/config.cfg

AutoML模型文件夹包含相关文件,我推测错误原因是当前运行环境为Python 3.8.5,而模型生成环境为Python 3.7.9(conda.yaml文件已标注),请问加载该模型对应环境的最佳方式是什么?

解决方案

针对Python版本不匹配导致的模型加载问题,最佳方式是复用AutoML生成的conda环境配置,步骤如下:

  • 提取模型的conda配置文件
    从Azure AutoML模型文件夹中找到conda.yaml文件,该文件记录了模型训练时的所有依赖包及版本。

  • 基于配置创建conda环境
    使用conda命令创建与训练环境一致的虚拟环境:

    conda env create -f conda.yaml
    

    环境创建完成后,激活该环境:

    conda activate <环境名称>
    

    (注:<环境名称>可在conda.yaml的name字段中找到)

  • 在匹配环境中加载模型
    激活环境后,运行你原来的加载代码即可。如果需要在Jupyter Notebook中使用该环境,需先将环境添加到Notebook内核:

    python -m ipykernel install --user --name <环境名称> --display-name "Python (<环境名称>)"
    

    之后在Notebook中选择对应的内核运行代码。

  • 备选方案:使用Azure ML环境进行本地测试
    如果你不想手动管理conda环境,可以用Azure ML SDK加载模型的原始环境并运行测试:

    from azureml.core import Workspace, Model, Environment
    from azureml.core.model import InferenceConfig
    from azureml.core.compute import LocalCompute
    
    ws = Workspace.from_config()
    model = Model(ws, 'my_automl_model', version=1)
    # 获取模型关联的环境
    env = model.get_environment()
    # 创建本地计算目标
    local_compute = LocalCompute(ws, 'local')
    # 创建推理配置
    inference_config = InferenceConfig(entry_script='score.py', environment=env)
    # 部署到本地(仅测试用)
    service = Model.deploy(ws, 'local-test-service', [model], inference_config, local_compute, overwrite=True)
    service.wait_for_deployment(show_output=True)
    # 调用模型测试
    result = service.run(input_data='{"data": [...]}')
    

    这种方式完全复用训练时的环境配置,避免版本冲突,但需要编写简单的score.py脚本处理输入输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:25:25