當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch Timer用法及代碼示例


本文簡要介紹python語言中 torch.utils.benchmark.Timer 的用法。

用法:

class torch.utils.benchmark.Timer(stmt='pass', setup='pass', global_setup='', timer=<built-in function perf_counter>, globals=None, label=None, sub_label=None, description=None, env=None, num_threads=1, language=<Language.PYTHON: 0>)

參數

  • stmt-要在循環中運行並定時的代碼片段。

  • setup-可選設置代碼。用於定義stmt中使用的變量

  • global_setup-(僅限 C++)放置在文件頂層的代碼,例如 #include 語句。

  • timer-可調用返回當前時間。如果 PyTorch 是在沒有 CUDA 的情況下構建的或者不存在 GPU,則默認為 timeit.default_timer ;否則它會在測量時間之前同步 CUDA。

  • globals-stmt被執行時定義全局變量的字典。這是提供stmt 需要的變量的另一種方法。

  • label-總結 stmt 的字符串。例如,如果stmt 是“torch.nn.functional.relu(torch.add(x, 1, out=out))”,則可以將標簽設置為“ReLU(x + 1)”以提高可讀性。

  • sub_label-

    提供補充信息,以消除具有相同 stmt 或標簽的測量結果的歧義。例如,在上麵的示例中,sub_label可能是“float”或“int”,這樣很容易區分:“ReLU(x + 1): (float)”

    使用 Compare 打印測量值或匯總時的“ReLU(x + 1): (int)”。

  • description-

    用於區分具有相同標簽和sub_label 的測量值的字符串。 description 的主要用途是向 Compare 發送數據列。例如,可以根據輸入大小設置它以創建表格的表格:

    | n=1 | n=4 | ...
                            ------------- ...
    ReLU(x + 1): (float)    | ... | ... | ...
    ReLU(x + 1): (int)      | ... | ... | ...

    使用 Compare 。打印測量時也包含它。

  • env-這個標簽表示在不同的環境中運行相同的任務,因此是不等價的,例如在 A/B 測試對內核的更改時。 Compare 將在合並複製運行時將具有不同 env 規範的測量視為不同的。

  • num_threads-執行 stmt 時 PyTorch 線程池的大小。單線程性能非常重要,因為它既是關鍵的推理工作負載,又是內在算法效率的良好指標,因此默認設置為 1。這與嘗試利用所有核心的默認 PyTorch 線程池大小形成對比。

用於測量 PyTorch 語句的執行時間的幫助程序類。

有關如何使用此類的完整教程,請參閱:https://pytorch.org/tutorials/recipes/recipes/benchmark.html

PyTorch 計時器基於 timeit.Timer(實際上在內部使用timeit.Timer),但有幾個關鍵區別:

  1. 運行時感知:

    計時器將執行預熱(很重要,因為 PyTorch 的某些元素是延遲初始化的),設置線程池大小以便比較為 apples-to-apples,並在必要時同步異步 CUDA 函數。

  2. 專注於複製:

    在測量代碼,特別是複雜的內核/模型時,run-to-run 變化是一個重要的混雜因子。預計所有測量都應包括重複以量化噪聲並允許中值計算,這比平均值更穩健。為此,此類通過在概念上合並 timeit.Timer.repeattimeit.Timer.autorange 來偏離 timeit API。 (具體算法在方法文檔字符串中討論。)timeit 方法在不需要自適應策略的情況下被複製。

  3. 可選元數據:

    定義 Timer 時,可以選擇指定 labelsub_labeldescriptionenv 。 (稍後定義)這些字段包含在結果對象的表示中,並由Compare 類對結果進行分組和顯示以進行比較。

  4. 指令計數

    除了掛壁時間,Timer 還可以在 Callgrind 下運行語句並報告執行的指令。

直接類似於timeit.Timer 構造函數參數:

stmt , setup , timer , globals

PyTorch 定時器特定的構造函數參數:

label , sub_label , description , env , num_threads

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.utils.benchmark.Timer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。