来自:http://deeplearning.net/software/theano/tutorial/profiling.html

Profiling Theano function

note:该方法是用来代替旧的ProfileMode.不要再使用ProfileMode了。

在检查错误的同时,另一个重要的任务就是剖析你的代码。你会用到theano 的flags 或者参数,然后将它们传递给 theano.function

最简单的剖析theano函数的方式就是使用下面介绍的theano flags。当进程存在的时候,它们会将信息输出到stdout(标准输出流)。

使用 ProfileMode 是一个三步过程

开启这个分析器是很简单的,只需要用到 flag config.profile.

确保内存分析器用到theano 的flag: config.profile_memory 和 config.profile.

为了能够在theano优化的时候进行分析,使用theano 的flag: config.profile_optimizer 和 config.profile.

你可以使用theano 的flags profiling.n_applyprofiling.n_ops 和profiling.min_memory_size 来修改打印信息的数量。

分析器会对每个theano函数进行分析,而且会分析打印出的分析的总和。每个分析包含4个部分:全局信息,类信息,ops信息和apply节点信息。

在全局部分, “Message” 就是theano函数的名称, theano.function() 有一个可选的参数 name 而这个默认是为None。对name进行有意义的赋值有助于你分析许多theano函数
。在这个部分中,我们同样看到函数调用的次数和在所有这些调用上花费的总的时间。花费在Function.fn.__call__ 上和在块中的时间分析有助于理解theano的开销。

同样的,我们看到在编译过程的两个阶段上时间的花费:优化(修改graph使得能够更加的稳定/快速) 和链接(编译c 代码并可以被python调用).

类,ops和apply节点部分有着相同的信息:关于运行的apply节点的信息。ops部分会从apply部分得到有用的信息然后融合那些有着相同op的apply节点。如果在graph中两个apply节点有着两个相同的ops,那么它们会被融合。一些节点比如逐元素,如果它们的参数不同的话(被执行的标量),就不相等了。 所以类部分会比ops部分融合更多的apply节点。

这里就是一个当我们禁用某些theano优化来更加直观清晰的理解不同的部分之间的差异的一个例子。在当所有的优化都启用的时候,那么在graph中就只剩下一个op了。

note:

为了剖析在gpu上内存使用的高峰情况,你需要:

* 在文件中 theano/sandbox/cuda/cuda_ndarray.cu, 设置宏
COMPUTE_GPU_MEM_USED to 1.
* 然后调用 theano.sandbox.cuda.theano_allocated()
它返回一个有着2个int值的元组.第一个值就是指示当前的gpu分配给theano的内存;第二个就是theano占用gpu内存使用的峰值。

不要总是开启这个宏,这会减慢内存分配和释放。而且还会减慢计算速度,所以会影响到速度分析。所以不要在这些情况下开启这个。

运行这个例子:

THEANO_FLAGS=optimizer_excluding=fusion:inplace,profile=True python doc/tutorial/profiling_example.py

输出:

Function profiling
==================
Message: None
Time in 1 calls to Function.__call__: 5.698204e-05s
Time in Function.fn.__call__: 1.192093e-05s (20.921%)
Time in thunks: 6.198883e-06s (10.879%)
Total compile time: 3.642474e+00s
Theano Optimizer time: 7.326508e-02s
Theano validate time: 3.712177e-04s
Theano Linker time (includes C, CUDA code generation/compiling): 9.584920e-01s Class
---
<% time> <sum %> <apply time> <time per call> <type> <#call> <#apply> <Class name>
100.0% 100.0% 0.000s 2.07e-06s C 3 3 <class 'theano.tensor.elemwise.Elemwise'>
... (remaining 0 Classes account for 0.00%(0.00s) of the runtime) Ops
---
<% time> <sum %> <apply time> <time per call> <type> <#call> <#apply> <Op name>
65.4% 65.4% 0.000s 2.03e-06s C 2 2 Elemwise{add,no_inplace}
34.6% 100.0% 0.000s 2.15e-06s C 1 1 Elemwise{mul,no_inplace}
... (remaining 0 Ops account for 0.00%(0.00s) of the runtime) Apply
------
<% time> <sum %> <apply time> <time per call> <#call> <id> <Apply name>
50.0% 50.0% 0.000s 3.10e-06s 1 0 Elemwise{add,no_inplace}(x, y)
34.6% 84.6% 0.000s 2.15e-06s 1 2 Elemwise{mul,no_inplace}(TensorConstant{(1,) of 2.0}, Elemwise{add,no_inplace}.0)
15.4% 100.0% 0.000s 9.54e-07s 1 1 Elemwise{add,no_inplace}(Elemwise{add,no_inplace}.0, z)
... (remaining 0 Apply instances account for 0.00%(0.00s) of the runtime)

