本文簡要介紹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
),但有幾個關鍵區別:- 運行時感知:
計時器將執行預熱(很重要,因為 PyTorch 的某些元素是延遲初始化的),設置線程池大小以便比較為 apples-to-apples,並在必要時同步異步 CUDA 函數。
- 專注於複製:
在測量代碼,特別是複雜的內核/模型時,run-to-run 變化是一個重要的混雜因子。預計所有測量都應包括重複以量化噪聲並允許中值計算,這比平均值更穩健。為此,此類通過在概念上合並
timeit.Timer.repeat
和timeit.Timer.autorange
來偏離timeit
API。 (具體算法在方法文檔字符串中討論。)timeit
方法在不需要自適應策略的情況下被複製。
- 可選元數據:
定義 Timer 時,可以選擇指定
label
、sub_label
、description
和env
。 (稍後定義)這些字段包含在結果對象的表示中,並由Compare
類對結果進行分組和顯示以進行比較。
- 指令計數
除了掛壁時間,Timer 還可以在 Callgrind 下運行語句並報告執行的指令。
直接類似於
timeit.Timer
構造函數參數:stmt
,setup
,timer
,globals
PyTorch 定時器特定的構造函數參數:
label
,sub_label
,description
,env
,num_threads
參數:
相關用法
- Python PyTorch Timer.blocked_autorange用法及代碼示例
- Python PyTorch TimeMasking用法及代碼示例
- Python PyTorch TimeStretch用法及代碼示例
- Python PyTorch Tensor.unflatten用法及代碼示例
- Python PyTorch Tensor.register_hook用法及代碼示例
- Python PyTorch TransformerEncoder用法及代碼示例
- Python PyTorch TarArchiveLoader用法及代碼示例
- Python PyTorch Tensor.storage_offset用法及代碼示例
- Python PyTorch Tensor.to用法及代碼示例
- Python PyTorch Tensor.sparse_mask用法及代碼示例
- Python PyTorch TripletMarginLoss用法及代碼示例
- Python PyTorch Tacotron2TTSBundle.get_text_processor用法及代碼示例
- Python PyTorch Tensor.is_leaf用法及代碼示例
- Python PyTorch Tensor.imag用法及代碼示例
- Python PyTorch Tensor.unfold用法及代碼示例
- Python PyTorch TenCrop用法及代碼示例
- Python PyTorch Tensor.real用法及代碼示例
- Python PyTorch TwRwSparseFeaturesDist用法及代碼示例
- Python PyTorch Tensor.refine_names用法及代碼示例
- Python PyTorch Tanh用法及代碼示例
- Python PyTorch Tensor.rename用法及代碼示例
- Python PyTorch TransformedDistribution用法及代碼示例
- Python PyTorch Tensor.view用法及代碼示例
- Python PyTorch Tensor.new_empty用法及代碼示例
- Python PyTorch Tensor.index_copy_用法及代碼示例
注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.utils.benchmark.Timer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。