2017-02-17 8 views
5

Ich versuche Profil Berechnung/Speichernutzung von TensorFlow und festgestellt, dass tfprof ein richtiges Werkzeug für meinen Zweck ist. Ich war jedoch nicht in der Lage, FLOPS aller Betreiber zu bekommen. HierProfilerstellung TensorFlow mit tfprof

ist, was ich tat nach dem tfprof Tutorial cifar10 Tutorial mit in TensorFlow Repository (tensorflow/models/image/cifar10/cifar10_train.py):

run_metadata = tf.RunMetadata() 

_, loss_value = sess.run([train_op, loss], 
     options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE), 
     run_metadata=run_metadata) 

op_log = tfprof_log_pb2.OpLog() 

// TODO: add op information 

tf.contrib.tfprof.tfprof_logger.write_op_log(
     tf.get_default_graph(), 
     log_dir="/tmp/log_dir", 
     op_log=op_log, 
     run_meta=run_metadata) 

tf.contrib.tfprof.model_analyzer.print_model_analysis(
     tf.get_default_graph(), 
     run_metadata=run_metadata, 
     op_log=op_log, 
     tfprof_options=tf.contrib.tfprof.model_analyzer.FLOAT_OPS_OPTIONS) 

Und das Ergebnis ist

Parsing GraphDef... 
Parsing RunMetadata... 
Parsing OpLog... 
Preparing Views... 

=========================Options============================= 
-max_depth     10000 
-min_bytes     0 
-min_micros     0 
-min_params     0 
-min_float_ops    1 
-device_regexes    .* 
-order_by     float_ops 
-account_type_regexes  .* 
-start_name_regexes   .* 
-trim_name_regexes 
-show_name_regexes   .* 
-hide_name_regexes 
-account_displayed_op_only true 
-select      float_ops 
-viz      false 
-dump_to_file 

==================Model Analysis Report====================== 
_TFProfRoot (0/5.23b flops) 
    conv2/Conv2D (3.77b/3.77b flops) 
    conv1/Conv2D (707.79m/707.79m flops) 
    gradients/local3/MatMul_grad/MatMul (226.49m/226.49m flops) 
    gradients/local3/MatMul_grad/MatMul_1 (226.49m/226.49m flops) 
    local3/MatMul (226.49m/226.49m flops) 
    gradients/local4/MatMul_grad/MatMul (18.87m/18.87m flops) 
    gradients/local4/MatMul_grad/MatMul_1 (18.87m/18.87m flops) 
    local4/MatMul (18.87m/18.87m flops) 
    conv1/BiasAdd (4.72m/4.72m flops) 
    conv2/BiasAdd (1.18m/1.18m flops) 
    gradients/softmax_linear/MatMul_grad/MatMul (491.52k/491.52k flops) 
    gradients/softmax_linear/MatMul_grad/MatMul_1 (491.52k/491.52k flops) 
    softmax_linear/MatMul (491.52k/491.52k flops) 

======================End of Report========================== 

Das Ergebnis enthält jedoch nicht alle Ops wie Max Pooling, Reload, Gradient der Conv-Schichten. Vielleicht sind Flops-Statistiken dieser Ops nicht definiert (RegisterStatistics ('Flops')). Um Runtime-Informationen zur Verfügung zu stellen, wie in der tfprof-Einführung 11), habe ich daher versucht, OpLog zu erstellen (siehe Code oben).

Allerdings bin ich mir nicht sicher, wie kann ich Op-Informationen hinzufügen (Wie kann ich Eintrag Name der Ops bekommen?). Gibt es eine Möglichkeit, ALL ops es enthält hinzuzufügen?

Oder ein anderes Tool als tfprof? Vielleicht Profiling-Tool von NVIDIA?

Antwort

2

Sie haben recht, dass die anderen Ops keine Flops haben, bevor sie RegisterStatistics ("Flops") haben. Sie können gerne dazu beitragen.

Ich bin mir nicht sicher, ob NVIDA Tools dafür hat.

+0

Für diese ops, sogar OpLog und runtime_meta bietet keine Flops stat? – enc

Verwandte Themen