PyTorch

PyTorch — открытая библиотека для машинного обучения, основанная на библиотеке Torch[1][2][3], предназначенная для задач, таких как компьютерное зрение, исследование в области глубокого обучения[4] и обработка естественного языка[4]. Первоначальная разработка велась Meta AI, в дальнейшем проект стал под эгидой Linux Foundation[5][6][7][8]. Является одной из самых популярных платформ глубокого обучения наряду с TensorFlow[9] и распространяется как свободное ПО под изменённой BSD-лицензией. Хотя большее внимание уделяется интерфейсу на Python, PyTorch также имеет интерфейс на C++[10].

PyTorch использует тензоры как основной тип данных, похожий на массивы NumPy. Обучение моделей реализовано с помощью системы автоматического дифференцирования Autograd, которая строит ориентированный ациклический граф для прямого прохода модели по заданному входу и, используя правило цепочки, вычисляет градиенты по всей модели[11]. Библиотека умеет прозрачно использовать SIMD-вычисления, включая GPU (GPGPU).

На PyTorch построен ряд коммерческих и исследовательских архитектур для глубокого обучения, включая Tesla Autopilot, Pyro от Uber[12], Transformers от Hugging Face[13][14] и Catalyst[15][16].

Общие сведения
PyTorch
Тип библиотека для машинного обучения и глубокого обучения
Авторы Адам Пашке, Сэм Гросс, Сумит Чинтала, Грегори Чанан
Разработчик Meta AI
Написана на Python, C++, CUDA
Интерфейс программный интерфейс (API)
Движки C++-бэкенд
Операционные системы Linux, macOS, Windows
Языки интерфейса английский
Первый выпуск сентябрь 2016
Аппаратные платформы IA-32, x86-64, ARM64
Последняя версия 2.9.1 (12 ноября 2025)
Репозиторий github.com/pytorch/pytor…
Состояние активное
Лицензия BSD-3
Сайт pytorch.org

Определения

  • C++ — компилируемый, статически типизированный язык программирования общего назначения.
  • ABI — набор соглашений для доступа приложения к операционной системе и другим низкоуровневым сервисам, спроектированный для переносимости исполняемого кода между машинами, имеющими совместимые ABI.
  • NumPy — библиотека для языка программирования Python, обеспечивающая поддержку больших многомерных массивов и матриц, а также обширный набор математических функций для операций над этими массивами.

История

В 2001 году библиотека Torch была написана и выпущена под лицензией GPL. Это была библиотека для машинного обучения на C++, поддерживавшая методы, включая нейронные сети, метод опорных векторов (SVM), скрытые марковские модели и др.[17][18][19] В 2012 году вышла улучшенная версия Torch7. Разработка Torch прекратилась в 2018 году и была поглощена проектом PyTorch[20].

Компания Meta (ранее — Facebook) занималась разработкой как PyTorch, так и Convolutional Architecture for Fast Feature Embedding (Caffe2), но модели, создаваемые этими фреймворками, были несовместимы друг с другом. Для решения этой проблемы в сентябре 2017 года Meta и Microsoft представили проект Open Neural Network Exchange (ONNX), обеспечивающий переносимость моделей между фреймворками. В конце марта 2018 года Caffe2 был объединён с PyTorch[21]. В сентябре 2022 года Meta[22] объявила, что дальнейшее развитие PyTorch будет курировать независимый Фонд PyTorch, организованный как дочерняя структура Linux Foundation[23].

PyTorch 2.0 вышла 15 марта 2023 года. Одним из ключевых нововведений стала технология TorchDynamo — компилятор на уровне Python, ускоряющий выполнение кода до 2 раз[24][25]. В этой же версии была представлена функция torch.nn.functional.scaled_dot_product_attention (SDPA) — высокопроизводительная реализация механизма внимания для ускорения моделей-трансформеров[26].

Дальнейшее развитие было направлено на улучшение производительности и расширение возможностей компилятора. В версии 2.1 (2023) была представлена функция torch.export для захвата графа модели[27]. В версии 2.2 (2024) в SDPA была интегрирована библиотека FlashAttention-v2, что значительно ускорило её работу[28], а версия 2.3 (2024) добавила поддержку пользовательских ядер Triton внутри torch.compile[29].

15 октября 2025 года вышла версия 2.9.0, в которой был представлен стабильный ABI для библиотеки libtorch и технология Symmetric Memory для упрощения программирования на нескольких GPU[30]. 12 ноября того же года последовал корректирующий выпуск 2.9.1 для исправления ошибок[31].

