分析

Python 标准库包括分析代码的功能。在这种模式下,函数调用和在其中花费的时间都会被记录下来。所述accelerate.profiler 模块还通过记录该功能的签名,作为常精确的控制流(并因此功能性能)取决于参数类型,这是有用扩展了该功能。对于 numpy 数组类型,这不仅包括 dtype 属性,还包括数组的形状。为了证明这一点,让我们定义一个简单的点函数并对其进行分析,无需签名,以匹配 Python 标准库分析模块的行为。

 加速 导入 分析器

def  dot ( a ,  b ): 
  sum = 0 
  for  i  in  range ( len ( a )): 
      sum  +=  a [ i ] * b [ i ] 
  return  sum

a  =  np arange ( 16 ,  dtype = np . float32 ) 
b  =  np . arange ( 16 ,  dtype = np . float32 )

p  = 探查器个人资料签名=
p 启用()
( a ,  b ) 
p 禁用() 
p 打印统计()

这将生成如下输出:

      0.000 秒内调用 3 次函数

订购者:标准名称

ncalls tottime percall cumtime percall filename:lineno(function)
     1 0.000 0.000 0.000 0.000 builtins.len
     1 0.000 0.000 0.000 0.000 dot.py:7(dot)
     1 0.000 0.000 0.000 0.000 {“prof.Profiler”对象的“禁用”方法}

但是,默认情况下Profile构造函数的签名标志设置为True,从而产生以下输出:

      0.000 秒内 3 次函数调用(2 次原始调用)

订购者:标准名称

ncalls tottime percall cumtime percall filename:lineno(function)
     1 0.000 0.000 0.000 0.000 dot.py:1(disable())
   2/1 0.000 0.000 0.000 0.000 dot.py:7(dot(a:ndarray(dtype=float32, shape=(16,)), b:ndarray(dtype=float32, shape=(16,))))

对于更真实的代码,调用图(以及函数调用表)显然要大得多,因此以表格形式处理数据不是很方便。因此,Accelerator.profiler模块还提供了可视化数据的功能。而不是调用的print_stats()方法中,我们可以调用accelerate.profiler.plot()函数。在交互式笔记本中运行,这会产生如下输出:

../_images/profiling.png

加速.profiler API

accelerate.profiler.Profile( custom_timer=None , time_unit=None , subcalls=True , builtins =True , signatures=True )

使用指定的计时器函数构建探查器对象。默认计时器是基于实时的快速内置计时器。对于返回整数的自定义计时器函数,time_unit 可以是指定比例的浮点数(即每个整数单位的长度,以秒为单位)。

clear( )

清除迄今为止收集的所有分析信息。

disable( )

停止收集分析信息。

enable( subcalls=True , builtins= True )

开始收集分析信息。如果 'subcalls' 为 True,还记录每个函数的统计信息,根据其当前调用者分开。如果 'builtins' 为 True,则记录在内置函数中花费的时间与其调用者分开。

getstats( ) → profiler_entry 对象列表

返回分析器收集的所有信息。每个 profiler_entry 都是一个类似元组的对象,具有以下属性:

代码 代码对象 callcount 这个被调用多少次 reccallcount 有多少次递归调用 totaltime 这个条目中的总时间 inlinetime 这个条目中的内联时间(不是在子调用中)调用的细节

call 属性要么是 None 要么是一个 profiler_subentry 对象列表:

代码调用代码对象 callcount 这个被调用多少次 reccallcount 这个被递归调用多少次 totaltime 在这个调用中花费的总时间 inlinetime 内联时间(不在进一步的子调用中)
print_stats(排序=-1 )

打印带有配置文件统计信息的表格。

accelerate.profiler.plot(探查器)

profiler 中生成当前配置文件统计信息的可视化。目前这仅支持交互式笔记本