Что такое PyTorch и почему он популярен
Знакомимся с PyTorch: что это за инструмент и почему на нём пишут исследователи и продакшен.
PyTorch — библиотека для работы с тензорами и автоматического дифференцирования, на которой строят и обучают нейронные сети.
Зачем вообще отдельная библиотека
Вы уже знаете теорию: нейросеть — это слои с весами, прямой проход (forward) считает предсказание, а обратный (backprop) считает градиенты, по которым градиентный спуск двигает веса. На чистом Python и numpy это писать можно, но больно: каждый градиент придётся выводить и кодировать руками, а считать на видеокарте numpy не умеет. PyTorch снимает обе боли. Он даёт тензоры (как массивы numpy, но умеют жить на GPU) и autograd — механизм, который сам считает градиенты любой функции, что вы написали. Вам остаётся описать только forward.
Динамический граф — главная фишка
Чтобы посчитать градиенты, нужно знать, какие операции и в каком порядке привели к результату. Этот порядок называют графом вычислений. Есть два подхода. В статическом графе (ранний TensorFlow) вы сначала описываете весь граф как схему, компилируете его, и только потом прогоняете данные. В динамическом графе PyTorch граф строится на лету, прямо когда выполняется обычный Python-код: написали a + b — узел графа создался в этот же момент.
Что это даёт на практике: внутри модели можно использовать обычные if, циклы for, печатать промежуточные тензоры через print и ставить точки останова в отладчике. Модель — это просто Python-код, который выполняется строка за строкой. Поэтому PyTorch так любят за «питоничность»: он не заставляет учить отдельный язык описания графов.
Где PyTorch используют
Это де-факто стандарт в исследованиях ИИ: большинство свежих статей выходят с кодом на PyTorch. На нём построены целые экосистемы — torchvision для картинок, Hugging Face Transformers для языковых моделей, PyTorch Lightning для удобного цикла обучения. Те же языковые модели, что стоят за современными чат-ботами, обучают и дообучают в основном на PyTorch.
| Что хотим | Что даёт PyTorch |
| Считать на GPU | Тензор переносится на устройство одной командой .to(device) |
| Не выводить градиенты руками | autograd считает их сам по графу вычислений |
| Отлаживать как обычный код | динамический граф: print, if, отладчик работают |
| Готовые слои и модели | модуль torch.nn и предобученные сети |
Как выглядит код
Чтобы почувствовать стиль, посмотрите на крошечный пример. Запускать его в браузере мы не будем (PyTorch в песочнице не работает), но прочитать важно — дальше весь torch-код оформлен так же, для чтения:
import torch
# два тензора
a = torch.tensor([1.0, 2.0, 3.0])
b = torch.tensor([10.0, 20.0, 30.0])
# обычная арифметика — это и есть построение графа на лету
c = a + b
print(c) # tensor([11., 22., 33.])
print(c.sum()) # tensor(66.)
Никаких «сессий» и компиляции — пишете арифметику, и она сразу считается. Это и есть динамический граф в действии.
Что нужно для старта
В этом курсе предполагается, что вы знаете Python и базовую теорию нейросетей (forward, backprop, градиентный спуск). Видеокарта не обязательна: всё, что мы разбираем, прекрасно считается на CPU — просто медленнее. Установку разберём в следующем уроке.
Итог
- PyTorch = тензоры (массивы, умеющие на GPU) + autograd (автоматические градиенты).
- Граф вычислений динамический: строится на лету во время выполнения обычного Python-кода.
- Отсюда питоничность: обычные
if, циклы,printи отладчик работают внутри модели. - Это стандарт в исследованиях и основа экосистем torchvision, Hugging Face, Lightning.