GPU (Graphics Processing Unit)
GPU — это процессор с тысячами ядер, предназначенный для параллельных вычислений, поэтому он стал основным аппаратным средством для обучения и запуска моделей глубокого обучения.
Графический процессор (GPU) — это процессор с тысячами простых ядер, которые одновременно выполняют одну и ту же операцию над множеством элементов данных. GPU создавали для рендеринга трёхмерной графики, то есть параллельных вычислений над миллионами пикселей и вершин. Они стали основным оборудованием для глубокого обучения, поскольку обучение и инференс нейронных сетей в основном сводятся к умножению матриц, которое также можно распараллелить. Платформа CUDA от NVIDIA, выпущенная в 2007 году, позволила программировать GPU для вычислений общего назначения. В 2012 году сеть AlexNet, обучавшаяся пять-шесть дней на двух GPU NVIDIA GTX 580, победила в конкурсе ImageNet с долей ошибок top-5 15.3% против 26.2% у ближайшего конкурента. Сегодня PyTorch, TensorFlow и JAX работают на GPU NVIDIA через CUDA, на GPU AMD через ROCm и на чипах Apple через Metal; кластеры из тысяч GPU обучают крупнейшие фундаментальные модели.
Как GPU ускоряют глубокое обучение#
CPU отводит большую часть площади чипа под кэш и управляющую логику, чтобы несколько ядер могли быстро выполнять код с ветвлениями. GPU использует эту площадь для арифметических вычислений: GPU NVIDIA состоит из потоковых мультипроцессоров, каждый из которых запускает группы из 32 потоков, называемые варпами, выполняющие одну инструкцию над разными данными. Пока одни варпы ждут данные из памяти, другие выполняют вычисления, поэтому чип остаётся загруженным, если параллельной работы достаточно. Начиная с поколения Volta в 2017 году, GPU NVIDIA также оснащаются Tensor Cores — блоками, которые за один шаг перемножают небольшие матрицы с пониженной точностью, включая FP8, а начиная с Blackwell — и FP4. Пиковая производительность NVIDIA A100 составляет 19.5 TFLOPS в стандартных вычислениях FP32 и 312 TFLOPS в BF16 на Tensor Cores. Поэтому при обучении на GPU обычно используется смешанная точность. Этот код измеряет время одного и того же умножения матриц на CPU и GPU:
import time
import torch
gpu = torch.accelerator.current_accelerator() # cuda, mps, or xpu device on this machine
a = torch.randn(4096, 4096)
b = torch.randn(4096, 4096)
for device in (torch.device("cpu"), gpu):
x, y = a.to(device), b.to(device)
x @ y # warm-up run
torch.accelerator.synchronize()
start = time.perf_counter()
for _ in range(10):
x @ y
torch.accelerator.synchronize() # GPU calls return immediately, so wait for them to finish
seconds = (time.perf_counter() - start) / 10
print(f"{device.type}: {seconds * 1000:.1f} ms per multiply, {2 * 4096**3 / seconds / 1e12:.1f} TFLOPS")На ноутбуке Apple M5 Pro код выводит cpu: 80.0 ms per multiply, 1.7 TFLOPS и mps: 18.3 ms per multiply, 7.5 TFLOPS, то есть встроенный GPU ноутбука примерно в 4.4 раза быстрее в FP32. В GPU для дата-центров этот разрыв ещё больше благодаря большему числу ядер и памяти с высокой пропускной способностью (HBM), обеспечивающей несколько терабайт в секунду, — этого достаточно, чтобы постоянно загружать ядра весами и активациями. Объём памяти GPU, которую часто называют VRAM, также определяет, какого размера модель и размер пакета помещаются на одном устройстве. Такие методы, как контрольные точки градиентов и распределённое обучение, помогают обойти это ограничение.
Обучение и развёртывание моделей на GPU#
Задача обучения эффективно использует GPU, только если остальные этапы конвейера не отстают: рабочие процессы CPU должны достаточно быстро декодировать и аугментировать изображения, пакеты должны быть достаточно большими, чтобы загружать все ядра, а вычисления должны выполняться с пониженной точностью на Tensor Cores. Низкая загрузка GPU обычно указывает на одну из таких проблем:
Ultralytics YOLO по умолчанию обучается на первом GPU CUDA, если он доступен; для обучения на нескольких GPU можно передать device=[0, 1], а параметр batch=-1 запускает AutoBatch, который измеряет свободную память GPU и выбирает размер пакета примерно на 60% от её объёма. Команды без локального оборудования могут выбрать облачный GPU на Ultralytics Platform для каждого запуска обучения. Для инференса модель YOLO26n, экспортированная в TensorRT, обрабатывает изображение размером 640 пикселей за 1,7 мс на GPU NVIDIA T4, тогда как с ONNX на CPU это занимает 38,9 мс. Этот код обучает YOLO26 на первом GPU с AutoBatch:
from ultralytics import YOLO
# Загрузи самую маленькую модель YOLO26 для детекции
model = YOLO("yolo26n.pt")
# Обучай на GPU 0 и позволь AutoBatch подобрать размер пакета с учётом объёма памяти GPU
results = model.train(data="coco8.yaml", epochs=3, imgsz=640, device=0, batch=-1)GPU, CPU, TPU и NPU#
- CPU: Несколько мощных ядер для кода общего назначения с ветвлениями. В большинстве конвейеров обучения CPU выполняет загрузку и предварительную обработку данных, а также инференс, когда ускоритель недоступен.
- GPU: Тысячи программируемых ядер и Tensor Cores. GPU работают почти с любыми моделями и фреймворками, выпускаются несколькими производителями и доступны во всех крупных облачных сервисах.
- TPU: Специализированный чип Google с крупными блоками умножения матриц. TPU уступают GPU в гибкости, но эффективны для больших плотных матричных вычислений и доступны через Google Cloud.
- NPU: Энергоэффективный ускоритель нейронных сетей в телефонах, ноутбуках и периферийных устройствах, который используют для инференса, а не обучения.
Примеры применения в реальных условиях#
- Обучение крупных моделей: Языковые модели и модели компьютерного зрения с миллиардами параметров обучаются на кластерах из тысяч GPU для дата-центров, соединённых высокоскоростными каналами, например NVLink и InfiniBand.
- Аналитика видео в реальном времени: Один GPU может одновременно выполнять обнаружение и отслеживание объектов во множестве видеопотоков с камер для мониторинга дорожного движения, аналитики в розничной торговле или инспекции на заводе.
- Робототехника и автономный транспорт: Встроенные модули GPU, например NVIDIA Jetson, запускают модели восприятия непосредственно на устройстве, где передача данных с камер на сервер добавила бы слишком большую задержку.
- Медицинская визуализация: GPU обрабатывают большие трёхмерные объёмы данных КТ и МРТ и за секунды, а не минуты, сегментируют органы и опухоли.










