読者です 読者をやめる 読者になる 読者になる

pickleをjoblibに変えて保存データサイズを圧縮!

経緯

以前のエントリで述べたとおり、Pickleで1.9GB以上のデータを保存しようとすると、エラーが出て保存できない問題があった。
この問題を、joblibを使うことでコードをほとんどいじらずに解決できることがわかったので、まとめておく。

t-nkb.hatenablog.com

joblibを使ったデータの圧縮保存方法

導入

いつもどおりpip

sudo pip install joblib

import

これまたいつも通りimport

import joblib

保存

dump部分は以下の通り書き換える。
pickleをjoblibに変更して、最後の引数をcompress=3に変更するだけでOK
compressは圧縮率を示し、0〜9まで指定できるようだが、とりあえずは3で充分。
pickleではエラーが出て保存できなかったデータが580MBまで圧縮されて保存できたことから、画像であれば1/4以下に圧縮できることがわかる。

(WAS)
pickle.dump((self.X_train,self.X_test,self.y_train,self.y_test,self.index2name), open(self.dump_name, 'wb'), -1)

(IS)
joblib.dump((self.X_train,self.X_test,self.y_train,self.y_test,self.index2name), open(self.dump_name, 'wb'), compress=3)

読み込み

読み込みもpickleをjoblibに書き換えるだけでOK。

(WAS)
self.X_train,self.X_test,self.y_train, self.y_test, self.index2name = pickle.load(open(self.dump_name, 'rb'))

(IS)
self.X_train,self.X_test,self.y_train, self.y_test, self.index2name = joblib.load(open(self.dump_name, 'rb'))