Azure ML无法从output文件夹读取model.pkl导致部署失败如何解决
Azure ACI部署读取artifacts目录model.pkl的正确实现
错误根因
你现有代码的核心问题是调用Model.get_model_path()获取到部署环境下的模型真实路径后,手动用仅在训练环境有效的相对路径"outputs/model.pkl"覆盖了该返回值,ACI部署的容器运行环境不存在这个相对路径,因此会触发文件读取失败。
正确实现步骤
- 首先确认你在Azure工作区中注册的模型的准确名称,替换代码中
<<modelname>>占位符,不要手动覆盖model_path的返回值 - 在评分脚本头部引入必要的依赖库
- 直接使用
Model.get_model_path()返回的路径加载模型
正确代码示例
import joblib from azureml.core.model import Model def init(): global model # 获取部署环境下模型的真实挂载路径,不需要手动写死路径 model_path = Model.get_model_path(model_name = '替换为你实际注册的模型名称') # 反序列化模型 model = joblib.load(model_path)
额外排查点
如果调整后仍然部署失败,可依次检查以下配置:
- 确认你部署时关联的模型已经正确注册到Azure工作区,注册时上传的文件路径对应训练时生成的
outputs/model.pkl - 确认部署使用的conda环境配置中,
joblib、scikit-learn的版本和你训练模型时使用的版本完全一致,版本不匹配会导致模型反序列化失败 - 不要使用任何相对路径直接读取模型文件,ACI容器的运行目录和训练任务的目录结构完全独立,所有模型路径必须通过
Model.get_model_path()接口获取
内容的提问来源于stack exchange,提问作者Sai Varun Kumar
相关产品推荐
相关产品推荐

