2016-06-10 10 views
8

Bitte entschuldigen Sie die Breite dieser Frage. Vielleicht kann ich, wenn ich mehr weiß, vielleicht genauer fragen.tensorflow Code-Optimierung Strategie

Ich habe leistungsempfindliche Stück Tensorflow-Code. Aus der Perspektive von jemandem, der wenig Ahnung von GPU-Programmierung hat, würde ich gerne wissen, welche Anleitungen oder Strategien ein "guter Startpunkt" für die Optimierung meines Codes wären. (Single gpu)

Vielleicht sogar eine Anzeige, wie lange auf jedem tensorflow op ausgegeben wurde, wäre schön ...

Ich habe eine vage Vorstellung, dass

  • Einige Operationen schneller gehen, wenn zugewiesen eine CPU statt eine GPU, aber es ist nicht klar, die
  • Es gibt ein Stück von Google-Software namens "EEG", die ich in einem
    Papier lesen, die eines Tages offen sein kann Quelle.

Es gibt auch andere gemeinsame Faktoren im Spiel sein kann, dass ich nicht bewusst bin ..

+0

ähnliche Ausgabe [hier] (http://stackoverflow.com/questions/36439483/how-to-get-the-time-consumed-to-execute-each- Knoten-in-Tensorfluss-Graph). Grundsätzlich übergeben Sie bestimmte Optionen an 'sess.run()' und verwenden ein TimeLine-Objekt –

+0

Ahh ein TimeLine-Objekt ... das ist ungefähr was ich für – user3391229

Antwort

17

ich den Zeitpunkt der Ausführung einer vollständigere Antwort darüber, wie Sie verwenden, um die Timeline Objekt geben wollte zu bekommen für jeden Knoten in der Grafik:

  • verwenden Sie ein klassisches sess.run() aber die Angabe Argumente options und run_metadata
  • Sie dann ein Timeline-Objekt mit erstellen die run_metadata.step_stats Daten

ist hier in Beispielcode:

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) 

Anschließend können Sie Google Chrome öffnen, chrome://tracing auf die Seite gehen und die timeline.json Datei laden. Sie sollen so etwas wie:

timeline

+0

Yup ging, das ist in der Tat wirklich praktisch. Stellen Sie sicher, dass Sie 'FULL_TRACE' nicht jedes Mal einstellen, wenn Sie' sess.run' aufrufen, oder Sie werden Ihr Training verlangsamen. Ich nenne es normalerweise alle 100-1k Schritte. – Nova