評價此頁

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]#

初始化指定請求者。