分析¶
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()函数。在交互式笔记本中运行,这会产生如下输出:
加速.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 中生成当前配置文件统计信息的可视化。目前这仅支持交互式笔记本