undefined

Архитектура

Архитектура PyTorch имеет двухуровневую структуру: на верхнем уровне находится основной интерфейс (API) на языке Python, а ядром библиотеки является высокопроизводительный бэкенд, написанный на C++[32][33]. Взаимодействие между Python-интерфейсом и C++ бэкендом осуществляется через специальные привязки (bindings)[34].

Бэкенд выполняет все основные вычисления и состоит из нескольких ключевых компонентов[32]:

  • ATen — библиотека на C++, которая является ядром для всех тензорных вычислений[35].
  • Autograd — система автоматического дифференцирования, которая вычисляет градиенты, необходимые для обучения моделей[35].
  • LibTorch — полноценный C++ интерфейс, позволяющий определять, обучать и развёртывать модели без использования Python[32].
  • Диспетчер операторов (Operator Dispatcher) — механизм, который вызывает конкретную реализацию операции в зависимости от устройства (CPU, GPU) и типа данных, что обеспечивает расширяемость для поддержки нового оборудования[34].

Одной из ключевых особенностей архитектуры PyTorch является использование динамического вычислительного графа, также известного как «определение по ходу выполнения» (define-by-run)[35][36]. В отличие от фреймворков со статическими графами, где граф вычислений определяется и компилируется до запуска, в PyTorch он строится «на лету» в процессе выполнения кода[33]. Такой подход обеспечивает большую гибкость и значительно упрощает отладку моделей[33].

Тензоры в PyTorch

Основной тип данных в PyTorch — это Tensor (torch.Tensor), предназначенный для хранения и обработки однородных многомерных прямоугольных массивов чисел. Тензоры PyTorch схожи с массивами NumPy, но могут обрабатываться с использованием GPU, совместимого с CUDA, например, NVIDIA[37], а также поддерживается интеграция с платформами AMD по технологии ROCm и с Metal Framework от Apple[38]. Ядром для этих тензорных вычислений является C++ библиотека ATen.

PyTorch поддерживает различные подтипы тензоров[39].

Отметим, что термин «тензор» здесь отличается от используемого в математике или физике — в машинном обучении так обозначают многомерные массивы.

Нейронные сети в PyTorch

PyTorch предоставляет модуль nn (torch.nn) для описания и обучения нейронных сетей. Модуль содержит широкий набор строительных блоков, включая различные слои и функции активации, позволяя создавать сложные модели. Нейросети определяются как классы, унаследованные от torch.nn.Module, а последовательность операций задаётся в методе forward().

Начиная с версии 2.0, в модуль были добавлены значительные улучшения для повышения производительности. Ключевым нововведением стала функция torch.nn.functional.scaled_dot_product_attention (SDPA) — высокопроизводительная реализация механизма внимания для ускорения моделей-трансформеров. В версии 2.2 её производительность была дополнительно увеличена за счёт интеграции с библиотекой FlashAttention-v2. Другие нововведения включают поддержку полуструктурированной разреженности (2:4) для ускорения моделей на графических процессорах NVIDIA и функцию torch.export для захвата графа модели с целью дальнейшей оптимизации и развёртывания.

Форматы моделей

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

Словарь состояний (state_dict) — это наиболее распространённый и рекомендуемый способ сохранения модели[40]. Он представляет собой объект словаря в Python, который содержит только обучаемые параметры модели (веса и смещения), но не её архитектуру. Такой подход обеспечивает гибкость, так как для загрузки весов достаточно иметь класс модели, совместимый по архитектуре[41]. Файлы с параметрами обычно имеют расширения .pth или .pt[42]. Внутренне для сериализации используется модуль pickle, а начиная с версии 1.6 по умолчанию применяется формат на основе ZIP-архива[43]. Помимо параметров модели, для возобновления обучения часто сохраняют «контрольные точки» (checkpoints), которые также включают состояние оптимизатора и номер эпохи; для таких файлов принято использовать расширение .tar[40].

TorchScript — это формат, который позволяет сериализовать модель PyTorch в статическое представление графа вычислений. Это делает модель независимой от среды Python и позволяет выполнять её в других окружениях, например, на C++ или на мобильных устройствах[44]. Модель, сохранённая как TorchScript, представляет собой единый файл (обычно с расширением .pt), содержащий как архитектуру, так и веса, что делает его полностью автономным[44].

