Spec-Zone.ru › PyTorch 2.14

Пакет автоматической смешанной точности — torch.amp

Создано: Jun 12, 2025 | Последнее обновление: Jul 11, 2026

torch.amp предоставляет удобные методы для смешанной точности, при которой одни операции используют тип данных torch.float32 (float), а другие — тип данных с плавающей точкой меньшей точности (lower_precision_fp): torch.float16 (half) или torch.bfloat16. Некоторые операции, например линейные слои и свёртки, выполняются намного быстрее в lower_precision_fp. Для других операций, например редукций, часто требуется динамический диапазон float32. Смешанная точность пытается подобрать для каждой операции подходящий тип данных.

Обычно для «обучения с автоматической смешанной точностью» с типом данных torch.float16 используются вместе torch.autocast и torch.amp.GradScaler, как показано в примерах автоматической смешанной точности и руководстве по автоматической смешанной точности. Однако torch.autocast и torch.GradScaler являются модульными и при необходимости могут использоваться отдельно. Как показано в разделе примера для CPU в torch.autocast, для «обучения/вывода с автоматической смешанной точностью» на CPU с типом данных torch.bfloat16 используется только torch.autocast.

Предупреждение

torch.cuda.amp.autocast(args...) и torch.cpu.amp.autocast(args...) устарели. Вместо них используйте torch.amp.autocast("cuda", args...) или torch.amp.autocast("cpu", args...). torch.cuda.amp.GradScaler(args...) и torch.cpu.amp.GradScaler(args...) устарели. Вместо них используйте torch.amp.GradScaler("cuda", args...) или torch.amp.GradScaler("cpu", args...).

Предупреждение

При сочетании AMP с torch.compile учтите, что по умолчанию параметр torch._functorch.config.backward_pass_autocast имеет значение "same_as_forward". Предполагается, что скомпилированный обратный проход выполняется в том же контексте autocast, что и скомпилированный прямой проход. Если вы следуете рекомендуемому для AMP шаблону обучения и выполняете обратный проход вне autocast, задайте для torch._functorch.config.backward_pass_autocast значение "off" в скомпилированной области. Подробности см. в разделе torch.compile имеет иную семантику autograd.

torch.autocast и torch.cpu.amp.autocast появились в версии 1.10.

  • Автоматическое приведение типов
  • Масштабирование градиента
  • Справочник по операциям autocast

    • Допустимость операций
    • Особенности поведения операций CUDA

      • Операции CUDA, для которых можно выполнить autocast в float16
      • Операции CUDA, для которых можно выполнить autocast в float32
      • Операции CUDA, приводящие типы к самому широкому типу входных данных
      • Предпочитайте binary_cross_entropy_with_logits вместо binary_cross_entropy
    • Особенности поведения операций XPU (экспериментально)

      • Операции XPU, для которых можно выполнить autocast в float16
      • Операции XPU, для которых можно выполнить autocast в float32
      • Операции XPU, приводящие типы к самому широкому типу входных данных
    • Особенности поведения операций CPU

      • Операции CPU, для которых можно выполнить autocast в bfloat16
      • Операции CPU, для которых можно выполнить autocast в float32
      • Операции CPU, приводящие типы к самому широкому типу входных данных

Автоматическое приведение типов

torch.amp.autocast_mode.is_autocast_available(device_type) [источник]

Возвращает логическое значение, указывающее, доступно ли автоматическое приведение типов на device_type.

Параметры:

device_type (str) – Тип устройства. Возможные значения: ‘cuda’, ‘cpu’, ‘mtia’, ‘maia’, ‘xpu’ и т. д. Тип совпадает с атрибутом type объекта torch.device. Таким образом, тип устройства тензора можно получить с помощью Tensor.device.type.

Возвращаемый тип:

bool

class torch.autocast(device_type, dtype=None, enabled=True, cache_enabled=None) [источник]

Экземпляры autocast выступают в роли менеджеров контекста или декораторов, позволяющих выполнять отдельные участки скрипта в режиме смешанной точности.

В этих участках операции выполняются с типом данных, выбранным для каждой операции механизмом автоматического приведения типов, что повышает производительность при сохранении точности. Подробности см. в справочнике операций с автоматическим приведением типов.

При входе в область с включённым автоматическим приведением типов тензоры могут иметь любой тип. При использовании автоматического приведения типов не следует вызывать half() или bfloat16() для модели (моделей) или входных данных.

