奥田です。
updateの後、
・cleargradsを呼びだしてgradを消す
・backwardや、フォワードに使ったローカル変数も消す
などして、計算グラフのデータが全て無くなるようにした後で、
memory_pool.free_all_blocks()
を行ってみていただけますか?
基本的に、CPython上では解放されたGPUメモリはすぐにGCされる(参照カウント方式のため)のですが、
メモリの断片化が起こっている可能性が有り、それを解消する事ができます。
計算速度は遅くなりますが、最後まで実行できる可能性がまします。
2017年11月8日 3:26 吴益明 <
wuyim...@hotmail.com>:
> Chainer3.0を使って比較的深いNN(pix2pixに近いもの)の学習を行わせているのですが、学習の途中でGPU(メモリ2GB)がout of
> memoryを起こしてしまいます。
> 確認したところ十回ほどのiteration(パラメータの更新)後に落ちているので、一回の順伝播計算に使うメモリは足りているのだと思います。batch数を減らしたり、少しモデルを小さくしてみると更に多くのiteration後に落ちるようになります。
>
> ほかの小さめのNNだと、このような問題は起こらないので、憶測ですが、cupyのガーベジコレクションが追い付いていないという事なのでしょうか・・・?
> ちなみにtrainer等は使っておらず、1.xスタイルのOptimizer.update()関数で学習を行っています。
> iterationごとにVariableのメモリを明示的に解放する方法はあるのでしょうか?
>
> --
> このメールは Google グループのグループ「Chainer Japanese User Group」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
chainer-jp+...@googlegroups.com
> にメールを送信してください。
> このグループに投稿するには
chain...@googlegroups.com にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには
>
https://groups.google.com/d/msgid/chainer-jp/0dfc3c24-6593-44c2-a67d-8f2106a89c4c%40googlegroups.com
> にアクセスしてください。
> その他のオプションについては
https://groups.google.com/d/optout にアクセスしてください。
--
〒100-0004 東京都千代田区 大手町1丁目6−1 大手町ビル2F
Preferred Networks, Inc.
Ryosuke Okuta 奥田遼介