如何在 linux 系统中加载 pickle 模型

how to load pickle model in linux system

我在 python 中使用 xgboost 包构建了 Xgb 模型。我使用 pickle 和 joblib 保存了模型,它们在我的 windows 10 系统中完美运行。但是它在我尝试 运行 的 AWS 实例中出错。该错误似乎与序列化有关。

>>> import joblib
>>> joblib.load(xgb_low_lr_fin.sav)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'xgb_low_lr_fin' is not defined
>>> joblib.load("xgb_low_lr_fin.sav")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/anaconda3/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 598, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/home/ubuntu/anaconda3/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 526, in _unpickle
    obj = unpickler.load()
  File "/home/ubuntu/anaconda3/lib/python3.7/pickle.py", line 1085, in load
    dispatch[key[0]](self)
  File "/home/ubuntu/anaconda3/lib/python3.7/site-packages/joblib/numpy_pickle.py", line 339, in load_build
    Unpickler.load_build(self)
  File "/home/ubuntu/anaconda3/lib/python3.7/pickle.py", line 1549, in load_build
    setstate(state)
  File "/home/ubuntu/anaconda3/lib/python3.7/site-packages/xgboost-1.0.0_SNAPSHOT-py3.7.egg/xgboost/core.py", line 1132, in __setstate__
    _LIB.XGBoosterUnserializeFromBuffer(handle, ptr, length))
  File "/home/ubuntu/anaconda3/lib/python3.7/site-packages/xgboost-1.0.0_SNAPSHOT-py3.7.egg/xgboost/core.py", line 189, in _check_call
    raise XGBoostError(py_str(_LIB.XGBGetLastError()))
xgboost.core.XGBoostError: [10:43:02] src/learner.cc:660: Check failed: header == serialisation_header_ (

以上代码在 windows 和 mac os.

中完美运行

我在尝试加载在不同机器上腌制的 pickle 文件时遇到了类似的问题,这与 Python 2 和 Python 3 中不同的 pickle 序列化有关 - 或甚至可能在 Pickle 本身的不同版本中。

尝试检查 pickle 和 python 版本并使它们匹配 :)

在我的例子中,这个错误是由于我的 xgboost 版本略有不同造成的。我的模型是使用 CPU xgboost 实现训练的。在构建和安装支持 GPU 的 xgboost 后,在 CPU 上训练的模型不再加载。从 pypi 重新安装正常版本的 xgboost 似乎解决了我的问题。