从Azure Blob读取.pkl文件时触发UnpicklingError的问题求助
从Azure Blob读取.pkl文件时触发UnpicklingError的问题求助
我正在开发一个Azure Function,用来提供机器学习模型的推理服务。模型以.pkl文件的形式存储在Azure Blob Storage上,但所有尝试将文件读取到Python的操作都失败了。
为了简化测试,我用一个普通的.pkl文件代替实际的模型文件来复现问题。
本地生成验证.pkl文件的代码
import pickle # 创建pickle文件 small_object = list(range(0,1000)) name = 'small_file.pkl' with open(name, 'wb') as f: pickle.dump(small_object, f) #### 验证文件完整性 ### # 从本地磁盘加载 with open(name, 'rb') as f: opened_object_one = pickle.load(f) print(opened_object_one) # 输出预期的列表 # 从字节流加载 with open('small_object.pkl', 'rb') as f: opened_object_two = f.read() print(pickle.loads(opened_object_two)) # 输出预期的列表
Azure Function代码
import logging import pickle app = func.FunctionApp() @app.route(route="http_trigger", auth_level=func.AuthLevel.FUNCTION) @app.blob_input( arg_name = 'client', path = '<container>/small_file.pkl', connection ='AzureWebJobsStorage' ) def http_trigger(req: func.HttpRequest, client) -> func.HttpResponse: # `client` 的类型是 azure.functions.blob.InputStream package_bytes = client.read() # 返回字节数据 client.close() small_object = pickle.loads(package_bytes)
问题重现步骤
我通过source .venv/scripts/activate进入虚拟环境(使用的是GitBash),然后用func host start本地运行函数,接着访问对应的localhost端点触发函数,此时控制台抛出错误:
Exception: UnpicklingError: invalid load key, '\xef'
已尝试的解决方法
- 读写阶段分别尝试了
joblib、dill和pickle库 - 分别用
Azure CLI和Firefox将pickle文件上传到Blob存储
但不管怎么尝试,都会出现相同的错误。
我的环境是Windows 10系统,Python版本为3.10.5。
希望各位能帮忙分析解决这个问题,非常感谢!
备注:内容来源于stack exchange,提问作者eldrly
相关产品推荐
相关产品推荐

