快捷方式

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.nvda.net.cn/cuda/cublas/index.html#results-reproducibility 如果未设置这些环境变量配置之一,则当使用 CUDA 张量调用这些操作时,将从这些操作中引发 RuntimeError

请注意,确定性操作往往比非确定性操作性能更差。

注意

此标志不会检测或阻止由以下原因引起的非确定性行为:在具有内部内存重叠的张量上调用就地操作,或者将此类张量作为操作的 out 参数给出。 在这些情况下,不同数据的多次写入可能会针对单个内存位置,并且写入顺序无法保证。

参数

mode (bool) – 如果为 True,则使可能为非确定性的操作切换到确定性算法或抛出运行时错误。 如果为 False,则允许非确定性操作。

关键字参数

warn_only (bool, 可选) – 如果为 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 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源