autocast следует использовать только для прямого прохода (проходов) сети, включая вычисление функции (функций) потерь. Обратные проходы с включённым автоматическим приведением типов не рекомендуются. Операции обратного прохода выполняются с теми же типами, которые автоматическое приведение типов использовало для соответствующих операций прямого прохода.

Пример для устройств CUDA:

# Creates model and optimizer in default precision
model = Net().cuda()
optimizer = optim.SGD(model.parameters(), ...)

for input, target in data:
    optimizer.zero_grad()

    # Enables autocasting for the forward pass (model + loss)
    with torch.autocast(device_type="cuda"):
        output = model(input)
        loss = loss_fn(output, target)

    # Exits the context manager before backward()
    loss.backward()
    optimizer.step()

Примеры использования (в том числе с масштабированием градиентов) в более сложных сценариях (например, штраф за градиент, несколько моделей или функций потерь, пользовательские функции autograd) см. на странице с примерами автоматической смешанной точности.

autocast также можно использовать как декоратор, например, для метода forward модели:

class AutocastModel(nn.Module):
    ...

    @torch.autocast(device_type="cuda")
    def forward(self, input): ...

Тензоры с плавающей точкой, созданные в области с включённым автоматическим приведением типов, могут иметь тип float16. При возвращении в область с отключённым автоматическим приведением типов их использование с тензорами с плавающей точкой других типов данных может привести к ошибкам несовпадения типов. В этом случае преобразуйте созданные в области автоматического приведения типов тензор (тензоры) обратно в float32 (или в другой тип данных, если необходимо). Если тензор из области автоматического приведения типов уже имеет тип float32, преобразование не выполняется и не требует дополнительных затрат. Пример для CUDA:

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")

with torch.autocast(device_type="cuda"):
    # torch.mm is on autocast's list of ops that should run in float16.
    # Inputs are float32, but the op runs in float16 and produces float16 output.
    # No manual casts are required.
    e_float16 = torch.mm(a_float32, b_float32)
    # Also handles mixed input types
    f_float16 = torch.mm(d_float32, e_float16)

# After exiting autocast, calls f_float16.float() to use with d_float32
g_float32 = torch.mm(d_float32, f_float16.float())

Пример обучения на CPU:

# Creates model and optimizer in default precision
model = Net()
optimizer = optim.SGD(model.parameters(), ...)

for epoch in epochs:
    for input, target in data:
        optimizer.zero_grad()

        # Runs the forward pass with autocasting.
        with torch.autocast(device_type="cpu", dtype=torch.bfloat16):
            output = model(input)
            loss = loss_fn(output, target)

        loss.backward()
        optimizer.step()

Пример инференса на CPU:

# Creates model in default precision
model = Net().eval()

with torch.autocast(device_type="cpu", dtype=torch.bfloat16):
    for input in data:
        # Runs the forward pass with autocasting.
        output = model(input)

Пример инференса на CPU с трассировкой Jit:

class TestModel(nn.Module):
    def __init__(self, input_size, num_classes):
        super().__init__()
        self.fc1 = nn.Linear(input_size, num_classes)

    def forward(self, x):
        return self.fc1(x)


input_size = 2
num_classes = 2
model = TestModel(input_size, num_classes).eval()

# For now, we suggest to disable the Jit Autocast Pass,
# As the issue: https://github.com/pytorch/pytorch/issues/75956
torch._C._jit_set_autocast_mode(False)

with torch.cpu.amp.autocast(cache_enabled=False):
    model = torch.jit.trace(model, torch.randn(1, input_size))
model = torch.jit.freeze(model)
# Models Run
for _ in range(3):
    model(torch.randn(1, input_size))

Ошибки несовпадения типов внутри области с включённым автоматическим приведением типов являются ошибкой; если вы столкнулись с такой проблемой, сообщите о ней.

Подобласти autocast(enabled=False) можно вкладывать в области с включённым автоматическим приведением типов. Локальное отключение автоматического приведения типов может быть полезно, например, если нужно принудительно выполнять подобласть с определённым dtype. Отключение автоматического приведения типов позволяет явно управлять типом выполнения. Перед использованием во вложенной области входные данные из окружающей области следует преобразовать в dtype:

# Creates some tensors in default dtype (here assumed to be float32)
a_float32 = torch.rand((8, 8), device="cuda")
b_float32 = torch.rand((8, 8), device="cuda")
c_float32 = torch.rand((8, 8), device="cuda")
d_float32 = torch.rand((8, 8), device="cuda")

