The post has been translated automatically. Original language: Russian
On September 2, 2026, PyTorch 2.14.0 was released. The release touches the compiler, distributed learning, platforms, and at the same time finally removes several APIs that have been outdated for years.
Compiler: branching, loops, and dynamic dimensions
The main change in the graph layer is the torch.switch operation. Previously, the condition inside the compiled graph was expressed in terms of torch.cond, a fork in exactly two branches, and the nested conditions had to be stacked in a ladder. Torch.switch now generalizes the construction to a multi-branch selection. In addition, torch.while_loop is captured in the CUDA graph: a loop with the condition no longer breaks the capture.
Dynamic dimensions have been given a declarative form: the dynamic_spec decorator attaches the specification directly to the function, and three mechanisms understand it at once — torch.compile, torch.export, and make_fx. Before that, each of the three had its own way to announce that the batch axis or the length of the sequence was changing.
Added experimental support for complex tensors. In terms of performance: NVGEMM brings CUTLASS cores generated via CuTeDSL to Inductor, and they participate in autotuning on a par with Triton and ATen — the selection of the best core is based on three candidates, not two.
Distributed learning: nccl2 and node failure as a routine event
The nccl2 backend has appeared in PyTorch Distributed: a complete collective operations contract on non-blocking communicators with their vigorous separation. The practical difference is that an operation that drops or freezes on one rank does not have to leave the entire communicator in an undefined state.
More importantly, fault tolerance has become a full-fledged concept of the c10d layer. The process group can now be reconfigured on the spot, without re—creating the environment - dropping a node no longer automatically means restarting the job from the last checkpoint. One-way RMA windows have been added. And Flight Recorder— a diagnostic collective operations log that previously worked only with NCCL, is now available for any backend.
Platforms and remote APIs
Apple Silicon has received native linear algebra: SVD on the Jacobi kernel, eigh, QR and Cholesky decomposition. The wheels are assembled for ROCm 7.14, Intel XPU has learned how to capture the graph natively. Builds for Python 3.15, including those without global lock, have reached Windows and macOS.
Of the incompatible changes, the most noticeable is that torch.cholesky and torch.qr have been permanently removed: now they throw a RuntimeError indicating analogues from torch.linalg. The use_cuda argument has been removed from the profiler. The gradient of the clamp on the borders has changed: It is zero with scalar boundaries, and equally divided with tensor boundaries. The split_group function for ranks outside the group returns a special value instead of None, and Python user process groups must accept the backend argument. The obsolescence of TorchScript has been announced: its API issues visible warnings and advises switching to torch.compile or torch.export.
What does this mean in practice?
The update should be planned with a test run, and not as a replacement for the version number in the dependency file. The first thing that breaks down quietly is the deleted torch.cholesky and torch.qr: they are easy to find, but they often hide in old preprocessing utilities that no one has opened for years. Secondly, clamp gradients: this is not a mistake, but a refinement of semantics at undifferentiable boundaries, but if the training rests on clamp, the numbers after updating will be different, and there is no need to write off the discrepancy of metrics as randomness.
The third concerns distributed learning: user process groups and the code that checks the result of split_group for None will have to be edited by hand — the error will pop up in runtime on a multi-node startup. It is more reasonable to make the transition to nccl2 in a separate step, after the update. And if TorchScript is still alive in the project, obsolescence warnings are a signal to start inventory, not a reason to jam logs with a filter.
The draft text was prepared with the participation of AI, the facts were checked against the original source — the official notes for the release of PyTorch 2.14.0 on GitHub.
Второго сентября 2026 года вышел PyTorch 2.14.0. Релиз трогает компилятор, распределённое обучение, платформы и заодно окончательно убирает несколько API, устаревших не первый год.
Компилятор: ветвление, циклы и динамические размерности
Главное изменение в графовом слое — операция torch.switch. Раньше условие внутри компилируемого графа выражалось через torch.cond, развилку ровно на две ветви, и вложенные условия приходилось складывать в лестницу. Теперь torch.switch обобщает конструкцию до многоветвевого выбора. Кроме того, torch.while_loop захватывается в CUDA-граф: цикл с условием больше не разрывает захват.
Динамические размерности получили декларативную форму: декоратор dynamic_spec прикрепляет спецификацию прямо к функции, и понимают её три механизма сразу — torch.compile, torch.export и make_fx. До этого способ объявить, что ось батча или длина последовательности меняются, у каждого из трёх был свой.
Добавлена экспериментальная поддержка комплексных тензоров. По производительности: NVGEMM приносит в Inductor ядра CUTLASS, сгенерированные через CuTeDSL, и они участвуют в автотюнинге наравне с Triton и ATen — подбор лучшего ядра идёт по трём кандидатам, а не по двум.
Распределённое обучение: nccl2 и отказ узла как штатное событие
В PyTorch Distributed появился бэкенд nccl2: полный контракт коллективных операций на неблокирующих коммуникаторах с их энергичным разделением. Практическая разница в том, что операция, упавшая или зависшая на одном ранге, не обязана оставлять весь коммуникатор в неопределённом состоянии.
Важнее другое: отказоустойчивость стала полноправным понятием слоя c10d. Группу процессов теперь можно переконфигурировать на месте, без пересоздания окружения — выпадение узла перестаёт автоматически означать перезапуск задания с последней контрольной точки. Добавлены односторонние RMA-окна. И Flight Recorder — диагностический журнал коллективных операций, раньше работавший только с NCCL, — теперь доступен для любого бэкенда.
Платформы и удалённые API
Apple Silicon получил нативную линейную алгебру: SVD на ядре Якоби, eigh, QR и разложение Холецкого. Собраны колёса под ROCm 7.14, Intel XPU научился нативному захвату графа. Сборки для Python 3.15, в том числе без глобальной блокировки, доехали до Windows и macOS.
Из несовместимых изменений самое заметное — окончательно удалены torch.cholesky и torch.qr: теперь они бросают RuntimeError с указанием на аналоги из torch.linalg. У профилировщика удалён аргумент use_cuda. Изменился градиент у clamp на границах: со скалярными границами он нулевой, с тензорными делится поровну. Функция split_group для не входящих в группу рангов возвращает специальное значение вместо None, а пользовательские группы процессов на Python обязаны принимать аргумент backend. Объявлено об устаревании TorchScript: его API выдают видимые предупреждения и советуют переходить на torch.compile или torch.export.
Что это значит на практике
Обновление стоит планировать с прогоном тестов, а не как замену номера версии в файле зависимостей. Первое, что ломается тихо, — удалённые torch.cholesky и torch.qr: поиском они находятся легко, но часто прячутся в старых утилитах предобработки, которые никто не открывал годами. Второе — градиенты у clamp: это не ошибка, а уточнение семантики на недифференцируемых границах, но если обучение упирается в clamp, числа после обновления будут другими, и списывать расхождение метрик на случайность не надо.
Третье касается распределённого обучения: пользовательские группы процессов и код, проверяющий результат split_group на None, придётся править руками — ошибка вылезет в рантайме на многоузловом запуске. Переход на nccl2 разумнее делать отдельным шагом, уже после обновления. А если в проекте ещё живёт TorchScript, предупреждения об устаревании — сигнал начать инвентаризацию, а не повод глушить логи фильтром.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные заметки к выпуску PyTorch 2.14.0 на GitHub.