2017-02-17 15 views
5

私はTensorFlowの計算/メモリ使用量をプロファイルしようとしていて、tfprofが私の目的に適したツールであることがわかりました。しかし、私はすべての演算子のFLOPSを取得することができませんでした。tfprofを使用したTensorFlowのプロファイリング

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) 

、結果は

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========================== 
次のとおりです。ここで

は、私は(tensorflow /モデル/画像/ cifar10/cifar10_train.py)TensorFlowリポジトリにcifar10のチュートリアルを使用してtfprofチュートリアルを以下のなかったものです

しかし、結果には、max pooling、relu、convレイヤのグラディエントなど、すべてのopsが含まれているわけではありません。おそらく、これらのオペレーションのフロップスの統計情報は定義されていません(RegisterStatistics( 'flops'))。したがって、tfprofチュートリアル11)のようにランタイム情報を提供するために、OpLog(上のコードを参照)を作成しようとしました。

しかし、私はどのようにオペレーション情報を追加できますか(私はどのようにオペレーションのエントリ名を取得できますか?)。追加する方法はありますか?ALL opsには含まれていますか?

またはtfprofではなく他のツールですか?おそらくNVIDIAのプロファイリングツールですか?

答えて

2

あなたはRegisterStatistics( 'flops')を持たないうちに、他のオペルはフロップを持たないのが正しいです。貢献することは大歓迎です。

NVIDAにはツールがあるかどうかはわかりません。

+0

これらのオペレーションについては、OpLogおよびruntime_metaでさえもflops statを提供していませんか? – enc

関連する問題