如何使用timeline profile tensorflow 程序

和其他的程序一样,tensorflow也有两类问题
* 功能问题:这类问题适合用tfdbg来调试,如果问题出在graph之外,那么就是一个简单的python程序了,直接上pdb, 或者打log
* 性能问题:这类使用timeline, 同样如果是graph之外,那么使用cPrfile, line_profile就好了。

如何添加代码

  • 生成RunMetaData
run_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

FullCalendar是一个功能强大的日历插件,可以用于在网页上创建和管理日程安排。它支持多种视图,包括timeline view(时间轴视图)。 要在FullCalendar中使用timeline view,你需要引入相应的插件文件。首先,确保你已经包含了FullCalendar的核心文件和样式表。然后,按照以下步骤进行操作: 1. 下载并引入Timeline插件文件: 你可以从FullCalendar的官方网站或GitHub仓库下载Timeline插件文件。将`timeline.js`和`timeline.css`文件复制到你的项目中,并在HTML页面中引入这些文件。 ```html <link rel="stylesheet" href="path/to/timeline.css"> <script src="path/to/timeline.js"></script> ``` 2. 创建日历容器: 在HTML页面中创建一个容器来显示日历。例如,你可以在一个`<div>`元素中添加一个ID作为容器的标识符。 ```html <div id="calendar"></div> ``` 3. 初始化FullCalendar: 在JavaScript代码中,使用FullCalendar的初始化函数来创建一个日历实例,并指定视图为timeline view。 ```javascript document.addEventListener('DOMContentLoaded', function() { var calendarEl = document.getElementById('calendar'); var calendar = new FullCalendar.Calendar(calendarEl, { plugins: ['timeline'], initialView: 'timelineWeek', // 设置初始视图为timeline view // 其他配置选项... }); calendar.render(); }); ``` 4. 配置和自定义: 你可以根据需要进一步配置和自定义timeline view。例如,你可以设置视图的日期范围、时间间隔、显示的事件等。具体的配置选项可以参考FullCalendar的文档。 ```javascript var calendar = new FullCalendar.Calendar(calendarEl, { plugins: ['timeline'], initialView: 'timelineWeek', views: { timelineWeek: { slotDuration: '00:30', // 时间间隔为30分钟 slotLabelInterval: '01:00', // 每小时显示一次时间标签 slotMinTime: '08:00:00', // 最早时间为8点 slotMaxTime: '18:00:00', // 最晚时间为18点 } }, // 其他配置选项... }); ``` 这样,你就可以使用FullCalendar的timeline view来显示时间轴视图了。根据你的需求,你还可以进一步自定义和扩展这个日历插件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值