我正在尝试分析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的分析工具?
答案 0 :(得分:2)
你是对的,其他操作在没有RegisterStatistics('flops')之前没有翻牌。欢迎您的贡献。
我不确定NVIDA是否有适合它的工具。