11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

jupyter notebook上でkeras+tensorflow-gpuで学習するとGPUメモリが開放されなくて困ってる

Last updated at Posted at 2018-10-24

環境

windows10 64bit
cpu: Ryzen7 1700X
gpu: GTX1080Ti
CUDA9.0
cuDNN7.3.1 for cuda9.0
python3.6
tensorflow-gpu 1.11.0
keras 2.2.4

やったこと

  1. jupyter notebookで実行後にgc.collect()
  • jupyter notebookで実行後にdel model
  • 1つのclassにまとめてjupyter notebookで実行後インスタンスをdelする
  • pyファイルにまとめてjupyter notebookから%runで呼ぶ
  • terminalでpyファイルを実行
  • pycharmでpyファイルを実行

何故やったか

GPU使った画像認識をjupyter notebookでやろうとしたんですが、2回目以降学習が止まってしまって困りました。nvidia-smiでメモリ使用状況を確認したところ、学習が終わったあともメモリがリリースされてないのが分かったので、これをリリースするべく色々試してみましたが結局ダメでした。

結論

jupyter notebook上で出来る1~4は全部ダメ
pycharmまたはterminalは無事リリースされる

jupyter notebookがダメ?困ったなぁ…

1. jupyter notebookで実行後にgc.collect()

>>> import gc
>>> gc.collect()

普通にダメ
image.png

2. jupyter notebookで実行後にdel model

keras+tensorflow-gpuで以下のようにモデルを作ったあと学習してたので、このmodelをdelしたらメモリもリリースされるかな、とやってみました。
>>> #学習
>>> model = self.initModel(self.nb_classes)
>>> history = model.fit_generator(train_batches, train_steps, epochs=self.epoch, validation_data=valid_batches, validation_steps=valid_steps)
>>> del model

うん、ダメ
image.png

3. 1つのclassにまとめてjupyter notebookで実行後インスタンスをdelする

じゃあ1つのclassにまとめて、インスタンスを作って実行した後にインスタンスをdelしたらどうかなというのをやってみました。class visual()にすべてのコードをまとめて以下のように実行後にdel。
>>> study = visual()
>>> %time history = study.main()
>>> del study

あうあう、ダメ
image.png

4. pyファイルにまとめてjupyter notebookから%runで呼ぶ

上記でまとめたclassをpyファイルにして、jupyter notebookから呼んだらどうかなというのをやってみました。下記ではipynbファイル置いてる場所と同じフォルダにvisual10.pyを置いています。
>>> %run './visual10.py'

うん知ってた
image.png

5. terminalでpyファイルを実行

そんで、上記visual10.pyをterminalから実行するとどうなるかというとですね

ちゃんとリリースされるわけですよ
image.png

6. pycharmでpyファイルを実行

じゃあ同じことをpycharmからやると?

リリースされます。
image.png

まとめ

4~6は同じファイルを実行してるだけなんですよね。今回は比較のために同じAnacondaで作ったpython.exeファイルを使って実行してるので、違いはどこから実行したかだけなんですが、jupyter notebookのみがダメという結果になりました。

1回だけ実行するなら問題ないし、コードを書いていく過程では結果が見やすいjupyter notebookがやりやすいので、jupyter notebookで書きながら完成したらpyファイルにまとめるというやり方になりそうです。

ほんとは全部jupyter notebookでやりたいんで、継続して良い方法を探したいですが検索しても手動でプロセスkillする方法しか出て来ないので連続して複数の条件を試していく使い方が出来ないんですよね…

悩ましいです。

11
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?