【问题标题】:Loading a pickle package in AWS EC2 instance在 AWS EC2 实例中加载泡菜包
【发布时间】:2019-06-15 00:51:16
【问题描述】:

我使用 pickle(Windows Python 3.6)将我的一个模型保存在本地,我需要该模型在 EC2 Linux 实例(使用 Python 2.7)上运行以进行预测。我已经使用 Filezilla 将保存的模型从我的笔记本电脑传输到 EC2 实例,现在我尝试使用以下代码加载模型:

filename = 'Customer_segmentation_model_xgb_final.sav'
loaded_model = pickle.load(open(filename,'rb'))

它给出了以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/pickle.py", line 1384, in load
    return Unpickler(file).load()
  File "/usr/lib64/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/usr/lib64/python2.7/pickle.py", line 892, in load_proto
    raise ValueError, "unsupported pickle protocol: %d" % proto
ValueError: unsupported pickle protocol: 3

请有人建议我做错了什么以及需要做什么。

【问题讨论】:

  • 尝试用较低的协议编写pickle。 pickle.dump(你的对象,你的文件,协议 = 2)。似乎您正在尝试使用为协议 3 (python 3+) 编写的文件

标签: python python-3.x python-2.7 amazon-ec2 pickle


【解决方案1】:

这看起来像是一个兼容性问题,我建议在您的服务器上安装相同版本的 Python(python 3.6),因为 pickle 模块是 Python 标准库的一部分:

sudo apt-get install python3.6

您也可以在最初转储时强制使用较低的协议(EDIT:就像 cmets 中建议的那样):

pickle.dump(model, file, protocol=2)

希望这会有所帮助!

【讨论】:

  • 非常感谢,这有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-23
  • 2015-04-17
相关资源
最近更新 更多