with torch.autocast(device_type="cuda"):
    e_float16 = torch.mm(a_float32, b_float32)
    with torch.autocast(device_type="cuda", enabled=False):
        # Calls e_float16.float() to ensure float32 execution
        # (necessary because e_float16 was created in an autocasted region)
        f_float32 = torch.mm(c_float32, e_float16.float())

    # No manual casts are required when re-entering the autocast-enabled region.
    # torch.mm again runs in float16 and produces float16 output, regardless of input types.
    g_float16 = torch.mm(d_float32, f_float32)

Состояние автоматического приведения типов хранится в локальном для потока режиме. Чтобы включить его в новом потоке, необходимо вызвать менеджер контекста или декоратор в этом потоке. Это влияет на torch.nn.DataParallel и torch.nn.parallel.DistributedDataParallel при использовании более одного GPU на процесс (см. Работа с несколькими GPU).

Параметры:
  • device_type (str, обязательный) – Тип устройства. Возможные значения: ‘cuda’, ‘cpu’, ‘mtia’, ‘maia’, ‘xpu’ и ‘hpu’. Тип совпадает с атрибутом type объекта torch.device. Таким образом, тип устройства тензора можно получить с помощью Tensor.device.type.
  • enabled (bool, необязательный) – Следует ли включить автоматическое приведение типов в этой области. Значение по умолчанию: True
  • dtype (torch_dtype, необязательный) – Тип данных для операций, выполняемых с автоматическим приведением типов. Если dtype равен None, используется значение по умолчанию (torch.float16 для CUDA и torch.bfloat16 для CPU), задаваемое функцией get_autocast_dtype(). Значение по умолчанию: None
  • cache_enabled (bool, необязательный) – Следует ли включить кэш весов для автоматического приведения типов. Значение по умолчанию: True
torch.amp.custom_fwd(fwd=None, *, device_type, cast_inputs=None) [источник]

Создаёт вспомогательный декоратор для методов forward пользовательских функций autograd.

Функции autograd являются подклассами torch.autograd.Function. Подробнее см. на странице с примерами.

Параметры:
  • device_type (str) – Тип устройства: ‘cuda’, ‘cpu’, ‘mtia’, ‘maia’, ‘xpu’ и т. д. Тип совпадает с атрибутом type объекта torch.device. Таким образом, тип устройства тензора можно получить с помощью Tensor.device.type.
  • cast_inputs (torch.dtype или None, необязательный, по умолчанию None) – Если значение не равно None и forward выполняется в области с включённым автоматическим приведением типов, входные тензоры с плавающей точкой преобразуются к целевому типу данных (тензоры без плавающей точки не затрагиваются), после чего forward выполняется с отключённым автоматическим приведением типов. Если значение равно None, внутренние операции forward выполняются в текущем состоянии автоматического приведения типов.

Примечание

Если декорированный forward вызывается вне области с включённым автоматическим приведением типов, custom_fwd ничего не делает, а cast_inputs не оказывает эффекта.

torch.amp.custom_bwd(bwd=None, *, device_type) [источник]

Создаёт вспомогательный декоратор для методов обратного прохода пользовательских функций autograd.

Функции autograd являются подклассами torch.autograd.Function. Гарантирует, что backward выполняется в том же состоянии автоматического приведения типов, что и forward. Подробнее см. на странице с примерами.

Параметры:

device_type (str) – Тип устройства: ‘cuda’, ‘cpu’, ‘mtia’, ‘maia’, ‘xpu’ и т. д. Тип совпадает с атрибутом type объекта torch.device. Таким образом, тип устройства тензора можно получить с помощью Tensor.device.type.

class torch.cuda.amp.autocast(enabled=True, dtype=torch.float16, cache_enabled=True) [источник]

См. torch.autocast.

torch.cuda.amp.autocast(args...) устарел. Используйте вместо него torch.amp.autocast("cuda", args...).

torch.cuda.amp.custom_fwd(fwd=None, *, cast_inputs=None) [источник]

torch.cuda.amp.custom_fwd(args...) устарел. Используйте вместо него torch.amp.custom_fwd(args..., device_type='cuda').

torch.cuda.amp.custom_bwd(bwd) [источник]

torch.cuda.amp.custom_bwd(args...) устарел. Используйте вместо него torch.amp.custom_bwd(args..., device_type='cuda').

class torch.cpu.amp.autocast(enabled=True, dtype=torch.bfloat16, cache_enabled=True) [источник]

