GPU
機械学習
CPU

GPUで作ったpickleをCPUで使う時のTips

概要

研究において、GPUで学習してもらったPickleのdumpファイルはGPUで作ったPickleのファイルであるため、どうやらCPUでそのまま使えないらしい。実際にやってみたところエラーが出たので改善策をまとめておく。

このままではせっかく作ったモデルファイルで予測ができない。
よってGPUで作ったpickleのモデルファイルを使って予測を行うために自分がやったことをメモする。

環境

python => 3.5.2

chainer => 2.0.1

CPU用にモデルファイルを変換

pylearn2にあるgpu_pkl_to_cpu_pklを使ってdumpファイルをcpu用に変換する。
ただし、これはどうやら実験段階にあるため、環境によってはそもそもうまくいかない場合があることに注意する。

  1. Pylearn2がインストールされていない場合はインストールする(公式ドキュメントはこちら)
  2. Pylearn2のgpu_pkl_to_cpu_pklを使って変換を行い、保存する。

[画像]

変換後

変換後、予測のタスクをやってみたところしっかり予測できた。
エラーもなし。スバラシイ。

対策(そもそもではあるが)

そもそもGPUで保存する際にCPUで使えるように保存できないのかと思って調べてみたところ

model.to_cpu
pickle.dump()

これでchainerの場合はCPU向けのPickleにできるらしい。センセイェ...
※GPUでの学習において、このpickle.dumpをepochごとに行なっている場合は、次のepochを始める際にmodel.to_gpuをしておかないと、モデルがおかしくなるので注意が必要。

参考

Pylearn2 公式ドキュメント
Pylearn2(Github)
Converting a theano model built on GPU to CPU?