Kaggleについて

TF-gpuをメモリ落ちさせずに使う方法

こんにちは、チズチズです。数ヶ月前からTF-gpuのインストールから使うまでの土台が完成せずにひたすらデバッグしていました。ようやく解決したので解決策をまとめます。

とりあえずやることから書きます。

TF-gpuのインストール(Anaconda)

Anacondaを想定しています。

TF-gpuを使う場合は普通のtfは要らないです。あと、nightlyと混ぜてしまうと取り返しがつかないのでやめましょう。nightlyの削除は非常に難しいらしいです。

あとは追加で入れてください。最低限の環境はこれです。(多分)

cudatoolkitの最新版だとtfが対応していなくて動かかったので10.0にしてください。

GPUを認識しているかどうか確認するコード

https://www.tensorflow.org/guide/gpu TFのホームページから持ってきました。

自分の環境の出力は以下のとおりです。

メモリを落とさずに動かす方法

自分はここで数日無駄にしました。

一応こんなものはお守りとして使うと良いです。(メモリの上限を固定するコード)

これだけでは解決しません。自分の場合はforでモデルを複数回学習させていました。

kaggler-ja(日本のKaggerが集まるSlack channel)で質問してみたところ、モデルのコンパイルはループ外でやりましょうと言われました。

使い回しみたいな感じですね。

大事なのはループの中でmodel.compileを実行しないことだそうです。試してみてもループ外に置いておけば大丈夫だったので。

バッチサイズ

自分の浅はかな経験ですが、指定したバッチサイズで1エポック動けば多分大丈夫です。一応ギリギリより少し下のバッチサイズを選択すると良いと思います。1エポックも動かないバッチなら下げて、1エポック動くのならば原因は他にあるので上のものを試してみてください。

役立ったなかったこと

  • del model
  • gc.collect()
  • K.clear_session()

などです。

大事なこと

わからないときはわからないです。

  • 有識者に聞く
  • エラーコードでググる(今回のケースだとエラーコードからだと難しいが)
  • どこで事故ってるのかを把握する

今回参考になったのは

TFのGitHubのissueとstackoverflowです。

Googleで「tf2.0 gpu not working」などと検索するとよくヒットしました。

 

以上です。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です