См. torch.autocast. torch.cpu.amp.autocast(args...) устарел. Используйте вместо него torch.amp.autocast("cpu", args...).

Масштабирование градиентов

Если для прямого прохода некоторой операции используются входные данные типа float16, то обратный проход этой операции создаст градиенты типа float16. Значения градиентов с малым модулем могут быть непредставимы в float16. Эти значения будут округлены до нуля («потеря точности при антипереполнении»), и обновление соответствующих параметров не произойдёт.

Чтобы предотвратить потерю точности при антипереполнении, «масштабирование градиентов» умножает функцию (функции) потерь сети на масштабный коэффициент и запускает обратный проход для масштабированной функции (функций) потерь. Градиенты, распространяющиеся в обратном направлении по сети, масштабируются тем же коэффициентом. Иными словами, модуль значений градиентов увеличивается, поэтому они не округляются до нуля.

Градиент каждого параметра (атрибут .grad) следует привести к исходному масштабу до обновления параметров оптимизатором, чтобы масштабный коэффициент не влиял на скорость обучения.

Примечание

AMP/fp16 подходит не для каждой модели! Например, большинство моделей, предварительно обученных в bf16, не могут работать в числовом диапазоне fp16 с максимальным значением 65504, поэтому градиенты будут переполняться, а не терять точность при антипереполнении. В этом случае масштабный коэффициент может стать меньше 1, чтобы привести градиенты к значениям, представимым в динамическом диапазоне fp16. Хотя можно ожидать, что масштаб всегда будет больше 1, наш GradScaler НЕ гарантирует этого, чтобы сохранить производительность. Если при работе с AMP/fp16 в функции потерь или градиентах появляются NaN, проверьте совместимость модели.

class torch.cuda.amp.GradScaler(init_scale=65536.0, growth_factor=2.0, backoff_factor=0.5, growth_interval=2000, enabled=True) [источник]

См. torch.amp.GradScaler. torch.cuda.amp.GradScaler(args...) устарел. Используйте вместо него torch.amp.GradScaler("cuda", args...).

class torch.cpu.amp.GradScaler(init_scale=65536.0, growth_factor=2.0, backoff_factor=0.5, growth_interval=2000, enabled=True) [источник]

См. torch.amp.GradScaler. torch.cpu.amp.GradScaler(args...) устарел. Используйте вместо него torch.amp.GradScaler("cpu", args...).

Справочник операций Autocast

Допустимость операций

Операции, выполняемые в float64 или с типами данных, отличными от чисел с плавающей точкой, не поддерживают autocast и будут выполняться с этими типами независимо от того, включен ли autocast.

Поддерживаются только операции, не изменяющие исходный объект, и методы Tensor. Варианты операций на месте и вызовы, явно передающие Tensor типа out=..., разрешены в областях, где включен autocast, но autocast к ним применяться не будет. Например, в области, где включен autocast, a.addmm(b, c) может использовать autocast, а a.addmm_(b, c) и a.addmm(b, c, out=d) — нет. Для лучшей производительности и стабильности в областях, где включен autocast, предпочтительны операции, не изменяющие исходный объект.

Операции, вызванные с явным аргументом dtype=..., не поддерживают autocast и будут создавать выходные данные с учетом аргумента dtype.

Особенности операций CUDA

В следующих списках описано поведение допустимых операций в областях, где включен autocast. К этим операциям всегда применяется autocast, независимо от того, вызываются ли они в составе torch.nn.Module, как функция или как метод torch.Tensor. Если функции доступны в нескольких пространствах имен, autocast применяется к ним независимо от пространства имен.

К операциям, не указанным ниже, autocast не применяется. Они выполняются с типом, определяемым их входными данными. Однако autocast может изменить тип, с которым выполняются неуказанные операции, если они следуют за операциями, к которым применялся autocast.

Если операция не указана, предполагается, что она численно устойчива в float16. Если вы считаете, что неуказанная операция численно неустойчива в float16, сообщите об этом, создав issue.

Операции CUDA, для которых autocast может преобразовать тип в float16

__matmul__, addbmm, addmm, addmv, addr, baddbmm, bmm, chain_matmul, multi_dot, conv1d, conv2d, conv3d, conv_transpose1d, conv_transpose2d, conv_transpose3d, GRUCell, linear, LSTMCell, matmul, mm, mv, prelu, RNNCell

Операции CUDA, для которых autocast может преобразовать тип в float32

