本文简要介绍python语言中 torch.utils.benchmark.Timer
的用法。
用法:
class torch.utils.benchmark.Timer(stmt='pass', setup='pass', global_setup='', timer=<built-in function perf_counter>, globals=None, label=None, sub_label=None, description=None, env=None, num_threads=1, language=<Language.PYTHON: 0>)
stmt-要在循环中运行并定时的代码片段。
setup-可选设置代码。用于定义
stmt
中使用的变量global_setup-(仅限 C++)放置在文件顶层的代码,例如
#include
语句。timer-可调用返回当前时间。如果 PyTorch 是在没有 CUDA 的情况下构建的或者不存在 GPU,则默认为
timeit.default_timer
;否则它会在测量时间之前同步 CUDA。globals-当
stmt
被执行时定义全局变量的字典。这是提供stmt
需要的变量的另一种方法。label-总结
stmt
的字符串。例如,如果stmt
是“torch.nn.functional.relu(torch.add(x, 1, out=out))”,则可以将标签设置为“ReLU(x + 1)”以提高可读性。sub_label-
提供补充信息,以消除具有相同 stmt 或标签的测量结果的歧义。例如,在上面的示例中,sub_label可能是“float”或“int”,这样很容易区分:“ReLU(x + 1): (float)”
使用
Compare
打印测量值或汇总时的“ReLU(x + 1): (int)”。description-
用于区分具有相同标签和sub_label 的测量值的字符串。
description
的主要用途是向Compare
发送数据列。例如,可以根据输入大小设置它以创建表格的表格:| n=1 | n=4 | ... ------------- ... ReLU(x + 1): (float) | ... | ... | ... ReLU(x + 1): (int) | ... | ... | ...
使用
Compare
。打印测量时也包含它。env-这个标签表示在不同的环境中运行相同的任务,因此是不等价的,例如在 A/B 测试对内核的更改时。
Compare
将在合并复制运行时将具有不同env
规范的测量视为不同的。num_threads-执行
stmt
时 PyTorch 线程池的大小。单线程性能非常重要,因为它既是关键的推理工作负载,又是内在算法效率的良好指标,因此默认设置为 1。这与尝试利用所有核心的默认 PyTorch 线程池大小形成对比。
用于测量 PyTorch 语句的执行时间的帮助程序类。
有关如何使用此类的完整教程,请参阅:https://pytorch.org/tutorials/recipes/recipes/benchmark.html
PyTorch 计时器基于
timeit.Timer
(实际上在内部使用timeit.Timer
),但有几个关键区别:- 运行时感知:
计时器将执行预热(很重要,因为 PyTorch 的某些元素是延迟初始化的),设置线程池大小以便比较为 apples-to-apples,并在必要时同步异步 CUDA 函数。
- 专注于复制:
在测量代码,特别是复杂的内核/模型时,run-to-run 变化是一个重要的混杂因子。预计所有测量都应包括重复以量化噪声并允许中值计算,这比平均值更稳健。为此,此类通过在概念上合并
timeit.Timer.repeat
和timeit.Timer.autorange
来偏离timeit
API。 (具体算法在方法文档字符串中讨论。)timeit
方法在不需要自适应策略的情况下被复制。
- 可选元数据:
定义 Timer 时,可以选择指定
label
、sub_label
、description
和env
。 (稍后定义)这些字段包含在结果对象的表示中,并由Compare
类对结果进行分组和显示以进行比较。
- 指令计数
除了挂壁时间,Timer 还可以在 Callgrind 下运行语句并报告执行的指令。
直接类似于
timeit.Timer
构造函数参数:stmt
,setup
,timer
,globals
PyTorch 定时器特定的构造函数参数:
label
,sub_label
,description
,env
,num_threads
参数:
相关用法
- Python PyTorch Timer.blocked_autorange用法及代码示例
- Python PyTorch TimeMasking用法及代码示例
- Python PyTorch TimeStretch用法及代码示例
- Python PyTorch Tensor.unflatten用法及代码示例
- Python PyTorch Tensor.register_hook用法及代码示例
- Python PyTorch TransformerEncoder用法及代码示例
- Python PyTorch TarArchiveLoader用法及代码示例
- Python PyTorch Tensor.storage_offset用法及代码示例
- Python PyTorch Tensor.to用法及代码示例
- Python PyTorch Tensor.sparse_mask用法及代码示例
- Python PyTorch TripletMarginLoss用法及代码示例
- Python PyTorch Tacotron2TTSBundle.get_text_processor用法及代码示例
- Python PyTorch Tensor.is_leaf用法及代码示例
- Python PyTorch Tensor.imag用法及代码示例
- Python PyTorch Tensor.unfold用法及代码示例
- Python PyTorch TenCrop用法及代码示例
- Python PyTorch Tensor.real用法及代码示例
- Python PyTorch TwRwSparseFeaturesDist用法及代码示例
- Python PyTorch Tensor.refine_names用法及代码示例
- Python PyTorch Tanh用法及代码示例
- Python PyTorch Tensor.rename用法及代码示例
- Python PyTorch TransformedDistribution用法及代码示例
- Python PyTorch Tensor.view用法及代码示例
- Python PyTorch Tensor.new_empty用法及代码示例
- Python PyTorch Tensor.index_copy_用法及代码示例
注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.utils.benchmark.Timer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。