KinetoStepTracker¶
- class torch.autograd.profiler.KinetoStepTracker[源][源]¶
提供了一種全域性遞增步數(step count)的抽象。
以前,我們只能透過 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() 函式。
注意:目前請不要在 Optimizer 之外的模組中使用 KinetoStepTracker。否則可能導致步數遞增不正確。