Kerasを使用してGPUでニューラルネットをトレーニングしようとしていますが、「リソースが使い果たされました:テンソル割り当て時のOOM」エラーが発生しています。割り当てようとしている特定のテンソルはそれほど大きくないので、以前のテンソルがほとんどすべてのVRAMを消費すると仮定します。エラーメッセージには、これを示唆するヒントが付属しています。
ヒント:OOMが発生したときに割り当てられたテンソルのリストを表示する場合は、report_tensor_allocations_upon_oomを現在の割り当て情報のRunOptionsに追加します。
それはいいように聞こえますが、どうすればいいですか? RunOptionsはTensorflowのように見えますが、それについて見つけることができる小さなドキュメントは「セッション」に関連付けられています。私はKerasを使用しているため、Tensorflowは抽象化レイヤーの下に隠され、そのセッションはその下の別のレイヤーの下に隠されています。
このオプションが有効になるように設定するために、すべての下を掘るにはどうすればよいですか?
見た目ほど難しくありませんが、知っておく必要があるのは、 documentation に従って、model.compile
に渡される** kwargsパラメーターがsession.run
に渡されることです。
次のようなことができます:
import tensorflow as tf
run_opts = tf.RunOptions(report_tensor_allocations_upon_oom = True)
model.compile(loss = "...", optimizer = "...", metrics = "..", options = run_opts)
また、session.run
が呼び出されるたびに直接渡す必要があります。
現在、model.compile
にオプションを追加することはできません。参照: https://github.com/tensorflow/tensorflow/issues/19911