Русские новости
Последний
ИИ и технологии

Tensor Cores, Triton, остаточные сети и vision transformer

Иллюстративное изображение: деталь кристалла CPU 1980-х годов, не GPU.
Иллюстративное изображение: деталь кристалла CPU 1980-х годов, не GPU.

С 2015 года по сегодняшний день глубокое обучение прошло путь от настраиваемого вручную GPU-кода на C++ и свёрточных сетей до аппаратно ускоряемых матричных движков и архитектур Transformer. Эти три вехи определяют, как проектируются и масштабируются современные модели ИИ.

1. Современная эволюция CUDA: Tensor Cores и OpenAI Triton

В 2012 году Алекс Крижевский написал низкоуровневый CUDA C++ (cuda-convnet) для вычисления отдельных операций с плавающей запятой на стандартных ядрах CUDA. Сегодня глубокое обучение опирается на специализированное матричное оборудование и высокоуровневые компиляторы.

  • От ядер CUDA к Tensor Cores. Традиционные ядра CUDA выполняют одно скалярное умножение и сложение за такт. Начиная с архитектуры Volta (2017), NVIDIA представила Tensor Cores, которые за один такт умножают целые небольшие матрицы (например, блоки 4×4 или 16×16). Современные Tensor Cores используют форматы смешанной точности, такие как FP16, BF16 и FP8, обеспечивая ускорение матричных умножений на порядок.
  • cuDNN и автоматический выбор ядер. Вместо того чтобы исследователи писали собственные свёртки на C++, библиотека NVIDIA cuDNN теперь содержит сотни заранее скомпилированных ассемблерных ядер. Во время выполнения фреймворки вроде PyTorch сравнивают разные алгоритмы для вашей конкретной формы тензора и автоматически выбирают самую быструю процедуру для Tensor Cores.
  • OpenAI Triton (GPU-программирование на Python). Написание чистого CUDA C++ требует вручную управлять индексацией потоков, конфликтами банков разделяемой памяти и синхронизацией варпов. Triton, выпущенный OpenAI, позволяет исследователям писать высокопроизводительные GPU-ядра прямо на Python. Вы описываете операции на уровне блоков (тайлов данных), а компилятор Triton автоматически берёт на себя объединение обращений к памяти (coalescing), тайлинг в разделяемой памяти и планирование для Tensor Cores, часто не уступая вручную настроенному CUDA C++ или превосходя его.

2. Пропускные соединения ResNet и поток обратного распространения

До ResNet (2015) наращивание более ~20 свёрточных слоёв приводило к резкому росту ошибки обучения. Проходя назад через десятки шагов умножения, градиенты сжимались к нулю (затухающие градиенты) или становились нестабильными.

  • Обучение остатков вместо необработанных выходов. В стандартном блоке сети уложенные слои пытаются выучить прямое отображение H(x) входа x. ResNet вводит пропускное соединение (тождественный обходной путь), которое добавляет исходный вход x прямо к выходу блока:

y=F(x)+x

Здесь F(x) представляет уложенные свёрточные слои. Вместо того чтобы заново строить всё представление с нуля, слоям нужно выучить лишь остаток (небольшую поправку F(x) = y - x). Если слой не нужен, сеть легко может подтолкнуть F(x) к нулю, оставив чистую тождественную передачу.

  • Непрерывная магистраль градиента. При обратном распространении правило цепочки вычисляет градиент потерь (L) по входу x:

(∂ L)/(∂ x)=(∂ L)/(∂ y)((∂ F(x))/(∂ x)+1)

Благодаря слагаемому + 1, создаваемому тождественным обходным путём, градиент, приходящий сверху ((∂ L)/(∂ y)), течёт напрямую назад к более ранним слоям, не уменьшаясь из-за малых весовых матриц в (∂ F(x))/(∂ x). Это позволяет градиентам чисто распространяться через 100+ и даже 1 000+ слоёв.

3. Переход от CNN к Vision Transformer (ViT)

Почти десятилетие после AlexNet свёрточные нейронные сети (CNN) доминировали в компьютерном зрении, скользя небольшими локальными фильтрами по изображениям. В 2020 году Google представила Vision Transformer (ViT), адаптировав архитектуру Transformer из обработки естественного языка для изображений.

ХарактеристикаСвёрточные нейронные сети (CNN)Vision Transformer (ViT)
Обработка входаОбрабатывает всю двумерную сетку изображения скользящими фильтрами (например, 3×3).Разбивает изображение на патчи фиксированного размера (например, 16×16 пикселей) и разворачивает их в последовательность токенов.
Рецептивное полеСначала локальное. Ранние слои видят только соседние пиксели; глобальный контекст медленно накапливается в глубоких слоях.Сразу глобальное. Самовнимание (self-attention) связывает каждый патч изображения с каждым другим патчем уже с первого слоя.
Индуктивное смещениеВысокое. Встроенные предположения об инвариантности к сдвигу и двумерной пространственной локальности помогают CNN хорошо обучаться на небольших наборах данных.Низкое. Нет встроенных правил двумерного пространства (опора на позиционные эмбеддинги), поэтому для освоения визуальной структуры нужны огромные наборы данных.
Масштабирование на оборудованииОпирается на специализированные свёрточные ядра и сложные схемы доступа к памяти.Опирается почти полностью на плотные матричные умножения (GEMM), которые с максимальной эффективностью загружают Tensor Cores современных GPU.
  • Почему ViT завоевали современный ИИ. Хотя CNN остаются эффективными для лёгких мобильных и периферийных устройств, Vision Transformer масштабируются намного лучше при обучении на сотнях миллионов изображений. Кроме того, поскольку ViT представляют изображения в виде последовательностей токенов, то есть в том же формате, что используется для текста и аудио, они позволили современным мультимодальным моделям ИИ (таким как GPT-4o и Gemini) обрабатывать зрение и язык в единой архитектуре.

Больше новостей: ИИ и технологии