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。這可能會導致不正確的步數增加。