Azure ML部署模型通过InferenceConfig引入额外文件找不到报错咨询
Azure ML 模型部署时找不到额外pkl文件的解决方案
该错误的本质是部署镜像的运行环境中,无法通过你写的相对路径找到mypickle.pkl文件,可按以下步骤排查解决:
- 第一步:修正score.py中的文件读取逻辑
你当前将pkl读取逻辑写在run()方法中是不合理的,run()会在每次接口请求时执行,会导致重复读取文件、接口响应变慢,应该把文件加载逻辑放到init()方法中,服务启动时仅加载一次。
其次不要使用./这类相对路径读取文件,部署后进程工作目录和score.py所在目录可能不一致,需通过脚本绝对路径拼接文件路径,参考代码如下:import os import pandas as pd # 全局变量存储加载后的pkl数据 df = None def init(): global df # 获取当前score.py文件的所在目录绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) pkl_path = os.path.join(script_dir, "mypickle.pkl") df = pd.read_pickle(pkl_path) def run(raw_data): # 直接使用已经加载的df做数据清洗 # 后续业务逻辑保持不变 - 第二步:确认source_directory下存在目标文件
你配置的source_directory="./"指的是运行部署代码的Notebook的工作目录,不是Notebook文件本身的存储目录,你可以在运行部署代码前,在Notebook中执行!ls ./命令,确认输出列表中包含mypickle.pkl和score.py两个文件。如果不存在,可以将source_directory的值修改为两个文件所在的绝对路径,比如source_directory="/Users/myname/myfolder"。 - 第三步:可选的规范实现方案
更推荐将额外依赖的pkl文件和模型文件一起注册为Azure ML模型资产,部署时会自动将模型相关的所有文件打包到镜像中,在init()方法中通过Model.get_model_path()方法获取文件路径即可,无需手动管理打包逻辑。 - 第四步:排查文件打包情况
如果完成以上操作后仍报错,可以临时在init()方法中加入打印逻辑print(os.listdir(script_dir)),重新部署后拉取Endpoint的运行日志,查看镜像中score.py所在目录下的文件列表,确认mypickle.pkl是否被正常打包到镜像中。
内容的提问来源于stack exchange,提问作者user12038164
相关产品推荐
相关产品推荐

