当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch Timer用法及代码示例


本文简要介绍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),但有几个关键区别:

  1. 运行时感知:

    计时器将执行预热(很重要,因为 PyTorch 的某些元素是延迟初始化的),设置线程池大小以便比较为 apples-to-apples,并在必要时同步异步 CUDA 函数。

  2. 专注于复制:

    在测量代码,特别是复杂的内核/模型时,run-to-run 变化是一个重要的混杂因子。预计所有测量都应包括重复以量化噪声并允许中值计算,这比平均值更稳健。为此,此类通过在概念上合并 timeit.Timer.repeattimeit.Timer.autorange 来偏离 timeit API。 (具体算法在方法文档字符串中讨论。)timeit 方法在不需要自适应策略的情况下被复制。

  3. 可选元数据:

    定义 Timer 时,可以选择指定 labelsub_labeldescriptionenv 。 (稍后定义)这些字段包含在结果对象的表示中,并由Compare 类对结果进行分组和显示以进行比较。

  4. 指令计数

    除了挂壁时间,Timer 还可以在 Callgrind 下运行语句并报告执行的指令。

直接类似于timeit.Timer 构造函数参数:

stmt , setup , timer , globals

PyTorch 定时器特定的构造函数参数:

label , sub_label , description , env , num_threads

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.utils.benchmark.Timer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。