TensorFlow学习笔记2-性能分析工具

性能分析工具

  1. 在spyder中运行以下代码:
  1. import tensorflow as tf
  2. from tensorflow.python.client import timeline
  3. #构造计算图
  4. x = tf.random_normal([1000, 1000])
  5. y = tf.random_normal([1000, 1000])
  6. res = tf.matmul(x, y)
  7. #运行计算图, 同时进行跟踪
  8. with tf.Session() as sess:
  9. run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
  10. run_metadata = tf.RunMetadata()
  11. sess.run(res, options=run_options, run_metadata=run_metadata)
  12. #创建Timeline对象,并将其写入到一个json文件
  13. tl = timeline.Timeline(run_metadata.step_stats)
  14. ctf = tl.generate_chrome_trace_format()
  15. with open('timeline.json', 'w') as f:
  16. f.write(ctf)

使用with tf.Session() as sess进行处理,运算完成后会自动关闭session,不需要再显示地sess.close()

上述代码将session的运行情况写入到timeline.json文件。

注意:如果上述代码在spyder中报错,报错内容为 Couldn't open CUDA library cupti64_92.dll

解决办法: 用everything搜索cupti64_92.dll,并把它复制到你的CUDA环境变量对应的目录:如\CUDA\v9.2\bin\cupti64_92.dll

  1. 打开你的源文件路径,可以看到已经有了timeline.json文件。在chrome浏览器中打开chrome://tracing/,然后load上述timeline.json文件,可以看到时序图。

  1. 进行分析:

左下角的Args中:

  • name:输出tensor
  • op:运算
  • input0:输入tensor

以pid 3为例,是GPU:0的进程:点击NoOp,这意味着没有Op操作;然后是Const操作,它没有输入,输出是random_normal/shape;然后RandomStandardNormal操作,它输入是random_normal/shape,输出是random_normal/RandomStandardNormal;紧接着仍然是RandomStandardNormal操作,它输入也是random_normal/shape,输出是random_normal_1/RandomStandardNormal;最后是MatMul操作,输入是random_normal/RandomStandardNormalrandom_normal_1/RandomStandardNormal,输出是MatMul

  1. 指派设备

上述代码是默认指派到gpu0进行运算的,你也可以用with tf.device('/cpu:0')将运算指派到你想要的设备:例如,你可以将上述代码更改为:

  1. import tensorflow as tf
  2. from tensorflow.python.client import timeline
  3. #构造计算图
  4. with tf.device('/cpu:0'):
  5. x = tf.random_normal([1000, 1000])
  6. y = tf.random_normal([1000, 1000])
  7. res = tf.matmul(x, y)
  8. #运行计算图, 同时进行跟踪
  9. with tf.Session() as sess:
  10. run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
  11. run_metadata = tf.RunMetadata()
  12. sess.run(res, options=run_options, run_metadata=run_metadata)
  13. #创建Timeline对象,并将其写入到一个json文件
  14. tl = timeline.Timeline(run_metadata.step_stats)
  15. ctf = tl.generate_chrome_trace_format()
  16. with open('timeline.json', 'w') as f:
  17. f.write(ctf)

在浏览器中打开timeline.json后,可以看到

  • 常量的生成,随机矩阵的创建是在CPU进行运算;
  • 将两个随机矩阵内存搬运到GPU(MEMCPYHtoD);
  • 在GPU上进行MatMul运算;
  • 将GPU的运算结果搬回CPU(MEMCPYDtoH)。

警告

当你每次调用 sess.run 时,一定要确保好,不要设置 FULL_TRACE,否则会降低训练的速度。可以每100-1k 次训练设置1次FULL_TRACE.

TensorFlow学习笔记2-性能分析工具的更多相关文章

  1. 「功能笔记」性能分析工具gprof使用笔记

    根据网上信息整理所成. 功能与优劣 gprof实际上只是一个用于读取profile结果文件的工具.gprof采用混合方法来收集程序的统计信息,它使用检测方法,在编译过程中在函数入口处插入计数器用于收集 ...

  2. Linux 性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  3. TensorFlow学习笔记0-安装TensorFlow环境

    TensorFlow学习笔记0-安装TensorFlow环境 作者: YunYuan 转载请注明来源,谢谢! 写在前面 系统: Windows Enterprise 10 x64 CPU:Intel( ...

  4. 性能分析工具-PerfView

    Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...

  5. 老李分享:《Java Performance》笔记1——性能分析基础 1

    老李分享:<Java Performance>笔记1——性能分析基础   1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. ...

  6. 系统级性能分析工具perf的介绍与使用[转]

    测试环境:Ubuntu16.04(在VMWare虚拟机使用perf top存在无法显示问题) Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance pro ...

  7. [转]Linux性能分析工具汇总合集

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面.如果没有完善的计算机系统知识,网络知识和操作系统知识, ...

  8. 超全整理!Linux性能分析工具汇总合集

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  9. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

随机推荐

  1. Python 特性?

    1.Python 是强语言类型还是弱语言类型? Python 是强类型的动态脚本语言.强类型:不允许不同类型相加.动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候.脚本语言: ...

  2. JS相比TS的缺点(或TS的优点)

    JS只有在运行时,才会抛出错误, JS里有任何的拼写错误 都不会提示错误 JS运行时报的错,指向也未必是错误的源头,也就是说:A类里因为书写代码有误,会造成运行时其他的类报错如B JS无法做到不同pa ...

  3. IDEA错误: 找不到或无法加载主类 com.xxx.freight.dofreight.doFreight解决办法

    1.右键点击工程,选择open Module Settings或点击File选择Project Structure,进入页面 2.选择Artifacts->JAR->From module ...

  4. java反射, 不看你可别后悔

    开发中, 难免遇到些私有的属性和方法, 就好比下面的实体一样, 我们该怎么获得她, 并玩弄于手掌呢? 我们先来个实体瞧瞧, 给你个对象你也new不了, hahaha- 单身wang public cl ...

  5. UDP千兆光通信(一)、整体认知与概述

    前几天看到群里的一个前辈说FPGA的入门就是搭建一个完整的以太网通信平台,颇有感触,就在博客平台上搭建一个以太网平台,包含多个模块,先整体驯熟一下实现的功能,再分别叙述各个模块的功能与实现. 整体功能 ...

  6. c# 实现ComboBox自动模糊匹配

    ComboBox自带有属性可以实现自动匹配,但是它有一个弊端,只能从头开始匹配,例如"李四LS",只能输入“李四”或"李"才能匹配出来,而输入"LS& ...

  7. JavaScript数组增删方法总结

    数组是JavaScript中常见的一个对象,在这篇文章中主要整理数组增删改查方面的相关操作方法. 首先我们创建一个数组 添加元素: push(elment) 从后面添加元素,返回数组的长度   uns ...

  8. web开发中SESSION的本质

    有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...

  9. Linux 实操(root密码重置 无法上网 安装xrdp)

    一个是显示器显示不咋地,一个是想远程连接Linux,这样就可以放到下面机房去了.所以想安装一个远程桌面链接.从网上搜了搜,好多.安装的时候需要root权限,但是密码忘了.好吧,开始捣鼓root密码 按 ...

  10. selenium下拉一个框内的滚动条

    js='document.getElementsByClassName("route-tree")[0].scrollTop=10000'