• 文档 >
  • torch >
  • torch.use_deterministic_algorithms
快捷键

torch.use_deterministic_algorithms

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

设置 PyTorch 操作是否必须使用“确定性”算法。也就是说,对于相同的输入,在相同的软件和硬件上运行时,总是产生相同输出的算法。启用后,当可用时,操作将使用确定性算法,如果只有非确定性算法可用,则调用时会抛出 RuntimeError

注意

单独设置此选项并不总是足以使应用程序可重复。请参阅可重复性获取更多信息。

注意

为此功能提供了一种替代接口。

以下通常非确定性的操作在 mode=True 时将表现出确定性:

  • 当在 CUDA 张量上调用 torch.nn.Conv1d 时:

  • 当在 CUDA 张量上调用时

  • 当在 CUDA 张量上调用时

  • 当在 CUDA 张量上调用时

  • 当在 CUDA 张量上调用时

  • 当在 CUDA 张量上调用时

  • 当尝试对 CUDA 张量进行微分时

  • 当在稀疏-稠密 CUDA 张量上调用时

  • 当尝试对 CPU 张量进行微分且索引为张量列表时

  • 使用 accumulate=False

  • 在 CPU 张量上调用时使用 accumulate=True

  • 在 CPU 张量上调用时使用 accumulate=True

  • 在 CUDA 张量上调用时使用 @1#

  • 当对一个需要梯度的 CUDA 张量调用时

  • 当对一个 CUDA 张量调用时

  • 当尝试对 CUDA 张量求导时

  • 当尝试对 CUDA 张量求导时

  • 当在 CPU 或 CUDA 张量上调用时

  • 当 src 类型为 Tensor 且在 CUDA 张量上调用时

  • reduce='sum'reduce='mean' 且在 CUDA 张量上调用时

以下通常非确定性的操作将在 mode=True 时抛出 RuntimeError

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • torch.nn.MaxUnpool1d

  • torch.nn.MaxUnpool2d

  • torch.nn.MaxUnpool3d

  • 当尝试区分 CUDA 张量并使用以下任一模式时:

    • linear

    • bilinear

    • bicubic

    • trilinear

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时

  • 当对 CUDA 张量调用时

  • 当尝试区分 CUDA 张量时

  • 当尝试区分 CUDA 张量时,且 mode='max'

  • torch.Tensor.put_()accumulate=False

  • torch.Tensor.put_()accumulate=True 并且在一个 CUDA 张量上调用

  • 当在一个 CUDA 张量上调用时 torch.histc()

  • 当在一个 CUDA 张量上调用时 torch.bincount() 并且提供了 weights 张量

  • 在调用 CUDA 张量时

  • 在调用 CUDA 张量时输出索引

  • 在尝试对 CUDA 张量进行微分时

  • 在调用 CUDA 张量且数据类型为浮点或复数时

  • 当在 CUDA 张量上调用时

  • 当使用量化张量调用时

此外,当启用此设置且启用 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

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

注意

此标志无法检测或防止由于在具有内部内存重叠的张量上调用原地操作或将此类张量作为操作的第 0#参数传递而引起的非确定性行为。在这些情况下,可能对单个内存位置进行多次不同数据写入,且写入顺序无法保证。

参数:

模式( 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 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源