PyTorch
PyTorch — это фреймворк Python с открытым исходным кодом для создания и обучения нейронных сетей с тензорами GPU и автоматическим дифференцированием. Основные концепции и путь к развёртыванию.
PyTorch — это фреймворк с открытым исходным кодом для создания, обучения и развёртывания нейронных сетей на Python. Он предоставляет тензоры с ускорением на GPU, автоматическое дифференцирование и библиотеку слоёв, оптимизаторов и функций потерь. Код выполняется в eager-режиме, построчно, поэтому модели можно писать и отлаживать, как обычные программы Python. PyTorch создана исследовательской лабораторией Facebook AI Research, ныне Meta AI; с 2022 года проект курирует независимый от вендоров фонд PyTorch Foundation при Linux Foundation. PyTorch широко используют для исследований в области глубокого обучения и создания производственных моделей в сфере компьютерного зрения и обработки языка.
Основные понятия#
- Тензоры: многомерные массивы, похожие на массивы NumPy, которые могут храниться в памяти CPU или ускорителя. PyTorch поддерживает GPU NVIDIA через CUDA, GPU AMD через ROCm и чипы Apple через Metal (MPS); для переноса данных между ними достаточно одного вызова
.to(device). - Autograd: во время выполнения операций с тензорами PyTorch записывает их в граф вычислений. Вызов
.backward()проходит по графу в обратном порядке и вычисляет градиент выходного значения по каждому тензору, для которого он требуется. Это этап обратного распространения ошибки при обучении. - Eager-выполнение: граф пересоздаётся при каждом прямом проходе, поэтому в моделях можно использовать циклы, условные операторы и инструкции print на Python, а ошибки указывают на конкретную строку, в которой они возникли.
- Модули и оптимизаторы:
torch.nnпредоставляет такие слои, как свёртки, механизмы внимания и нормализация, аtorch.optim— такие оптимизаторы, как SGD и Adam, которые обновляют веса на основе вычисленных градиентов. - torch.compile: функция появилась в PyTorch 2.0. Она преобразует программу, выполняемую в eager-режиме, в граф и генерирует объединённые ядра, часто ускоряя обучение и инференс без изменения кода модели.
Пример ниже выполняет небольшое вычисление на GPU, если он доступен, и позволяет autograd вычислить градиент:
import torch
# Use a GPU when PyTorch can see one, otherwise fall back to the CPU
device = "cuda" if torch.cuda.is_available() else "cpu"
# Tensors record the operations applied to them when requires_grad=True
w = torch.tensor([2.0, -1.0], device=device, requires_grad=True)
x = torch.tensor([3.0, 4.0], device=device)
# Ordinary Python runs eagerly: each line executes immediately
loss = (w * x).sum() ** 2
# Autograd walks the recorded graph backward to get d(loss)/dw
loss.backward()
print(f"device={device}, loss={loss.item()}, grad={w.grad.tolist()}")На компьютере без GPU программа выводит device=cpu, loss=4.0, grad=[12.0, 16.0]. Значение функции потерь равно (2·3 − 1·4)² = 4, а autograd вычисляет её производную 2·(w·x)·x = [12, 16] без ручных вычислений. Этот же механизм используется для обучения сетей с миллиардами весов.
PyTorch и другие инструменты#
- TensorFlow: фреймворк Google, в котором до выхода TensorFlow 2 сначала строили статические графы, а затем выполняли их. Начиная с TensorFlow 2 режим eager-выполнения включён по умолчанию. TensorFlow по-прежнему широко используется в производственных системах на базе Keras и инструментов развёртывания Google.
- JAX: числовая библиотека Google, которая преобразует чистые функции Python с помощью комбинируемых операций
grad,jitиvmap, компилируемых через XLA. JAX популярен в масштабных исследованиях на TPU. - OpenCV: библиотека компьютерного зрения для чтения, преобразования и анализа изображений с помощью классических алгоритмов. В конвейерах OpenCV часто загружает и предварительно обрабатывает кадры перед передачей их модели PyTorch.
- Hugging Face: платформа и набор библиотек, в основном построенных на PyTorch. Библиотека Transformers предоставляет предварительно обученные языковые и визуальные модели в виде модулей PyTorch.
От исследований к развёртыванию#
Обученную модель PyTorch сохраняют в контрольную точку, обычно в файл .pt или .pth, содержащий её веса. Модель можно запустить как есть в сервисе Python, но для периферийных устройств и оптимизированных серверов её обычно нужно преобразовать в среду выполнения, предназначенную для их оборудования:
Ultralytics YOLO26 написана на PyTorch: yolo26n.pt — это контрольная точка PyTorch, обучение выполняется с помощью autograd и оптимизаторов PyTorch, а model.export() преобразует модель в следующие форматы развёртывания: ONNX, TensorRT, OpenVINO, Core ML и LiteRT.










