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

Azure机器学习中如何修改MLflow模型的sklearn flavor版本

问题根源

mlflow.sklearn 记录模型时,写入MLmodel文件flavors.sklearn.sklearn_version字段的逻辑,是直接读取当前运行脚本的Python环境中实际导入的scikit-learn版本,和conda_env参数里配置的依赖版本没有关系。
你当前生成的版本号为0.22.1,说明执行训练脚本的Azure ML环境里实际安装的scikit-learn就是0.22.1。修改conda_env只会更新模型打包时附带的依赖声明文件,不会改动flavor里的版本标识,部署阶段MLflow会优先读取这个标识匹配运行时版本,自然会出现兼容性报错。

解决方案

方案1(推荐):对齐训练环境的scikit-learn版本

这是最稳定无兼容问题的方案,直接把跑训练脚本的环境里的scikit-learn版本固定为1.0.0即可:

  • 如果是在Azure ML笔记本实例中直接运行脚本,先在笔记本单元格执行安装命令,重启内核后再运行训练脚本:
%pip install scikit-learn==1.0.0
  • 如果是通过Azure ML提交远程训练任务,直接在任务关联的Azure ML自定义环境配置中,将scikit-learn版本固定为1.0.0,保证训练进程实际加载的sklearn版本就是1.0.0。此时再调用mlflow.sklearn.log_model,会自动将flavors下的sklearn_version写为1.0.0,不需要额外修改其他参数。

方案2:手动修改MLmodel配置(临时适配用)

如果暂时无法调整训练环境的scikit-learn版本,可以在模型保存后手动修改MLmodel文件的版本字段,再记录到MLflow,修改后的核心代码片段如下:

import os
import yaml
import tempfile

# 模型训练完成、定义好my_conda_env后,替换原有的mlflow.sklearn.log_model逻辑
with mlflow.start_run(run_name=run_name) as run:
    # 保留原有的模型训练、指标记录代码

    # 先将模型保存到本地临时目录
    temp_model_path = tempfile.mkdtemp()
    mlflow.sklearn.save_model(
        sk_model=regression_model,
        path=temp_model_path,
        conda_env=my_conda_env
    )

    # 读取并修改MLmodel配置
    mlmodel_file = os.path.join(temp_model_path, "MLmodel")
    with open(mlmodel_file, "r", encoding="utf-8") as f:
        model_config = yaml.safe_load(f)
    # 替换sklearn版本号
    model_config["flavors"]["sklearn"]["sklearn_version"] = "1.0.0"
    # 写回配置文件
    with open(mlmodel_file, "w", encoding="utf-8") as f:
        yaml.safe_dump(model_config, f)

    # 将修改后的模型上传记录到MLflow
    mlflow.log_artifacts(temp_model_path, artifact_path="model")

注意:手动修改版本号仅能绕过MLflow的版本校验,需要确认你训练出的模型文件本身兼容scikit-learn 1.0.0,否则部署后依然会出现加载失败问题。0.22版本训练的scikit-learn模型大多可以在1.0版本正常加载,但如果用到了后续版本废弃的接口,还是需要用1.0版本重新训练模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:21:18