2016-10-22 14 views
8

TensorFlow는 내 그래픽 카드에서 항상 사용 가능한 모든 메모리 (VRAM)를 할당합니다. 따라서 내 워크 스테이션에서 가능한 빨리 시뮬레이션을 실행하고 싶습니다.TensorFlow : GPU 메모리 (VRAM) 활용도를 기록하는 방법은 무엇입니까?

그러나 TensorFlow가 실제로 사용하는 메모리 양 (총계)을 기록하고 싶습니다. 또한 하나의 텐서가 얼마나 많은 메모리를 사용하는지 기록 할 수 있다면 정말 좋을 것입니다.

이 정보는 다른 ML/AI 아키텍처에서 필요로하는 메모리 크기를 측정하고 비교하는 데 중요합니다.

팁이 있습니까?

# maximum across all sessions and .run calls so far 
sess.run(tf.contrib.memory_stats.MaxBytesInUse()) 
# current usage 
sess.run(tf.contrib.memory_stats.BytesInUse()) 

은 또한 당신이 자세한 정보를 RunMetadata보고 run 통화 중 할당되는 모든 메모리를 포함하여 약 session.run 전화를받을 수 있습니다

답변

10

업데이트, 할당을 조회 할 수 TensorFlow 작전을 사용할 수 있습니다. 다음은이

run_metadata = tf.RunMetadata() 
sess.run(c, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE, output_partition_graphs=True), run_metadata=run_metadata) 

같은 IE 뭔가 엔드 - 투 - 엔드 예제 - 열 벡터, 행 벡터를 가지고 추가의 매트릭스 얻기 위해 추가 : 당신을 run.txt를 열면

import tensorflow as tf 

no_opt = tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L0, 
          do_common_subexpression_elimination=False, 
          do_function_inlining=False, 
          do_constant_folding=False) 
config = tf.ConfigProto(graph_options=tf.GraphOptions(optimizer_options=no_opt), 
         log_device_placement=True, allow_soft_placement=False, 
         device_count={"CPU": 3}, 
         inter_op_parallelism_threads=3, 
         intra_op_parallelism_threads=1) 
sess = tf.Session(config=config) 

with tf.device("cpu:0"): 
    a = tf.ones((13, 1)) 
with tf.device("cpu:1"): 
    b = tf.ones((1, 13)) 
with tf.device("cpu:2"): 
    c = a+b 

sess = tf.Session(config=config) 
run_metadata = tf.RunMetadata() 
sess.run(c, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE, output_partition_graphs=True), run_metadata=run_metadata) 
with open("/tmp/run2.txt", "w") as out: 
    out.write(str(run_metadata)) 

를 ' 당신이 ab은 52 바이트 각 (13 * 4) 할당 된 것을 볼 수 있습니다 그래서 여기

node_name: "ones" 

     allocation_description { 
     requested_bytes: 52 
     allocator_name: "cpu" 
     ptr: 4322108320 
     } 
    .... 

    node_name: "ones_1" 

     allocation_description { 
     requested_bytes: 52 
     allocator_name: "cpu" 
     ptr: 4322092992 
     } 
    ... 
    node_name: "add" 
     allocation_description { 
     requested_bytes: 676 
     allocator_name: "cpu" 
     ptr: 4492163840 

을, 그 결과는 676 바이트를 할당 : LL이 같은 메시지를 참조하십시오.

+0

전체 장치 할당을 캡처하는 편리한 방법이 있습니까? 이 말은 내 장치의 여유 메모리 중 어떤 부분이 할당되었는지를 의미합니다. –

+0

내가 아는 것은 아닙니다. 난 그냥 모든 할당 메시지를 추가하고 상세 로그에서 할당 취소 메시지를 뺀. 사용 사례가 –

+1

BTW이고, C++ API에 [이 호출] (https://github.com/tensorflow/tensorflow/blob/64edd34ce69b4a8033af5d217cb8894105297d8a/tensorflow/core/kernels/stack_ops.cc#)이 있으면 좋은 기능 요청 일 수 있습니다. L223). 할당 된 전체 메모리를 볼 수 있습니다. 그것은 파이썬에서 접근 할 수 있도록 포장되어 있지 않은 것 같습니다. 그것은 좋은 기능 추가가 될 것입니다. –

관련 문제