使用tfprof分析TensorFlow

时间:2017-02-17 23:33:09

标签: tensorflow profiling gpu

我正在尝试分析TensorFlow的计算/内存使用情况,并发现tfprof对我来说是一个正确的工具。但是,我无法获得所有运营商的FLOPS。

以下是我使用TensorFlow存储库中的cifar10教程(tensorflow / models / image / cifar10 / cifar10_train.py)后的tfprof教程所做的事情:

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

但是,结果不包含所有ops,例如max pooling,relu,conv层的渐变。也许没有定义那些操作的翻转统计信息(RegisterStatistics('flops'))。因此,为了提供运行时信息,如tfprof教程11),我尝试创建OpLog(参见上面的代码)。

但是,我不知道如何添加操作信息(如何获取操作的条目名称?)。有没有办法添加它包含的 ALL 操作?

还是其他任何工具而不是tfprof?也许来自NVIDIA的分析工具?

1 个答案:

答案 0 :(得分:2)

你是对的,其他操作在没有RegisterStatistics('flops')之前没有翻牌。欢迎您的贡献。

我不确定NVIDA是否有适合它的工具。

相关问题