Help us understand the problem. What is going on with this article?

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

環境

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()
  2. jupyter notebookで実行後にdel model
  3. 1つのclassにまとめてjupyter notebookで実行後インスタンスをdelする
  4. pyファイルにまとめてjupyter notebookから%runで呼ぶ
  5. terminalでpyファイルを実行
  6. 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する方法しか出て来ないので連続して複数の条件を試していく使い方が出来ないんですよね…

悩ましいです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした