Kineto步数追踪器

torch.autograd.profiler.KinetoStepTracker[源代码]

提供了一种抽象,用于全局增加步数。

此前,我们只能通过 pytorch profiler 的 step() 方法来标记程序中 step() 发生的位置。现在,我们将在 Optimizer 类中添加 step 钩子 https://github.com/pytorch/pytorch/issues/88446

  • 这意味着,如果程序已经在每次迭代中调用了 profiler.step(),那么步数计数可能会被双倍增加。

  • 如果一个模型使用多个优化器,我们可能会遇到多次步骤计数的问题。

我们通过在调用 kineto 库的 step() 方法之前增加一层抽象来解决这个问题。具体思路是使用一个字典来记录每个请求者的步数。

{
   "ProfilerStep": 100,  # triggered by profiler step() call
   "Optimizer1Step": 100,   # Optimizer 1 or 2 are just examples, could be SGD, Adam etc
   "Optimizer2Step": 100,
}

要确定全局步数,只需找到字典值中的最大值(100)。

如果某个计数器的增量超过最大值,最大值将会上升。

{
   "ProfilerStep": 100,
   "Optimizer1Step": 101,   # Optimizer1 got incremented first say
   "Optimizer2Step": 100,
}

此时全局步数为101。我们只在全局计数增加时调用kineto step()函数。

请注意,目前不要在优化器以外的模块中使用 KinetoStepTracker,否则可能导致步数增量不准确。

classmethodcurrent_step()[源代码]

获取任何请求者的最新操作步骤

返回类型

int

classmethoderase_step_count(requester)[源代码]

删除指定的请求者。

返回类型

bool

classmethodincrement_step(requester)[源代码]

为请求者增加一步计数。

此外,如果最大步数增加,则调用 _kineto_step() 并返回全局步数。

返回类型

int

classmethodinit_step_count(requester)[源代码]

为特定请求者进行初始化。

本页目录