Spec-Zone.ru › PyTorch 1

torch.use_deterministic_algorithms

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

Устанавливает, должны ли операции PyTorch использовать алгоритмы «детерминированного» типа. То есть, алгоритмы, которые, получив одинаковый входной набор данных и будучи запущенными на одном и том же программном и аппаратном обеспечении, всегда будут генерировать один и тот же результат. При включении операций будут использоваться детерминированные алгоритмы, если они доступны; если доступны только недетерминированные алгоритмы, при вызове будет возбуждаться исключение RuntimeError.

Примечание

Этого параметра недостаточно для обеспечения воспроизводимости приложения. Для получения дополнительной информации см. Воспроизводимость.

Примечание

torch.set_deterministic_debug_mode() предоставляет альтернативный интерфейс для этой функции.

Следующие обычно недетерминированные операции будут действовать детерминированно, когда mode=True:

  • torch.nn.Conv1d, если вызывается с тензором CUDA
  • torch.nn.Conv2d, если вызывается с тензором CUDA
  • torch.nn.Conv3d, если вызывается с тензором CUDA
  • torch.nn.ConvTranspose1d, если вызывается с тензором CUDA
  • torch.nn.ConvTranspose2d, если вызывается с тензором CUDA
  • torch.nn.ConvTranspose3d, если вызывается с тензором CUDA
  • torch.bmm(), если вызывается с разреженными/плоскими тензорами CUDA
  • torch.Tensor.__getitem__() при попытке дифференцирования тензора CPU, и индекс — список тензоров
  • torch.Tensor.index_put() со значением accumulate=False
  • torch.Tensor.index_put() со значением accumulate=True при вызове с тензором CPU
  • torch.Tensor.put_() со значением accumulate=True при вызове с тензором CPU
  • torch.Tensor.scatter_add_(), если вызывается с тензором CUDA
  • torch.gather(), если вызывается с тензором CUDA, требующим градиент
  • torch.index_add(), если вызывается с тензором CUDA
  • torch.index_select(), при попытке дифференцирования тензора CUDA
  • torch.repeat_interleave(), при попытке дифференцирования тензора CUDA
  • torch.Tensor.index_copy() при вызове с тензором CPU или CUDA

Следующие обычно недетерминированные операции возбудят исключение RuntimeError при mode=True:

  • torch.nn.AvgPool3d при попытке дифференцирования тензора CUDA
  • torch.nn.AdaptiveAvgPool2d при попытке дифференцирования тензора CUDA
  • torch.nn.AdaptiveAvgPool3d при попытке дифференцирования тензора CUDA
  • torch.nn.MaxPool3d при попытке дифференцирования тензора CUDA
  • torch.nn.AdaptiveMaxPool2d при попытке дифференцирования тензора CUDA
  • torch.nn.FractionalMaxPool2d при попытке дифференцирования тензора CUDA
  • torch.nn.FractionalMaxPool3d при попытке дифференцирования тензора CUDA
  • torch.nn.MaxUnpool1d
  • torch.nn.MaxUnpool2d
  • torch.nn.MaxUnpool3d
  • torch.nn.functional.interpolate() при попытке дифференцирования тензора CUDA и использовании одного из следующих режимов:

    • linear
    • bilinear
    • bicubic
    • trilinear
  • torch.nn.ReflectionPad1d при попытке дифференцирования тензора CUDA
  • torch.nn.ReflectionPad2d при попытке дифференцирования тензора CUDA
  • torch.nn.ReflectionPad3d при попытке дифференцирования тензора CUDA
  • torch.nn.ReplicationPad1d при попытке дифференцирования тензора CUDA
  • torch.nn.ReplicationPad2d при попытке дифференцирования тензора CUDA
  • torch.nn.ReplicationPad3d при попытке дифференцирования тензора CUDA
  • torch.nn.NLLLoss при вызове с тензором CUDA
  • torch.nn.CTCLoss при попытке дифференцирования тензора CUDA
  • torch.nn.EmbeddingBag при попытке дифференцирования тензора CUDA, когда mode='max'
  • torch.Tensor.put_() когда accumulate=False
  • torch.Tensor.put_() при accumulate=True и вызове с тензором CUDA
  • torch.histc() при вызове с тензором CUDA
  • torch.bincount() при вызове с тензором CUDA
  • torch.kthvalue() с вызовом тензора CUDA
  • torch.median() с выходными индексами при вызове тензора CUDA
  • torch.nn.functional.grid_sample() при попытке дифференцирования тензора CUDA
  • torch.cumsum() при вызове с тензором CUDA, если тип данных — с плавающей точкой или комплексный

Некоторые операции CUDA недетерминированы, если версия CUDA 10.2 или выше, если не установлены переменные окружения CUBLAS_WORKSPACE_CONFIG=:4096:8 или CUBLAS_WORKSPACE_CONFIG=:16:8. См. документацию CUDA для получения более подробной информации: https://docs.nvidia.com/cuda/cublas/index.html#cublasApi_reproducibility Если ни одна из этих переменных окружения не установлена, при вызове с тензорами CUDA будет возбуждаться исключение RuntimeError из этих операций:

  • torch.mm()
  • torch.mv()
  • torch.bmm()

Обратите внимание, что детерминированные операции обычно имеют худшую производительность, чем недетерминированные.

Примечание

Этот флаг не обнаруживает и не предотвращает недетерминированное поведение, вызванное вызовом операции in-place над тензором с внутренней перекрывающейся памятью или передачей такого тензора в качестве аргумента 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(0)
...
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...

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.use_deterministic_algorithms.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API