2017-02-17 1 views
5

J'essaye de profiler l'utilisation de TensorFlow de calcul/mémoire et ai trouvé que tfprof est un outil juste pour mon but. Cependant, je n'ai pas pu obtenir FLOPS de tous les opérateurs.Profilage TensorFlow en utilisant tfprof

Voici ce que je faisais suivant le tutoriel tfprof utilisant tutoriel cifar10 dans le référentiel tensorflow (tensorflow/modèles/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) 

Et le résultat est

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========================== 

Cependant, le résultat ne contient pas tous les ops tels que max pooling, relu, gradient de couches de conv. Peut-être que les statistiques des flops de ces ops ne sont pas définies (RegisterStatistics ('flops')). Par conséquent, pour fournir des informations d'exécution, comme dans le tutoriel tfprof 11), j'ai essayé de créer OpLog (Voir le code ci-dessus).

Cependant, je ne suis pas sûr comment puis-je ajouter des informations op (Comment puis-je obtenir le nom d'entrée des opérations?). Y at-il un moyen d'ajouter ALL ops il contient?

Ou tout autre outil plutôt que tfprof? Peut-être outil de profilage de NVIDIA?

Répondre

2

Vous avez raison de dire que les autres ops n'ont pas de flops avant d'avoir RegisterStatistics ('flops'). Vous êtes invités à contribuer.

Je ne suis pas sûr si NVIDA a des outils pour cela.

+0

Pour ces opérations, même OpLog et runtime_meta ne fournissent pas de statistiques de flops? – enc