1. ホーム
  2. python

[解決済み] joblibとpickleの使用例の違いは何ですか?

2022-03-13 14:41:29

質問

背景 scikit-learnを始めたばかりで、ページの下のほうにある joblibとpickleの比較 .

joblibのpickleの置き換え(joblib.dump & joblib.load)を使う方が面白いかもしれません、これはビッグデータに対してより効率的ですが、ディスクにしかpickleできず、文字列にできないのです

Pickleに関するQ&Aを読みました。 Pythonにおけるpickleの一般的な使用例 このコミュニティで、joblibとpickleの違いを共有できないでしょうか? どんな時にどちらかを使うべきですか?

どのように解決するのですか?

  • 大きなnumpy配列では、通常joblibが大幅に高速化される これは、numpyデータ構造の配列バッファに対して特別な処理を行うためです。実装の詳細については、以下のサイトを参照してください。 ソースコード . また、zlibやlz4を使ってピックリング中にその場でデータを圧縮することも可能です。
  • joblib はまた、メモリマッピングを可能にする を読み込む際に、joblib-pickled numpy 配列のデータバッファを読み込むので、プロセス間でメモリを共有できます。
  • 大きなnumpy配列をpickleしない場合、特に小さなpythonオブジェクトの大きなコレクションでは、通常のpickleが著しく速くなることがあります。 (標準ライブラリのpickleモジュールがCで実装されているのに対し、joblibは純粋なpythonだからです(例:strオブジェクトの大きなdict)。
  • PEP 574 (Pickle protocol 5) が Python 3.8 でマージされたので、標準ライブラリを使って大きな numpy 配列を pickle するのが(メモリ的にも CPU的にも)非常に効率的になりました。この文脈での大きな配列とは、4GB以上のことを指します。
  • しかし Python 3.8では、numpyの配列がネストされたオブジェクトを読み込むためにjoblibはまだ有用である。 を使用してメモリマップドモードで mmap_mode="r" .