# PyTorch

> Открытый фреймворк глубокого обучения на Python с тензорами, автоматическим дифференцированием и поддержкой GPU; стандарт исследований и основа большинства открытых языковых моделей.

Источник: https://llmdocs.ru/wiki/pytorch/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Тип**: фреймворк глубокого обучения
- **Разработчик**: Meta AI (FAIR), с 2022 — PyTorch Foundation (Linux Foundation)
- **Первый выпуск**: 2016
- **Предшественник**: Torch (Lua)
- **Языки**: Python, C++, CUDA
- **Лицензия**: BSD-3-Clause
- **Ключевые части**: тензоры, autograd, torch.nn, torch.compile, DataLoader
- **Сайт**: pytorch.org
**PyTorch** — открытый фреймворк для глубокого обучения на [Python](https://llmdocs.ru/wiki/python.md). Он предоставляет многомерные массивы — **тензоры** — с вычислениями на CPU и [GPU](https://llmdocs.ru/wiki/gpu-cuda.md), **автоматическое дифференцирование** для обучения моделей градиентными методами и набор готовых строительных блоков [нейронных сетей](https://llmdocs.ru/wiki/neural-network.md). PyTorch ценят за то, что модель — это обычный Python-код, который можно отлаживать построчно.[1]

PyTorch — самый популярный фреймворк в научных статьях по машинному обучению; на нём обучено большинство открытых [языковых моделей](https://llmdocs.ru/wiki/llm.md), а библиотеки экосистемы [Hugging Face](https://llmdocs.ru/wiki/hugging-face.md) используют его по умолчанию.

## История

PyTorch вырос из библиотеки Torch, написанной на языке Lua. В лаборатории Facebook AI Research (FAIR) его переписали с интерфейсом на Python; первый выпуск состоялся в 2016 году, широкий анонс — в начале 2017-го. Главным отличием от тогдашнего TensorFlow был **режим немедленного выполнения** (*eager mode*): граф вычислений строится на лету при выполнении кода, а не описывается заранее, поэтому работают обычные `if`, циклы и отладчик.

В 2018 году с PyTorch объединили фреймворк Caffe2 для продакшена. В 2022 году проект перешёл под управление независимой PyTorch Foundation в составе Linux Foundation.[5] Версия 2.0 (2023) добавила компилятор `torch.compile`, ускоряющий модели без переписывания кода.[4]

## Основные понятия

### Тензоры

```python
import torch

x = torch.randn(32, 784)              # пакет из 32 векторов по 784 числа
w = torch.randn(784, 10, requires_grad=True)
device = "cuda" if torch.cuda.is_available() else "cpu"   # на Mac — "mps"
x, w = x.to(device), w.detach().to(device).requires_grad_()

y = x @ w                              # матричное умножение на GPU
print(y.shape, y.dtype, y.device)      # torch.Size([32, 10]) torch.float32 cuda:0
```

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

### Autograd

Если у тензора установлен `requires_grad=True`, PyTorch записывает все операции над ним. Вызов `loss.backward()` проходит запись в обратном порядке и вычисляет градиенты по правилу дифференцирования сложной функции — это и есть обратное распространение ошибки. Градиенты появляются в атрибуте `.grad` и используются оптимизатором для [градиентного спуска](https://llmdocs.ru/wiki/gradient-descent.md).

### Модули и обучение

```python
from torch import nn
from torch.utils.data import DataLoader

class Classifier(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(nn.Linear(784, 256), nn.ReLU(), nn.Dropout(0.1), nn.Linear(256, 10))

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

model = Classifier().to(device)
opt = torch.optim.AdamW(model.parameters(), lr=3e-4)
loss_fn = nn.CrossEntropyLoss()
loader = DataLoader(train_dataset, batch_size=64, shuffle=True)

for epoch in range(5):
    model.train()
    for xb, yb in loader:
        xb, yb = xb.to(device), yb.to(device)
        loss = loss_fn(model(xb), yb)
        opt.zero_grad()
        loss.backward()
        opt.step()

torch.save(model.state_dict(), "model.pt")
```

Класс `nn.Module` хранит параметры и вложенные слои, `Dataset` и `DataLoader` подают данные пакетами, а цикл обучения пишется явно — это даёт полный контроль, хотя для типовых задач используют обёртки.[3]

## Производительность

- **Смешанная точность** (`torch.autocast`, форматы bfloat16 и float16) ускоряет обучение и вдвое сокращает память.
- **`torch.compile`** превращает модель в оптимизированные ядра, объединяя операции.
- **Распределённое обучение** — `DistributedDataParallel` для нескольких GPU и машин, `FSDP` для моделей, не помещающихся в память одной карты.
- **Поддержка ускорителей** — NVIDIA CUDA, AMD ROCm, Apple Silicon (MPS), Intel и другие.

Установку под конкретную платформу и версию CUDA удобно подобрать в конфигураторе на сайте PyTorch.[6]

## Экосистема

| Библиотека | Назначение |
|---|---|
| torchvision, torchaudio | наборы данных, модели и преобразования для изображений и звука |
| Hugging Face Transformers | тысячи предобученных моделей для текста, изображений, звука |
| PyTorch Lightning, Accelerate | обучение без шаблонного кода, масштабирование на кластеры |
| PEFT | эффективное дообучение, в том числе [LoRA](https://llmdocs.ru/wiki/fine-tuning-lora.md) |
| vLLM, TorchServe | инференс и [сервинг](https://llmdocs.ru/wiki/model-serving.md) моделей |
| ONNX-экспорт, ExecuTorch | перенос моделей на другие среды выполнения и мобильные устройства (см. [ONNX](https://llmdocs.ru/wiki/onnx.md)) |

## PyTorch и другие фреймворки

TensorFlow от Google долго лидировал в продакшене, но в исследованиях уступил PyTorch; Keras 3 теперь работает поверх нескольких бэкендов, включая PyTorch. JAX от Google популярен в крупных исследовательских проектах благодаря функциональному стилю и компилятору XLA. Для классического машинного обучения на табличных данных PyTorch обычно не нужен — там удобнее [scikit-learn](https://llmdocs.ru/wiki/scikit-learn.md) и библиотеки градиентного бустинга. Полная справка по API — в документации PyTorch.[2]

## См. также

- [Нейронная сеть](https://llmdocs.ru/wiki/neural-network.md)
- [GPU и CUDA](https://llmdocs.ru/wiki/gpu-cuda.md)
- [Hugging Face](https://llmdocs.ru/wiki/hugging-face.md)
- [Градиентный спуск](https://llmdocs.ru/wiki/gradient-descent.md)
- [Fine-tuning и LoRA](https://llmdocs.ru/wiki/fine-tuning-lora.md)

## Источники

1. [A. Paszke et al. — PyTorch: An Imperative Style, High-Performance Deep Learning Library (NeurIPS 2019)](https://arxiv.org/abs/1912.01703)
2. [PyTorch Documentation](https://docs.pytorch.org/docs/stable/index.html)
3. [PyTorch Tutorials — Learn the Basics](https://docs.pytorch.org/tutorials/beginner/basics/intro.html)
4. [PyTorch — torch.compile tutorial](https://docs.pytorch.org/tutorials/intermediate/torch_compile_tutorial.html)
5. [PyTorch Foundation](https://pytorch.org/foundation/)
6. [PyTorch — Get Started (установка)](https://pytorch.org/get-started/locally/)