ONNX (Open Neural Network Exchange) — это открытый стандарт, предназначенный для обеспечения совместимости моделей между различными фреймворками машинного обучения. PyTorch позволяет экспортировать модель в формат .onnx[45]. Это даёт возможность использовать обученную модель в других средах, оптимизированных для инференса, таких как TensorFlow, ONNX Runtime или TensorRT[46].

Разработка и версии

Разработка PyTorch ведётся под эгидой PyTorch Foundation и фокусируется на повышении производительности, расширении аппаратной поддержки и развитии экосистемы для ИИ[47]. Команда разработчиков из Meta регулярно публикует дорожные карты (roadmaps), в которых описываются планы на ближайшие полгода[48][49]. Ключевые направления включают улучшение компилятора `torch.compile`, поддержку распределённого обучения и развёртывания моделей на конечных устройствах (Edge), а также интеграцию с новым оборудованием, таким как GPU от NVIDIA (CUDA), AMD (ROCm) и Intel (XPU).

Цикл выпуска новых версий PyTorch включает несколько этапов. Разработка ведётся непрерывно, и самые последние изменения доступны в ночных сборках (Nightly Builds), которые генерируются ежедневно, но не являются стабильными[50]. Перед выпуском новой минорной версии создаётся отдельная ветка релиза, в которой формируется серия версий-кандидатов (Release Candidates, RC)[51]. Они предназначены для тестирования и исправления ошибок перед финальным выпуском и доступны в тестовых репозиториях[51]. После стабилизации выходит стабильный релиз (Stable), который рекомендуется для производственного использования. Впоследствии для него могут выпускаться корректирующие выпуски (patch releases) для исправления критических ошибок[51].

Начиная с версии 2.8, была введена упрощённая система классификации API, заменившая предыдущие категории «Prototype», «Beta» и «Stable»[52][53]. Новая система делит функции на два типа:

  • Stable — API функции является стабильным, и для него гарантируется обратная совместимость.
  • Unstable — API функции находится в активной разработке и может измениться. Эта категория объединяет то, что ранее называлось «Prototype» и «Beta»[53].

Несмотря на это, в примечаниях к выпускам отдельные экспериментальные функции, включённые в стабильный релиз, всё ещё могут помечаться как «BETA FEATURES»[54].

Пример

Ниже приведён простой пример работы с тензорами:

import torch
dtype = torch.float
device = torch.device("cpu")  # Все вычисления выполняются на CPU
# device = torch.device("cuda:0")  # Все вычисления выполняются на GPU

# Создать тензор со случайными числами
a = torch.randn(2, 3, device=device, dtype=dtype)
print(a)
# Вывод: tensor([[-1.1884,  0.8498, -1.7129],
#                [-0.8816,  0.1944,  0.5847]])

b = torch.randn(2, 3, device=device, dtype=dtype)
print(b)
# Вывод: tensor([[ 0.7178, -0.8453, -1.3403],
#                [ 1.3262,  1.1512, -1.7070]])

print(a * b)
# Вывод: tensor([[-0.8530, -0.7183,  2.58],
#                [-1.1692,  0.2238, -0.9981]])

print(a.sum()) 
# Вывод: tensor(-2.1540)

print(a[1, 2])  # Элемент в третьем столбце второй строки (с нуля)
# Вывод: tensor(0.5847)

print(a.max())
# Вывод: tensor(0.8498)

Следующий пример задаёт простую нейронную сеть на основе линейных слоёв с использованием модуля nn:

from torch import nn  # Импорт модуля nn из PyTorch

class NeuralNetwork(nn.Module):  # Сеть определяется как класс
    def __init__(self):  # Слои и переменные описываются в __init__
        super().__init__()           # Необходимый вызов суперкласса
        self.flatten = nn.Flatten()  # Слой выпрямления
        self.linear_relu_stack = nn.Sequential(  # «Стек» слоёв
            nn.Linear(28 * 28, 512),  # Линейные слои с входом/выходом указанной размерности
            nn.ReLU(),                # ReLU — одна из функций активации
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10), 
        )

    def forward(self, x):  # Прямой проход (forward)
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

