背景:我刚刚开始使用 scikit-learn,并在页面底部阅读了有关 joblib, versus pickle 的信息.
it may be more interesting to use joblib’s replacement of pickle (joblib.dump & joblib.load), which is more efficient on big data, but can only pickle to the disk and not to a string
我在 Pickle 上阅读了这个问答, Common use-cases for pickle in Python想知道这里的社区是否可以分享 joblib 和 pickle 之间的差异?什么时候应该使用一个而不是另一个?
最佳答案
- joblib 在大型 numpy 数组上通常要快得多,因为它对 numpy 数据结构的数组缓冲区进行了特殊处理。要了解实现细节,您可以查看 source code .它还可以在使用 zlib 或 lz4 进行 pickle 时动态压缩该数据。
- joblib 还可以在加载时对未压缩的 joblib-pickled numpy 数组的数据缓冲区进行内存映射,从而可以在进程之间共享内存。
- 如果你不 pickle 大型 numpy 数组,那么常规 pickle 会明显更快,尤其是在小型 Python 对象的大型集合上(例如 str 对象的大字典),因为 pickle 模块标准库是用 C 实现的,而 joblib 是纯 python。
- 自从 PEP 574(Pickle 协议(protocol) 5)在 Python 3.8 中合并后,现在使用标准库 pickle 大型 numpy 数组的效率要高得多(内存方面和 cpu 方面)。在这种情况下,大型数组意味着 4GB 或更多。
- 但 joblib 仍然可以在 Python 3.8 中使用,以使用
mmap_mode="r"
在内存映射模式下加载具有嵌套 numpy 数组的对象。
关于python - joblib 与 pickle 的不同用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12615525/