如何使用timeline profile tensorflow 程序
2017-08-26 15:40
316 查看
和其他的程序一样,tensorflow也有两类问题
* 功能问题:这类问题适合用tfdbg来调试,如果问题出在graph之外,那么就是一个简单的python程序了,直接上pdb, 或者打log
* 性能问题:这类使用timeline, 同样如果是graph之外,那么使用cPrfile, line_profile就好了。
生成Trace
写入Trace到JSON文件
第一次run的trace会有一样不一样,第一次的时候大概是这样的,所以建议使用100次以后的RunMeataDatade。
JSON文件里面只包含一次的结果, 如果需要合并多次的结果,可以参考这个解决方案tensorflow_profiling
因为运行 lin_profiler 是使用的这个命令,这个命令是把你的py文件作为一个模块加载的,但是很多tensorflow 都包含这样的代码, 我采取的方法是不使用 tf.app 的所有功能。这样的话 line_profiler可以正常使用,但是略显麻烦,后续发现了更好的方法再更新。
* 功能问题:这类问题适合用tfdbg来调试,如果问题出在graph之外,那么就是一个简单的python程序了,直接上pdb, 或者打log
* 性能问题:这类使用timeline, 同样如果是graph之外,那么使用cPrfile, line_profile就好了。
如何添加代码
生成RunMetaDatarun_metadata = tf.RunMetadata() _, l, lr, predictions = sess.run( [optimizer, loss, learning_rate, train_prediction], feed_dict=feed_dict, options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE), run_metadata=run_metadata)
生成Trace
from tensorflow.python.client import timeline trace = timeline.Timeline(step_stats=run_metadata.step_stats)
写入Trace到JSON文件
trace_file = open('timeline.ctf.json', 'w') trace_file.write(trace.generate_chrome_trace_format())
如何查看结果
打开chrome, 进到这个页面: chrome://tracing, 然后load刚刚生成的JSON文件就可以了。效果如下需要注意的地方
你需要把这个库文件libcupti.so所处的路径放入到 LD_LIBRARY_PATH环境变量里面才能使用这个功能。一般情况下这个文件在这个目录:
/usr/local/cuda/extras/lib64. 如果没有使用这个命令安装
sudo apt-get install libcupti-dev
第一次run的trace会有一样不一样,第一次的时候大概是这样的,所以建议使用100次以后的RunMeataDatade。
JSON文件里面只包含一次的结果, 如果需要合并多次的结果,可以参考这个解决方案tensorflow_profiling
配合line_profiler使用需要注意的地方
有时候我们会怀疑其实耗时间的代码是在graph之外,那么这个时候可以直接使用传统的python方法了,我习惯使用line_profiler分析每行代码消耗的时候,这里有一个地方需要注意:因为运行 lin_profiler 是使用的这个命令,这个命令是把你的py文件作为一个模块加载的,但是很多tensorflow 都包含这样的代码, 我采取的方法是不使用 tf.app 的所有功能。这样的话 line_profiler可以正常使用,但是略显麻烦,后续发现了更好的方法再更新。
if __name__ == '__main__': tf.app.run()
代码
我学习这个功能写的代码放在这里profile_tensorflow相关文章推荐
- 如何使用profile工具来解决程序中的瓶颈 --linux篇
- Windows下如何使用Tensorflow Object Detection API
- 如何使用 gcc 编译程序
- 如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 如何使用Java读取串口的程序
- 如何使用Junit编写和组织测试程序
- 如何使用Junit编写和组织测试程序
- 如何使用InstallShield8.0制作自己的安装程序
- 教您如何使用EclipseME开发J2ME程序
- 如何在Windows XP中使用16位的程序
- 使用profile来得到程序运行信息
- 如何使用 SUS 执行修补程序管理
- 如何使用Visual C++调试程序?【转贴】
- [转]教您如何使用EclipseME开发J2ME程序(1)
- 如何使用InstallShield X Express 部署.Net WinForm程序
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- More Effective C++ Item M34:如何在同一程序中混合使用C++和C
- 如何使用java程序界面上的按钮启动外部的exe程序
- 如何使用 VB 编写自动反安装的程序?
- TPC基准程序及tpmc值-兼谈在使用性能度量时如何避免误区[转载]