KinetoStepTracker¶
- class torch.autograd.profiler.KinetoStepTracker[source]¶
提供用于全局递增步数的抽象。
以前,我们只有一个地方可以标记程序中 step() 的发生,方法是通过 pytorch profiler 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。结果可能会导致步数的递增不正确。