参考资料:

[1]官网:http://deeplearning.net/software/theano/tutorial/profiling.html

Theano2.1.17-基础知识之剖析theano的函数的更多相关文章

  1. Greenplum入门——基础知识、安装、常用函数

    Greenplum入门——基础知识.安装.常用函数 2017年10月08日 22:03:09 在咖啡里溺水的鱼 阅读数:8709    版权声明:本文为博主原创,允许非商业性质转载但请注明原作者和出处 ...

  2. [SQL] SQL 基础知识梳理(六)- 函数、谓词、CASE 表达式

    SQL 基础知识梳理(六)-  函数.谓词.CASE 表达式 目录 函数 谓词 CASE 表达式 一.函数 1.函数:输入某一值得到相应输出结果的功能,输入值称为“参数”,输出值称为“返回值”. 2. ...

  3. python基础-基础知识考试_day5 (包括:函数_递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, '', [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有数的和, ...

  4. go基础知识之变量,类型,常量,函数

    3 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值.在 Go 中,有多种语法用于声明变量. 声明单个变量 var name type 是声 ...

  5. oracle 基础知识(四)常用函数

    SQL中的单记录函数 .ASCII 返回与指定的字符对应的十进制数; SQL') zero,ascii(' ') space from dual; A A ZERO SPACE --------- - ...

  6. 【Python】【基础知识】【内置函数】【print的使用方法】

    原英文帮助文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text ...

  7. 【Python】【基础知识】【内置函数】【input的使用方法】

    原英文帮助文档: input([prompt]) If the prompt argument is present, it is written to standard output without ...

  8. php基础知识(三)---常用函数--2017-04-16

    常用函数如下:(红色为重点) 1.取字符串的长度 echo strlen("hello"); 2.echo strcmp("字符串1","字符串2&q ...

  9. python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器

    阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...

随机推荐

  1. android + red5 + rtmp

    背景:在已有的red5服务器环境下实现android客户端的视频直播 要实现客户端视频直播就先先对服务器端有所了解 Red5流媒体服务器是Adboe的产品,免费并且是开源的,与Flash搭配的时候可谓 ...

  2. 按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    int[]x=new int [50]; char[][]y=new char[10][10]; int j=1,w=0; for(int i=0;i<50;i++) { x[i]=j; j+= ...

  3. jQuery简单入门(四)

    4.表单应用 表单是HTML的重要组成部分,在采集.提交用户输入的信息和显示列表数据等需求中有重要作用 表单应用 一个简单的表单HTML示例: <form action=”url” method ...

  4. 解决SecureCRT中文编码乱码

    1.mysql表和列都已经设置UTF-8了,然后还是不能输入中文和中文显示乱码. 2.在SecureCRT下: 执行英文设置:export LANG=zh_CN.UTF-8后不能直接输入中文. 然后执 ...

  5. KVM 介绍(1):简介及安装

    学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...

  6. python log

    python的日志模块为logging,它可以将我们想要的信息输出保存到一个日志文件中. # cat log import logging logging.debug('This is debug m ...

  7. 【CSS】理解CSS

    CSS(Cascading Style Sheet,层叠样式表),及其精巧且富有表达力,开发者可以用最为高效的方式高度掌控网页内容的表示. 1. 盒模型 CSS中的一个基本概念是盒模型(box mod ...

  8. C#迭代重载等

    迭代器 迭代器是作为一个容器,将要遍历的数据放入,通过统一的接口返回相同类型的值 迭代器代码使用 yield return 语句依次返回每个元素.yield break 将终止迭代 类中实现多个迭代器 ...

  9. UESTC 395 Dynamic Query System --Treap

    题意:让你维护一个集合,有8种操作: 1.  I x  插入一个数 2.  R x 删除x 3.  S 输出总的数个数(集合大小) 4.  L x  查询小于x的数的个数 5.  W k  查询集合中 ...

  10. 常用的SQL 语句

    一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ...