评价此页

KinetoStepTracker#

class torch.autograd.profiler.KinetoStepTracker[source]#

提供一个用于全局递增步数的抽象。

以前,我们只有一个地方可以通过 pytorch profiler step() 来标记程序中发生的 step()。现在我们将在 Optimizer 类中添加 step 钩子 pytorch/pytorch#88446

  • 这可能意味着已经调用 profiler.step() 每个迭代的程序会重复递增步数。

  • 如果一个模型使用了多个优化器,步数也可能被重复或多次计数。

我们通过在调用 step() 到 kineto 库之前添加一个抽象层来解决这个问题。思路是在一个字典中维护每个请求者的步数。

{
   "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() 函数。

注意:目前请不要在 Optimizer 以外的模块中使用 KinetoStepTracker。否则可能会错误地递增步数。

classmethod current_step()[source]#

获取任何请求者的最新步数。

返回类型

int

classmethod erase_step_count(requester)[source]#

删除给定的请求者。

返回类型

布尔值

classmethod increment_step(requester)[source]#

递增请求者的步数。

此外,如果所有步数的最大值已递增,则触发 _kineto_step() 返回全局步数。

返回类型

int

classmethod init_step_count(requester)[source]#

初始化给定的请求者。