Spec-Zone.ru › PyTorch 2.14

Сообщение об ошибках

Создано: 29 июл. 2025 г. | Последнее обновление: 03 дек. 2025 г.

Если предложенных обходных решений оказалось недостаточно, чтобы заставить работать torch.compile, сообщите о проблеме в PyTorch. Однако есть несколько вещей, которые могут значительно упростить нам работу.

Исключение компонентов

Проверьте, какой компонент стека torch.compile вызывает проблему, используя параметр backend= для torch.compile. В частности, попробуйте:

  • torch.compile(fn, backend="eager"), который запускает только TorchDynamo — компонент torch.compile, отвечающий за захват графа.
  • torch.compile(fn, backend="aot_eager"), который запускает TorchDynamo и AOTAutograd, дополнительно генерирующий граф обратного прохода во время компиляции.
  • torch.compile(fn, backend="aot_eager_decomp_partition"), который запускает TorchDynamo и AOTAutograd с декомпозициями/разбиениями операторов.
  • torch.compile(fn, backend="inductor"), который запускает TorchDynamo, AOTAutograd и TorchInductor — фоновый ML-компилятор, генерирующий скомпилированные ядра.

Если ошибка возникает только при использовании бэкенда Inductor, можно дополнительно протестировать различные режимы Inductor:

  • torch.compile(fn, backend="inductor", mode="default")
  • torch.compile(fn, backend="inductor", mode="reduce-overhead")
  • torch.compile(fn, backend="inductor", mode="max-autotune")

Также можно проверить, не вызывают ли динамические формы проблемы с каким-либо бэкендом:

  • torch.compile(fn, dynamic=True) (всегда использовать динамические формы)
  • torch.compile(fn, dynamic=False) (никогда не использовать динамические формы)
  • torch.compile(fn, dynamic=None) (автоматическое использование динамических форм)

Бисекция

Вы пробовали последнюю nightly-сборку? Раньше что-то работало, а теперь перестало? Можете выполнить бисекцию, чтобы определить первую nightly-сборку, в которой возникает проблема? Бисекция особенно полезна при регрессиях производительности, точности или времени компиляции, когда источник проблемы не очевиден.

Создание воспроизводящего примера

Создание воспроизводящих примеров требует немало усилий, и ничего страшного, если у вас нет на это времени. Однако если вы готовы помочь, но не знакомы с внутренним устройством torch.compile, создание автономного воспроизводящего примера может значительно повысить наши шансы исправить ошибку. Если воспроизводящего примера нет, в отчёте об ошибке должно быть достаточно информации, чтобы мы могли определить первопричину проблемы и написать такой пример с нуля.

Ниже приведён список полезных воспроизводящих примеров, расположенных от наиболее предпочтительного к наименее предпочтительному:

  1. Небольшой автономный воспроизводящий пример: Скрипт без внешних зависимостей, содержащий менее 100 строк кода и воспроизводящий проблему при запуске.
  2. Большой автономный воспроизводящий пример: Даже если он большой, автономность — огромное преимущество!
  3. Неавтономный воспроизводящий пример с управляемыми зависимостями: Например, если проблему можно воспроизвести, запустив скрипт после pip install transformers, это приемлемый вариант. Скорее всего, мы сможем его запустить и изучить проблему.
  4. Неавтономный воспроизводящий пример, требующий значительной настройки: Это может включать загрузку наборов данных, несколько этапов настройки окружения или определённые версии системных библиотек, требующие образа Docker. Чем сложнее настройка, тем труднее нам воссоздать это окружение.

Примечание

Docker упрощает настройку, но усложняет изменение окружения, поэтому это не идеальное решение. Тем не менее при необходимости мы воспользуемся им.

По возможности постарайтесь сделать воспроизводящий пример однопроцессным: такие примеры проще отлаживать, чем многопроцессные.

Кроме того, ниже приведён неполный список аспектов, которые стоит проверить в вашей ситуации и попытаться воспроизвести в примере:

  • Autograd. Были ли у вас тензорные входные данные с requires_grad=True? Вызывали ли вы backward() для выходных данных?
  • Динамические формы. Задавали ли вы dynamic=True? Или запускали тестовый код несколько раз с разными формами?
  • Пользовательские операторы. Используется ли в реальном рабочем процессе пользовательский оператор? Можно ли воспроизвести некоторые его важные свойства с помощью API пользовательских операторов Python?
  • Конфигурация. Задали ли вы ту же конфигурацию? Сюда входят настройки torch._dynamo.config и torch._inductor.config, а также аргументы torch.compile, например backend / mode.
  • Менеджеры контекста. Воспроизвели ли вы все активные менеджеры контекста? Это могут быть torch.no_grad, автоматическая смешанная точность, TorchFunctionMode / TorchDispatchMode, контрольные точки активаций, скомпилированный autograd и т. д.
  • Подклассы тензоров. Используется ли подкласс тензора?

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

Spec-Zone.ru

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