__pow__, __rdiv__, __rpow__, __rtruediv__, acos, asin, binary_cross_entropy_with_logits, cosh, cosine_embedding_loss, cdist, cosine_similarity, cross_entropy, cumprod, cumsum, dist, erfinv, exp, expm1, group_norm, hinge_embedding_loss, kl_div, l1_loss, layer_norm, log, log_softmax, log10, log1p, log2, margin_ranking_loss, mse_loss, multilabel_margin_loss, multi_margin_loss, nll_loss, norm, normalize, pdist, poisson_nll_loss, pow, prod, reciprocal, rsqrt, sinh, smooth_l1_loss, soft_margin_loss, softmax, softmin, softplus, sum, renorm, tan, triplet_margin_loss

Операции CUDA, повышающие тип до наиболее широкого типа входных данных

Для стабильной работы этим операциям не требуется определенный тип данных, однако они принимают несколько входных значений и требуют, чтобы типы данных этих значений совпадали. Если все входные значения имеют тип float16, операция выполняется в float16. Если хотя бы одно входное значение имеет тип float32, autocast преобразует все входные значения в float32 и выполняет операцию в float32.

addcdiv, addcmul, atan2, bilinear, cross, dot, grid_sample, index_put, scatter_add, tensordot

Некоторые не указанные здесь операции (например, бинарные операции вроде add) самостоятельно повышают типы входных данных без участия autocast. Если входные значения имеют смешанные типы float16 и float32, эти операции выполняются в float32 и создают выходные данные типа float32 независимо от того, включен ли autocast.

Предпочитайте binary_cross_entropy_with_logits вместо binary_cross_entropy

При обратном распространении через torch.nn.functional.binary_cross_entropy() (и torch.nn.BCELoss, который его оборачивает) могут возникать градиенты, которые невозможно представить в float16. В областях, где включен autocast, входные данные прямого прохода могут иметь тип float16, а значит, градиент обратного прохода должен представляться в float16 (преобразование входных данных прямого прохода типа float16 в float32 не помогает, поскольку при обратном проходе это преобразование придется отменить). Поэтому binary_cross_entropy и BCELoss вызывают ошибку в областях, где включен autocast.

Во многих моделях непосредственно перед слоем бинарной кросс-энтропии используется слой sigmoid. В этом случае объедините два слоя с помощью torch.nn.functional.binary_cross_entropy_with_logits() или torch.nn.BCEWithLogitsLoss. К binary_cross_entropy_with_logits и BCEWithLogits можно безопасно применять autocast.

Особенности операций XPU (экспериментально)

В следующих списках описано поведение допустимых операций в областях, где включен autocast. К этим операциям всегда применяется autocast, независимо от того, вызываются ли они в составе torch.nn.Module, как функция или как метод torch.Tensor. Если функции доступны в нескольких пространствах имен, autocast применяется к ним независимо от пространства имен.

К операциям, не указанным ниже, autocast не применяется. Они выполняются с типом, определяемым их входными данными. Однако autocast может изменить тип, с которым выполняются неуказанные операции, если они следуют за операциями, к которым применялся autocast.

Если операция не указана, предполагается, что она численно устойчива в float16. Если вы считаете, что неуказанная операция численно неустойчива в float16, сообщите об этом, создав issue.

Операции XPU, для которых autocast может преобразовать тип в float16

addbmm, addmm, addmv, addr, baddbmm, bmm, chain_matmul, multi_dot, conv1d, conv2d, conv3d, conv_transpose1d, conv_transpose2d, conv_transpose3d, GRUCell, linear, LSTMCell, matmul, mm, mv, RNNCell

Операции XPU, для которых autocast может преобразовать тип в float32

__pow__, __rdiv__, __rpow__, __rtruediv__, binary_cross_entropy_with_logits, cosine_embedding_loss, cosine_similarity, cumsum, dist, exp, group_norm, hinge_embedding_loss, kl_div, l1_loss, layer_norm, log, log_softmax, margin_ranking_loss, nll_loss, normalize, poisson_nll_loss, pow, reciprocal, rsqrt, soft_margin_loss, softmax, softmin, sum, triplet_margin_loss

Операции XPU, повышающие тип до наиболее широкого типа входных данных

Для стабильной работы этим операциям не требуется определенный тип данных, однако они принимают несколько входных значений и требуют, чтобы типы данных этих значений совпадали. Если все входные значения имеют тип float16, операция выполняется в float16. Если хотя бы одно входное значение имеет тип float32, autocast преобразует все входные значения в float32 и выполняет операцию в float32.

