快速鍵

torch.use_deterministic_algorithms

torch.use_deterministic_algorithms(mode, *, warn_only=False)[來源][來源]

設定 PyTorch 運算是否必須使用「決定性」演算法。也就是說,對於相同的輸入,並且在相同的軟體和硬體上執行時,演算法總是產生相同的輸出。啟用後,運算將在可用的情況下使用決定性演算法,如果只有非決定性演算法可用,則在呼叫時會拋出 RuntimeError

注意

僅此設定並不總是足以使應用程式具有可重複性。請參閱 再現性 以取得更多資訊。

注意

torch.set_deterministic_debug_mode() 為此功能提供了一個替代介面。

mode=True 時,以下通常為非決定性的運算將以決定性的方式執行:

mode=True 時,以下通常為非決定性的運算將拋出 RuntimeError

此外,開啟此設定且開啟 torch.utils.deterministic.fill_uninitialized_memory 時,多個操作會填滿未初始化的記憶體。詳情請參閱該屬性的文件。

如果 CUDA 版本為 10.2 或更高版本,除非設定環境變數 CUBLAS_WORKSPACE_CONFIG=:4096:8CUBLAS_WORKSPACE_CONFIG=:16:8,否則少數 CUDA 操作是不具決定性的。詳情請參閱 CUDA 文件:https://docs.nvidia.com/cuda/cublas/index.html#results-reproducibility 如果未設定這些環境變數組態之一,則在使用 CUDA tensor 呼叫這些操作時,將會引發 RuntimeError

請注意,決定性操作的效能往往比不具決定性的操作差。

注意

此旗標不會偵測或防止因對具有內部記憶體重疊的 tensor 呼叫 inplace 操作,或將此 tensor 作為操作的 out 引數而造成的不具決定性的行為。在這些情況下,不同資料的多個寫入可能會針對單一記憶體位置,且無法保證寫入的順序。

參數

mode (bool) – 如果為 True,則可能使不具決定性的操作切換為決定性演算法或擲回執行階段錯誤。 如果為 False,則允許不具決定性的操作。

關鍵字引數

warn_only (bool, optional) – 如果為 True,則沒有決定性實作的操作會擲回警告而不是錯誤。預設值:False

範例

>>> torch.use_deterministic_algorithms(True)

# Forward mode nondeterministic error
>>> torch.randn(10, device='cuda').kthvalue(1)
...
RuntimeError: kthvalue CUDA does not have a deterministic implementation...

# Backward mode nondeterministic error
>>> torch.nn.AvgPool3d(1)(torch.randn(3, 4, 5, 6, requires_grad=True).cuda()).sum().backward()
...
RuntimeError: avg_pool3d_backward_cuda does not have a deterministic implementation...

文件

存取 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並取得您的問題解答

檢視資源