当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch use_deterministic_algorithms用法及代码示例


本文简要介绍python语言中 torch.use_deterministic_algorithms 的用法。

用法:

torch.use_deterministic_algorithms(mode)

参数

mode(bool) -如果为 True,则使潜在的非确定性操作切换到确定性算法或引发运行时错误。如果为 False,则允许非确定性操作。

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

以下 normally-nondeterministic 操作将在 mode=True 时确定性地执行:

以下 normally-nondeterministic 操作将在 mode=True 时抛出 RuntimeError

如果 CUDA 版本为 10.2 或更高版本,则少数 CUDA 操作是不确定的,除非设置了环境变量 CUBLAS_WORKSPACE_CONFIG=:4096:8CUBLAS_WORKSPACE_CONFIG=:16:8。有关更多详细信息,请参阅 CUDA 文档: https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility 如果未设置这些环境变量配置之一,则在使用 CUDA 张量调用时,将从这些操作中引发 RuntimeError

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

注意

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

例子:

>>> torch.use_deterministic_algorithms(True)

# Forward mode nondeterministic error
>>> torch.randn(10).index_copy(0, torch.tensor([0]), torch.randn(1))
...
RuntimeError: index_copy does not have a deterministic implementation...

# Backward mode nondeterministic error
>>> torch.randn(10, requires_grad=True, device='cuda').index_select(0, torch.tensor([0], device='cuda')).backward()
...
RuntimeError: index_add_cuda_ does not have a deterministic implementation...

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.use_deterministic_algorithms。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。