bilinear, cross, grid_sample, index_put, scatter_add, tensordot

Некоторые не указанные здесь операции (например, бинарные операции вроде add) самостоятельно повышают типы входных данных без участия autocast. Если входные значения имеют смешанные типы float16 и float32, эти операции выполняются в float32 и создают выходные данные типа float32 независимо от того, включен ли autocast.

Особенности поведения отдельных операций на CPU

В следующих списках описано поведение операций, поддерживающих autocast, в областях с включённым autocast. Эти операции всегда подвергаются автоматическому приведению типов, независимо от того, вызываются ли они как часть torch.nn.Module, как функция или как метод torch.Tensor. Если функции доступны в нескольких пространствах имён, они подвергаются автоматическому приведению типов независимо от пространства имён.

Операции, не перечисленные ниже, не подвергаются автоматическому приведению типов. Они выполняются с типом, определяемым типами их входных данных. Однако autocast всё же может изменить тип, с которым выполняются неуказанные операции, если им предшествуют операции с автоматическим приведением типов.

Если операция не указана в списке, мы считаем её численно устойчивой в bfloat16. Если вы считаете, что неуказанная операция численно неустойчива в bfloat16, сообщите об этом, создав issue. float16 использует те же списки, что и bfloat16.

Операции CPU, для которых возможно автоматическое приведение к bfloat16

conv1d, conv2d, conv3d, bmm, mm, linalg_vecdot, baddbmm, addmm, addbmm, linear, matmul, _convolution, conv_tbc, mkldnn_rnn_layer, conv_transpose1d, conv_transpose2d, conv_transpose3d, prelu, scaled_dot_product_attention, _native_multi_head_attention

Операции CPU, для которых возможно автоматическое приведение к float32

avg_pool3d, binary_cross_entropy, grid_sampler, grid_sampler_2d, _grid_sampler_2d_cpu_fallback, grid_sampler_3d, polar, prod, quantile, nanquantile, stft, cdist, trace, view_as_complex, cholesky_inverse, cholesky_solve, inverse, lu_solve, orgqr, inverse, ormqr, pinverse, max_pool3d, max_unpool2d, max_unpool3d, adaptive_avg_pool3d, reflection_pad1d, reflection_pad2d, replication_pad1d, replication_pad2d, replication_pad3d, mse_loss, cosine_embedding_loss, nll_loss, nll_loss2d, hinge_embedding_loss, poisson_nll_loss, cross_entropy_loss, l1_loss, huber_loss, margin_ranking_loss, soft_margin_loss, triplet_margin_loss, multi_margin_loss, ctc_loss, kl_div, multilabel_margin_loss, binary_cross_entropy_with_logits, fft_fft, fft_ifft, fft_fft2, fft_ifft2, fft_fftn, fft_ifftn, fft_rfft, fft_irfft, fft_rfft2, fft_irfft2, fft_rfftn, fft_irfftn, fft_hfft, fft_ihfft, linalg_cond, linalg_matrix_rank, linalg_solve, linalg_cholesky, linalg_svdvals, linalg_eigvals, linalg_eigvalsh, linalg_inv, linalg_householder_product, linalg_tensorinv, linalg_tensorsolve, fake_quantize_per_tensor_affine, geqrf, _lu_with_info, svd, triangular_solve, fractional_max_pool2d, fractional_max_pool3d, adaptive_max_pool3d, multilabel_margin_loss_forward, linalg_qr, linalg_cholesky_ex, linalg_svd, linalg_eig, linalg_eigh, linalg_lstsq, linalg_inv_ex

Операции CPU, повышающие тип до наиболее широкого типа входных данных

Для обеспечения устойчивости этим операциям не требуется определённый тип данных, но они принимают несколько входных данных и требуют, чтобы их типы данных совпадали. Если все входные данные имеют тип bfloat16, операция выполняется с типом bfloat16. Если хотя бы один входной элемент имеет тип float32, autocast приводит все входные данные к типу float32 и выполняет операцию с типом float32.

cat, stack, index_copy

Некоторые не указанные здесь операции (например, бинарные операции, такие как add) самостоятельно выполняют продвижение типов входных данных без вмешательства autocast. Если среди входных данных есть элементы типов bfloat16 и float32, эти операции выполняются с типом float32 и возвращают результат типа float32 независимо от того, включён ли autocast.

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/amp.html

Spec-Zone.ru

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