快捷方式

torch.use_deterministic_algorithms

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

設定 PyTorch 操作是否必須使用“確定性”演算法。也就是說,給定相同的輸入,並在相同的軟體和硬體上執行時,始終產生相同輸出的演算法。啟用此設定後,操作在可用時將使用確定性演算法;如果只有非確定性演算法可用,呼叫時將丟擲 RuntimeError

注意

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

注意

torch.set_deterministic_debug_mode() 為此功能提供了另一種介面。

mode=True 時,以下通常為非確定性的操作將以確定性方式執行:

mode=True 時,以下通常為非確定性的操作將丟擲 RuntimeError

此外,當此設定和 torch.utils.deterministic.fill_uninitialized_memory 設定同時開啟時,一些操作會填充未初始化的記憶體。有關更多資訊,請參閱該屬性的文件。

如果 CUDA 版本是 10.2 或更高,則少數 CUDA 操作是非確定性的,除非設定了環境變數 CUBLAS_WORKSPACE_CONFIG=:4096:8CUBLAS_WORKSPACE_CONFIG=:16:8。有關更多詳細資訊,請參閱 CUDA 文件:https://docs.nvidia.com/cuda/cublas/index.html#results-reproducibility 如果未設定這些環境變數配置之一,則在使用 CUDA 張量呼叫這些操作時,將丟擲 RuntimeError

請注意,確定性操作的效能通常不如非確定性操作。

注意

此標誌不會檢測或阻止由於在具有內部記憶體重疊的張量上呼叫原地(inplace)操作,或將此類張量作為操作的 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 全面的開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題的解答

檢視資源