web-dev-qa-db-ja.com

TensorFlowが使用しているGPUメモリの量を判断する方法はありますか?

Tensorflowは、GPUで使用可能なメモリ全体を事前に割り当てる傾向があります。デバッグのために、実際に使用されているメモリの量を知る方法はありますか?

17
Maarten

(1) Timeline でのメモリ割り当てのロギングのサポートには制限があります。その使用例は次のとおりです。

    run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
    run_metadata = tf.RunMetadata()
    summary, _ = sess.run([merged, train_step],
                          feed_dict=feed_dict(True),
                          options=run_options,
                          run_metadata=run_metadata)
    train_writer.add_run_metadata(run_metadata, 'step%03d' % i)
    train_writer.add_summary(summary, i)
    print('Adding run metadata for', i)
    tl = timeline.Timeline(run_metadata.step_stats)
    print(tl.generate_chrome_trace_format(show_memory=True))
    trace_file = tf.gfile.Open(name='timeline', mode='w')
    trace_file.write(tl.generate_chrome_trace_format(show_memory=True))

このコードは、MNISTの例( mnist with summaries )で試してみることができます。

これにより、timelineという名前のトレースファイルが生成され、chrome:// tracingで開くことができます。これは、おおよそのGPUメモリ使用統計のみを提供することに注意してください。基本的にGPUの実行をシミュレートしましたが、完全なグラフメタデータにはアクセスできません。また、GPUにいくつの変数が割り当てられているかもわかりません。

(2)GPUメモリ使用量の非常に大まかな測定のために、nvidia-smiはコマンド実行時のデバイスのメモリ使用量の合計を表示します。

nvprofは、CUDAカーネルレベルでオンチップ共有メモリ使用量とレジスタ使用量を表示できますが、グローバル/デバイスメモリ使用量は表示しません。

コマンドの例を次に示します。nvprof --print-gpu-trace matrixMul

詳細はこちら: http://docs.nvidia.com/cuda/profiler-users-guide/#abstract

10
Yao Zhang

TensorFlowプロファイラーは、実際のGPUメモリアロケーター情報に基づいたメモリタイムラインを改善しました https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/profiler#visualize-time-and-memory

3
Peter

これに役立つtensorflow.contrib.memory_statsのコードがいくつかあります。

from tensorflow.contrib.memory_stats.python.ops.memory_stats_ops import BytesInUse
with tf.device('/device:GPU:0'):  # Replace with device you are interested in
  bytes_in_use = BytesInUse()
with tf.Session() as sess:
  print(sess.run(bytes_in_use))
2
Steve

ここに私にとってうまくいった実用的な解決策があります:

TFセッション構成を使用してGPUメモリの事前割り当てを無効にします。

config = tf.ConfigProto()  
config.gpu_options.allow_growth=True  
sess = tf.Session(config=config)  

nvidia-smi -l(またはその他のユーティリティ)を実行して、GPUメモリ消費を監視します。

予期しないGPUメモリ消費が表示されるまで、デバッガーでコードをステップ実行します。

2
eitanrich