KinetoStepTracker¶
- class torch.autograd.profiler.KinetoStepTracker[source][source]¶
提供用于全局递增步数的抽象。
以前,我们只有一个地方可以通过 pytorch profiler step() 标记程序中发生了 step()。我们现在将在 Optimizer 类中添加 step 钩子 https://github.com/pytorch/pytorch/issues/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。结果可能是步数的不正确递增。