Подкреплённые и неподкреплённые Symints
Создано: 22 сентября 2025 г. | Последнее обновление: 3 декабря 2025 г.
Подкреплённые SymInts — это символьные целые числа, связанные с конкретным значением, или «подсказкой». Это означает, что torch может использовать эти значения для принятия решений о потоке управления, например, для определения того, какую ветвь кода выполнить. Обычно они получаются в результате операций, в которых размер или значение известны или могут быть выведены.
Неподкреплённые SymInts — это символьные целые числа, не имеющие конкретного значения или подсказки. Они часто возникают в результате зависящих от данных операций, таких как .nonzero() или .item(), когда размер или значение нельзя определить во время компиляции. Поскольку у них нет конкретного значения, их нельзя использовать для принятия решений о потоке управления, а попытка сделать это приводит к разрыву графа.
Для неподкреплённых SymInts используется рассуждение о неявном размере, которое особенно полезно при работе с проблемой повторной компиляции при специализации на 0/1.
Вкратце, подкреплённые SymInts имеют известные значения, которые можно использовать для принятия решений, тогда как у неподкреплённых SymInts таких значений нет, поэтому для предотвращения разрывов графа требуется особая обработка.
Неподкреплённые символьные целые числа могут быть слишком ограничительными, из-за чего большинство программ PyTorch не будут работать. Чтобы решить эту проблему, можно использовать следующие методы и API в качестве обходного решения:
- Используйте API более высокого уровня, такие как
empty, вместоempty_stridedдля создания тензоров. Это гарантирует, что тензор будет неперекрывающимся и плотным, что позволит избежать ненужной сортировки шагов и создания проверок, а также ненужного повторного вычисления этих свойств. - Измените код так, чтобы предварительно вычисляемые свойства вычислялись лениво. Это гарантирует, что проверки для неподкреплённых символьных целых чисел будут применяться только при необходимости, снижая вычислительные затраты.
Как использовать неподкреплённые значения
Чтобы использовать API для неподкреплённых значений, замените mark_dynamic на mark_unbacked и TORCH_COMPILE_DYNAMIC_SOURCES на TORCH_COMPILE_UNBACKED_SOURCES. Это указывает компилятору рассматривать входные данные как неподкреплённые.
© 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/dynamic_shapes_backed_unbacked.html