環境

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()

 

    1. jupyter notebookで実行後にdel model

 

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

 

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

 

    1. 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する方法しか出て来ないので連続して複数の条件を試していく使い方が出来ないんですよね…

悩ましいです。

bannerAds