Примечания

  1. Yegulalp, Serdar. Facebook brings GPU-powered machine learning to Python (англ.), InfoWorld (19 января 2017). Архивировано 12 июля 2018. Дата обращения: 11 декабря 2017.
  2. Lorica, Ben Why AI and machine learning researchers are beginning to embrace PyTorch (англ.). O'Reilly Media (3 августа 2017). Дата обращения: 11 декабря 2017. Архивировано 17 мая 2019 года.
  3. Ketkar, Nikhil. Introduction to PyTorch // Deep Learning with Python : [англ.]. — Apress, Berkeley, CA, 2017. — P. 195–208. — ISBN 9781484227657. — doi:10.1007/978-1-4842-2766-4_12.
  4. 1 2 Moez Ali. NLP with PyTorch: A Comprehensive Guide (англ.). datacamp.com (июнь 2023). Дата обращения: 1 апреля 2024. Архивировано 1 апреля 2024 года.
  5. Patel, Mo. When two trends fuse: PyTorch and recommender systems (англ.), O'Reilly Media (7 декабря 2017). Архивировано 30 марта 2019. Дата обращения: 18 декабря 2017.
  6. Mannes, John. Facebook and Microsoft collaborate to simplify conversions from PyTorch to Caffe2 (англ.), TechCrunch. Архивировано 6 июля 2020. Дата обращения: 18 декабря 2017.
  7. Arakelyan, Sophia Tech giants are using open source frameworks to dominate the AI community (англ.). VentureBeat (29 ноября 2017). Дата обращения: 18 декабря 2017. Архивировано 30 марта 2019 года.
  8. PyTorch strengthens its governance by joining the Linux Foundation (англ.). pytorch.org. Дата обращения: 13 сентября 2022. Архивировано 17 августа 2025 года.
  9. Top 30 Open Source Projects. Open Source Project Velocity by CNCF. Дата обращения: 12 октября 2023. Архивировано 3 сентября 2023 года.
  10. The C++ Frontend. PyTorch Master Documentation. Дата обращения: 29 июля 2019. Архивировано 29 июля 2019 года.
  11. Overview of PyTorch Autograd Engine. PyTorch Blog (8 июня 2021). Архивировано 16 февраля 2025 года.
  12. Uber AI Labs Open Sources Pyro, a Deep Probabilistic Programming Language (англ.), Uber Engineering Blog (3 ноября 2017). Архивировано 25 декабря 2017. Дата обращения: 18 декабря 2017.
  13. PYTORCH-TRANSFORMERS: PyTorch implementations of popular NLP Transformers. PyTorch Hub (1 декабря 2019). Дата обращения: 1 декабря 2019. Архивировано 11 июня 2023 года.
  14. Ecosystem Tools (англ.). pytorch.org. Дата обращения: 18 июня 2020. Архивировано 18 июля 2023 года.
  15. GitHub - catalyst-team/catalyst: Accelerated DL & RL. Catalyst-Team (5 декабря 2019). Дата обращения: 5 декабря 2019. Архивировано 22 декабря 2019 года.
  16. Ecosystem Tools (англ.). pytorch.org. Дата обращения: 4 апреля 2020. Архивировано 18 июля 2023 года.
  17. Torch Library. Архивировано 31 октября 2001 года.
  18. R. Collobert, S. Bengio, J. Mariéthoz. Torch: a modular machine learning software library. IDIAP. Архивировано 10 июня 2025 года.
  19. Collobert, Ronan. Implementing Neural Networks Efficiently : [англ.] / Ronan Collobert, Koray Kavukcuoglu, Clément Farabet. — Springer, 2012. — P. 537–557. — ISBN 978-3-642-35289-8. — doi:10.1007/978-3-642-35289-8_28.
  20. torch/torch7, Commit fd0ee3b, 2 июля 2018. Архивировано 10 июня 2025 года.
  21. Caffe2 Merges With PyTorch (2 апреля 2018). Дата обращения: 2 января 2019. Архивировано 30 марта 2019 года.
  22. Компания Meta Platforms, Inc. признана экстремистской организацией и запрещена на территории Российской Федерации (решение Тверского районного суда г. Москвы от 21 марта 2022 года).
  23. Edwards, Benj Meta spins off PyTorch Foundation to make AI framework vendor neutral. Ars Technica (12 сентября 2022). Дата обращения: 13 сентября 2022. Архивировано 13 сентября 2022 года.
  24. Dynamo Overview. Архивировано 27 июля 2024 года.
  25. PyTorch 2.0 brings new fire to open-source machine learning, VentureBeat (15 марта 2023). Архивировано 16 марта 2023. Дата обращения: 16 марта 2023.
  26. PyTorch 2.0 Release. pytorch.org. Дата обращения: 2 ноября 2025. Архивировано 15 марта 2023 года.
  27. PyTorch 2.1: A new chapter in open source AI. pytorch.org. Дата обращения: 2 ноября 2025. Архивировано 28 сентября 2025 года.
  28. PyTorch 2.2 release. pytorch.org. Дата обращения: 2 ноября 2025. Архивировано 28 февраля 2024 года.
  29. PyTorch 2.3 Release. pytorch.org. Дата обращения: 2 ноября 2025. Архивировано 16 мая 2024 года.
  30. PyTorch 2.9 Release. pytorch.org. Дата обращения: 2 ноября 2025. Архивировано 15 октября 2025 года.
  31. PyTorch Release 2.9.1. PyTorch Developer Discussion. Дата обращения: 2 ноября 2025. Архивировано 1 ноября 2025 года.
  32. 1 2 3 The C++ Frontend. PyTorch Tutorials. PyTorch. Дата обращения: 2 ноября 2025. Архивировано 26 сентября 2024 года.
  33. 1 2 3 Что такое PyTorch: гайд по фреймворку для начинающих. Skypro. Дата обращения: 2 ноября 2025. Архивировано 23 мая 2024 года.
  34. 1 2 Extending the PyTorch Dispatcher. PyTorch Tutorials. PyTorch. Дата обращения: 2 ноября 2025. Архивировано 26 сентября 2024 года.
  35. 1 2 3 PyTorch: как устроена библиотека и почему она вам понравится. Habr (1 августа 2017). Дата обращения: 2 ноября 2025.
  36. Что такое PyTorch? Ultralytics. Дата обращения: 2 ноября 2025. Архивировано 18 июля 2024 года.
  37. Installing PyTorch for ROCm. rocm.docs.amd.com (9 февраля 2024). Архивировано 27 декабря 2023 года.
  38. Introducing Accelerated PyTorch Training on Mac (англ.). pytorch.org. Дата обращения: 4 июня 2022. Архивировано 29 января 2024 года.
  39. An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library. analyticsvidhya.com (22 февраля 2018). Дата обращения: 11 июня 2018. Архивировано 22 октября 2019 года.
  40. 1 2 Saving and Loading Models — PyTorch Tutorials. PyTorch. Дата обращения: 2 ноября 2025. Архивировано 8 октября 2024 года.
  41. Сохранение обученной модели в PyTorch: лучшие практики. Skypro. Дата обращения: 2 ноября 2025. Архивировано 23 мая 2024 года.
  42. Understanding File Extensions in PyTorch (.pt, .pth, and .pwf). GeeksforGeeks. Дата обращения: 2 ноября 2025. Архивировано 20 мая 2024 года.
  43. torch.save — PyTorch 2.9.0 documentation. PyTorch. Дата обращения: 2 ноября 2025. Архивировано 8 октября 2024 года.
  44. 1 2 TorchScript Serialization in PyTorch. apxml.com. Дата обращения: 2 ноября 2025. Архивировано 13 июня 2024 года.
  45. Обучение модели PyTorch. Microsoft Learn. Дата обращения: 2 ноября 2025. Архивировано 7 сентября 2024 года.
  46. ONNX: как запускать модели из PyTorch в браузере. Habr (17 октября 2024). Дата обращения: 2 ноября 2025. Архивировано 21 октября 2024 года.
  47. Your Guide to PyTorch Conference 2025. pytorch.org. Дата обращения: 2 ноября 2025.
  48. Meta PyTorch Team 2025 H1 Roadmaps. PyTorch Developer Discussion. Дата обращения: 2 ноября 2025.
  49. Meta PyTorch Team 2025 H2 Roadmaps. PyTorch Developer Discussion. Дата обращения: 2 ноября 2025.
  50. PyTorch. pytorch.org. Дата обращения: 2 ноября 2025.
  51. 1 2 3 RELEASE.md. sourcegraph.com. Дата обращения: 2 ноября 2025.
  52. PyTorch Release 2.8 Key Information. PyTorch Developer Discussion. Дата обращения: 2 ноября 2025.
  53. 1 2 PyTorch API stability classification. GitHub. Дата обращения: 2 ноября 2025.
  54. Releases · pytorch/pytorch. GitHub. Дата обращения: 2 ноября 2025.

Ссылки