2016-06-10 2 views
8

이 질문의 범위를 넓히십시오. 어쩌면 내가 더 많이 알게되면 좀 더 구체적으로 물을 수 있습니다.텐서 흐름 코드 최적화 전략

성능에 민감한 tensorflow 코드가 있습니다. GPU 프로그래밍에 대해 거의 알지 못하는 사람의 관점에서 볼 때, 어떤 가이드 또는 전략이 내 코드를 최적화하기위한 "좋은 출발점"이 될지 알고 싶습니다. (단일 GPU)

내가 할당 할 때

  • 어떤 작업을 더 빠르게하는 막연한 이해를 얼마나 오래하는 것은 좋은 것입니다 각 tensorflow 연산에 소요 된 심지어 판독 ... 아마도

    GPU가 아닌 CPU가 있지만 어느 것이 확실하지 않습니다.

  • 언젠가 오픈 소스 일 수있는
    종이에 대해 읽은 "EEG"라는 Google 소프트웨어가 있습니다.

또한 내가 알고 아니다 놀이에 다른 일반적인 요소가있을 수 있습니다 ..

+0

유사 문제 (http://stackoverflow.com/questions/36439483/how-to-get-the-time-consumed-to-execute-each- 노드 - 인 - 텐서 흐름 그래프). 기본적으로'sess.run()'에 특정 옵션을 전달하고 TimeLine 객체를 사용합니다. –

+0

Ahh TimeLine 객체 ... 대략 내가 무엇을하려고했는지 대략 – user3391229

답변

17

내가 실행 시간을 얻기 위해 타임 라인을 객체를 사용하는 방법에 대한보다 완전한 답변을주고 싶어 그래프의 각 노드에 대해 :

  • 당신이 sess.run() 고전하지만 지정하는 인수를 사용 optionsrun_metadata
  • 당신은 다음과 타임 라인 객체를 생성 run_metadata.step_stats 데이터

다음은 예제 코드입니다 :

import tensorflow as tf 
from tensorflow.python.client import timeline 

x = tf.random_normal([1000, 1000]) 
y = tf.random_normal([1000, 1000]) 
res = tf.matmul(x, y) 

# Run the graph with full trace option 
with tf.Session() as sess: 
    run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE) 
    run_metadata = tf.RunMetadata() 
    sess.run(res, options=run_options, run_metadata=run_metadata) 

    # Create the Timeline object, and write it to a json 
    tl = timeline.Timeline(run_metadata.step_stats) 
    ctf = tl.generate_chrome_trace_format() 
    with open('timeline.json', 'w') as f: 
     f.write(ctf) 

그런 다음 구글 크롬을 열 수, 페이지 chrome://tracing로 이동하여 timeline.json 파일을로드합니다. 당신이해야 같은 : [여기]

timeline

+0

그래, 정말 참으로 편리합니다. 'sess.run'을 호출 할 때마다'FULL_TRACE'를 설정하지 말고 훈련을 늦추십시오. 나는 보통 100-1k 걸음마다 호출한다. – Nova

관련 문제