Что такое тензорные ядра в видеокарте

Обновлено: 20.11.2024

Из нескольких загадок, связанных с тензорными ядрами смешанной точности Volta, одной из самых мучительных была возможность умножения матриц 4 x 4. Напомним, что тензорное ядро ​​— это новый тип процессорного ядра, который выполняет специализированные матричные вычисления, подходящие для глубокого обучения и некоторых типов высокопроизводительных вычислений. Тензорные ядра выполняют плавное умножение, когда две матрицы 4 x 4 FP16 перемножаются, а затем результат добавляется к матрице 4 x 4 FP16 или FP32. В результате получается матрица 4 x 4 FP16 или FP32; NVIDIA относится к тензорным ядрам как к вычислениям со смешанной точностью, потому что введенные матрицы имеют половинную точность, но результат может быть с полной точностью. Как оказалось, математика, которую выполняют тензорные ядра, обычно используется при обучении глубокому обучению и выводах.

И если это звучит знакомо для обычного конвейера GPU ALU, то так и должно быть. Тензорные ядра, хотя и являются новинкой для графических процессоров, не так уж далеки от стандартных конвейеров ALU. Плотность изменилась — теперь они работают со значительными матрицами, а не со скалярными значениями, упакованными в SIMD, — но не с математикой. В конце концов, здесь существует относительно простой компромисс между гибкостью (тензорные ядра были бы ужасны при скалярных операциях) и пропускной способностью, поскольку тензорные ядра могут упаковывать гораздо больше операций в одну и ту же площадь кристалла, поскольку они настолько жесткие и требуют лишь доли памяти. управляющая логика, когда эта стоимость делится на АЛУ.

Следовательно, несмотря на некоторую программируемость, тензорные ядра привязаны к этим типам умножения-накопления матриц 4 x 4, и неясно, как и когда происходит этап накопления. Несмотря на то, что это описывается как матричная математика 4 x 4, на практике кажется, что операции тензорного ядра всегда работают с матрицами 16 x 16, при этом операции обрабатываются на двух тензорных ядрах одновременно. Похоже, что во многом это связано с другими изменениями в Volta, а точнее с тем, как эти тензорные ядра размещены в СМ. Для Volta SM были разделены на четыре процессорных блока или подъядра.

Для каждого подъядра планировщик отправляет одну инструкцию деформации за такт в блок локальной ветви (BRU), массив тензорных ядер, блок математической диспетчеризации или общий блок MIO. Во-первых, это исключает одновременное использование комбинации операций тензорного ядра и других математических операций. При использовании двух тензорных ядер планировщик варпа выполняет операции умножения матриц напрямую, а после получения входных матриц из регистра выполняет умножение матриц 4 x 4 x 4. Как только умножение полной матрицы завершено, тензорные ядра записывают полученную матрицу обратно в регистр.

Глядя на то, как тензорные ядра выполняют настоящую инструкцию, код операции HMMA, возникает только больше вопросов. Даже на уровне компилятора с NVVM IR (LLVM) есть только встроенные функции для матричных операций на уровне деформации, а не тензорные ядра, и уровень деформации остается единственным уровнем с CUDA C++ и PTX ISA. Загрузка входных матриц осуществляется в виде каждой нити деформации, содержащей фрагмент, распределение и идентичность которого не указаны. В общем, он следует той же схеме вычислений GEMM на основе тайлинга на уровне потоков для стандартных ядер CUDA, и мы вернемся к этому с библиотекой NVIDIA CUTLASS чуть позже.

В общих чертах, однако, учитывая операцию тензорного ядра A*B+C, фрагменты состоят из 8 элементов FP16x2 (т.е. 16 элементов FP16) для A и еще 8 элементов FP16x2 для B, а также 4 элемента FP16x2 для Аккумулятор FP16 или 8 элементов FP32 для аккумулятора FP32.

После операции матричного умножения-накопления результат распределяется по фрагментам в регистрах назначения каждого потока. Требуя единства всего варпа, эти низкоуровневые операции по существу завершатся неудачно, если один из потоков варпа вышел.

Низкоуровневый микробенчмаркинг, проведенный командой Citadel LLC, выявил ряд деталей микроархитектуры Volta, включая операции тензорного ядра и задействованные фрагменты, расположение в реестре и идентичность по сравнению с входными матрицами. Они заметили, что подядро продолжает вычислять матричное умножение в определенном шаблоне пэчворка со всеми 32 нитями деформации в действии. Концептуально тензорные ядра работают с подматрицами 4 x 4 для расчета более крупной матрицы 16 x 16, включающей кооперативные группы Volta и новую модель планирования.

С потоками деформации, разделенными на 8 групп потоков по 4 потока, каждая группа потоков последовательно вычисляла фрагмент 8x4, проходя процесс из 4 наборов. Таким образом, каждая группа потоков обрабатывает 1/8 результирующей матрицы.

В наборе было четыре шага HMMA, которые можно было выполнять параллельно, каждый из которых применялся к подфрагменту 4x2. Четыре потока были напрямую связаны с этими матричными значениями в регистре, так что одна инструкция HMMA шага 0 могла быть обработана группой потоков для вычисления подфрагмента за один раз.

Поскольку умножение матриц математически требует повторного использования определенных столбцов и строк, чтобы обеспечить параллельное выполнение во всем блоке 8x4, каждая матрица 4x4 сопоставляется с регистрами двух потоков. Если применимо, шаг накопления суммирует произведение с сохраненным аккумулятором; в этом случае операций подматрицы 4 x 4 для вычисления родительской матрицы 16 x 16 это будет включать суммирование наборов, поскольку они были вычислены последовательно, чтобы сформировать соответствующий фрагмент 4 x 8 элементов в матрице 16 x 16. Несмотря на то, что это не тестировалось Citadel, было замечено, что инструкции FP16 HMMA приводят к 2 шагам, а не к 4, что связано с меньшим пространством регистров, которое занимает FP16, и, предположительно, применяется аналогичный принцип. Предполагая, что подъядро было настроено на пиковую производительность, все еще трудно оценить без цифр, хотя кажется, что «операций FMA за цикл» относится к составляющим значениям матриц.

Благодаря независимому планированию и выполнению потоков, а также синхронизации деформации и распределению результатов по всей области деформации основные операции тензорного ядра 4 x 4 x 4 преобразуются в полупрограммируемое матричное умножение 16 x 16 x 16 со смешанной точностью. с CUDA 9.1 поддерживаются конфигурации 32 x 8 x 16 и 8 x 32 x 16. Для обеих новых форм перемножаемым матрицам нужны соответствующие столбцы и строки по 16, при этом конечная матрица будет 32 x 8 или 8 x 32; это более или менее предполагает, что автономные операции умножения-накопления матрицы 4 x 4 x 4 не могут быть легко поддержаны. Жестко запрограммированное поведение фрагментов регистров на уровне деформации, реализация инструкции MMA или ALU с тензорным ядром могут легко привести к математической матрице тензорного ядра исключительно на уровне деформации. И с практической точки зрения энергопотребление пострадает из-за увеличения использования файла регистра, но не значительно улучшит производительность глубокого обучения.

То, как работают тензорные ядра, похоже, является аппаратно реализованным этапом вычислительной иерархии NVIDIA GEMM, как видно из CUTLASS, их библиотеки шаблонов CUDA C++ для операций GEMM. В традиционных ядрах CUDA последний шаг требует разбиения (то есть «разложения») структуры тайла деформации на скалярные и векторные элементы, принадлежащие отдельным потокам. С WMMA API, который прямо сейчас означает тензорные ядра, все это абстрагируется, оставляя только загрузку/хранение и умножение-аккумулирование фрагментов матрицы с деформацией. Накопление происходит на месте как операция типа FMA.

На уровне регистров сама NVIDIA упомянула в своей статье Hot Chips 2017, что «с тремя относительно небольшими матрицами 4x4 данных умножения и накопления можно выполнить 64 операции умножения-сложения». А для счетчика программ на поток расширенной модели Volta SIMT, что позволяет использовать тензорные ядра, обычно требуется 2 регистровых слота на поток, согласно техническому документу. Также могло произойти изменение структуры реестра; Citadel сообщила о 64-битной конфигурации с 2 банками, хотя сами NVIDIA задокументировали 32-битную конфигурацию с 4 банками. Сами инструкции HMMA обеспечивают максимально возможное повторное использование регистров, несмотря на другие усовершенствования Volta (которых мы коснемся чуть позже), поэтому я не могу себе представить, чтобы регистры не были узким местом тензорных ядер в большинстве случаев.

Для автономного матричного умножения-накопления 4 x 4 я подозреваю, что массив тензорных ядер физически не был разработан для него с точки зрения регистров, путей данных и планирования, так что его можно использовать только с определенными умножениями подматрицы (хотя по общему признанию Я давно не изучал линейную алгебру).

В любом случае, с точки зрения NVIDIA, Volta не является ASIC для глубокого обучения; он по-прежнему охватывает пространство GPGPU, поэтому сохранение программируемых тензорных ядер CUDA для применимости к GEMM/cuBLAS и HPC вполне логично.С CUTLASS для CUDA C++ дело обстоит тем более, поскольку его поддержка WMMA API направлена ​​на обеспечение операций GEMM с тензорным ядром для широкого круга приложений. По сути, разработка аппаратного ускорения глубокого обучения NVIDIA во многом связана с развитием cuDNN (и, в меньшей степени, cuBLAS) на протяжении многих лет.

Возможно, вам встречался термин "тензорные ядра", если вы занимаетесь искусственным интеллектом/машинным обучением или являетесь энтузиастом в области технологий/полупроводников.

Существует много путаницы в отношении того, что они собой представляют и как они связаны с графическими процессорами. В Tech Centurion мы стремимся упростить для вас даже самые сложные технологии. Итак, вот статья с раскомплексованными тензорными ядрами.

По сути, тензорные ядра — это процессоры, которые ускоряют процесс умножения матриц. Это технология, разработанная Nvidia для потребительских и профессиональных графических процессоров высокого класса. В настоящее время он доступен на ограниченных графических процессорах, таких как те, которые принадлежат семейству Geforce RTX, Quadro RTX и Titan. Он может обеспечить повышенную производительность в ИИ, играх и создании контента.

Это приводит к более быстрому глубокому обучению/производительности искусственного интеллекта и ускоряет обучение нейронной сети.

Прежде чем мы перейдем к обсуждению того, что такое тензорные ядра, давайте сначала посмотрим, что такое тензоры. Чтобы больше узнать о ядрах тензоров, необходимо иметь общее представление о тензорах.

Что такое тензор?

Тензор – это тип данных, который может представлять все типы данных. Трудно найти интуитивно удовлетворяющее определение тензора. Тем не менее, его можно рассматривать как контейнер, в котором может храниться многомерный набор данных.

Многие пытаются определить Тензор с помощью физики. Они заставляют их выглядеть как обобщение скаляров и векторов.

Но тензор не является обобщением скаляров или векторов, а скаляры и векторы являются обобщением тензора.

Его можно рассматривать как расширение матрицы. Матрицы — это двумерные структуры, содержащие числа, а тензор — это многомерный набор чисел.

Тензорные ядра Nvidia

Все микропроцессоры предназначены для выполнения арифметических и логических операций. Одной из самых важных арифметических операций является умножение матриц. Умножение двух матриц 4×4 включает 64 умножения и 48 сложений. Свертка и умножение — это области, в которых сияют новые ядра.

Сложность вычислений возрастает многократно по мере увеличения размера и размеров матрицы (тензора). Машинное обучение, глубокое обучение, трассировка лучей — это задачи, требующие чрезмерного умножения.

Nvidia впервые предложила эту технологию, когда выпустила графические процессоры на базе архитектуры Volta. Nvidia Geforce Titan V был первым графическим процессором с передовыми технологиями. В то время это был самый мощный (и самый дорогой) GPU из когда-либо созданных.

К сожалению, эти новые тензорные ядра не были доступны ни в одном графическом процессоре серии Geforce. Только когда Nvidia выпустила графические процессоры Geforce RTX на базе архитектуры Turing, тензорные ядра стали доступны потребителям. Эти графические процессоры также были намного мощнее, чем графические процессоры предыдущего поколения, основанные на архитектуре Pascal.

Посмотрите, как Майкл Хьюстон из Nvidia объясняет ядра Tensor в видео, опубликованном на канале Nvidia Developers на YouTube:

Тензорные ядра и ядра CUDA

Ядра CUDA присутствовали во всех графических процессорах, разработанных Nvidia за последнее десятилетие, а недавно появились тензорные ядра.

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

Все имеет свою цену, и здесь цена – точность. Точность требует повышения скорости вычислений. С другой стороны, ядра CUDA дают очень точные результаты.

Для моделей машинного обучения ядра CUDA не так эффективны, как ядра Tensor, как с точки зрения стоимости, так и скорости вычислений. Следовательно, они являются предпочтительным выбором для обучения моделей машинного обучения.

Если вы разработчик и хотите подробно изучить эту технологию, ознакомьтесь с этими сообщениями в официальном блоге Nvidia для разработчиков. В блоге Nvidia для разработчиков есть десятки сообщений на эту тему.

Применение тензорных ядер

По сути, все, что делает Tensor coreS, — это ускоряет скорость умножения матриц.Их применение практически не ограничено. Но вот некоторые из самых известных:

Искусственный интеллект и машинное обучение

Искусственный интеллект — это настоящее, а искусственный интеллект — это будущее. Глубокое обучение включает в себя обработку массивного набора данных. Если вы знакомы с основами машинного обучения, вы знаете, как набор данных передается через несколько слоев нейронных сетей. Это не что иное, как умножение матриц.

Графические процессоры Nvidia сегодня работают на нескольких рабочих станциях. В настоящее время большинство суперкомпьютеров оснащены графическими процессорами Nvidia, и это помогает компьютерным инженерам использовать эту технологию.

Самоуправляемые электромобили

Инженеры-электрики и компьютерщики, работающие над автомобилями нового поколения, могут использовать тензорные ядра. Графические процессоры Nvidia идеально подходят для моделирования преобразователей электроэнергии и обучения алгоритмам автономного вождения.

Медиа и развлечения

Высокопроизводительные компьютеры могут очень пригодиться при создании контента в формате 4K. Создание графики и видео в формате 4K требует серьезной вычислительной мощности.

Академические и исследовательские лаборатории

Университетам, работающим над алгоритмами искусственного интеллекта и машинного обучения, необходимо моделировать свои модели. Наличие платформы, которая может ускорить моделирование, может творить чудеса.

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

Игры

Что, если вы не инженер по информатике, который каждый день обучает алгоритмы машинного обучения? Есть ли что-то, о чем вам следует беспокоиться?

Ответ — да.

Графические процессоры Nvidia серии RTX поддерживают еще одну совершенно новую функцию Nvidia, которая называется DLSS (суперсэмплинг с глубоким обучением). DLSS использует алгоритмы глубокого обучения для рендеринга графики с низким разрешением и увеличения ее масштаба путем шумоподавления. При включенном DLSS ваш компьютер может отображать игры, скажем, в разрешении 1080p и масштабировать его до разрешения 1440p.

Конечно, качество будет не таким хорошим, как исходное 1440p, но повышение FPS, которое вы получаете с DLSS, того стоит. Можно сказать, что DLSS 1.0 не был хорош; многие детали были потеряны во время повышения частоты дискретизации. Но с тех пор, как Nvidia представила DLSS 2.0, все изменилось в правильном направлении.

Эта технология существует уже довольно давно, но лишь немногие игры поддерживают DLSS или даже трассировку лучей. Control, Shadow of the Tomb Raider — некоторые из игр, которые поддерживают DLSS и трассировку лучей.

Эта технология будет поддерживаться и в будущих играх, таких как Call of Duty Black Ops: Cold War, Cyberpunk 2077 и Watchdogs Legion. Аппаратному обеспечению предыдущего поколения становится все труднее соответствовать требованиям новых игр.

Если вам интересно проверить наши тесты графических процессоров, посмотрите наш рейтинг видеокарт.

После объявления Nvidia о трассировке лучей в реальном времени 2-го поколения поддержка разрешения 4K и 60 кадров в секунду стала проблемой. Только лучшие графические процессоры могут удовлетворить эти быстрорастущие требования.

Трассировка лучей — это сверхинтенсивный процесс. Чтобы обеспечить играбельный FPS с включенным RTX, разработчики игр должны проделать огромную работу по оптимизации игр. Добавление алгоритмов шумоподавления увеличивает нагрузку. Тензорные ядра помогут ядрам трассировки лучей, которые, как ожидается, улучшат шумоподавление ИИ в будущем.

Хотя большинство этих процессов по-прежнему выполняются на ядрах CUDA, ядра трассировки лучей и тензорные ядра вскоре будут играть важную роль в этом процессе.

Специализированные ASIC для машинного обучения

Известно, что процессоры общего назначения обладают низкой производительностью для приложений машинного и глубокого обучения. Возрастает интерес к разработке ASIC (специализированных интегральных схем) для приложений искусственного интеллекта. Google — одна из таких компаний, которая разработала для этой цели собственную технологию.

TPU Google

Компания Google разработала блоки обработки TensorFlow (TPU) с аналогичной целью. Второе поколение TPU Google называется Cloud TPU. Эти процессоры созданы специально для обучения нейронных сетей. Они зависят от приложения.

Поисковой гигант предоставил облачную платформу, которая позволяет пользователям запускать свои модели обучения в облаке. Пользователю не нужно владеть TPU, чтобы использовать его функции; Google позволяет любому арендовать TPU за определенную плату и запускать алгоритмы машинного обучения.

Nvidia не считает это угрозой, пока Google использует эти TPU для своих собственных приложений. Тем не менее, Google, не использующий процессоры Nvidia, оказывает значительное влияние на бизнес Nvidia, поскольку Google мог бы быть крупным клиентом, если не самым известным клиентом за всю историю. В тот день, когда Google начнет продавать эти чипы, он составит жесткую конкуренцию старейшему производителю графических процессоров.

Стоят ли они шумихи?

На этот вопрос сложно дать однозначный ответ.Графические процессоры Nvidia Geforce RTX 3000 обеспечивают выдающуюся производительность в приложениях ИИ. Имеет смысл купить его, если вы работаете в этой области. Собственная платформа искусственного интеллекта Google Tensorflow поддерживает ускорение с помощью ядер Tensor.

Учитывая, что они предлагают функции, доступные в линейке Quadro от Nvidia, за небольшую часть своей цены, карты Geforce RTX являются довольно хорошим выбором для энтузиастов машинного обучения и искусственного интеллекта.

Еще один способ воспользоваться преимуществами тензорных ядер – это поставщик облачных услуг, например Amazon AWS или Google Cloud. Это полезно для тех, кто не хочет вкладывать средства в высокопроизводительный ПК.

Даже по прошествии многих лет ядра Tensor используются в небольшом количестве высококачественных потребительских графических карт. У графических процессоров, таких как серия Geforce 16, их до сих пор нет. Intel и AMD не предлагают их в своих графических процессорах. Однако в ближайшие годы они, скорее всего, разработают альтернативу тензорным ядрам Nvidia.

С этими графическими процессорами RTX малые предприятия, инженеры и студенты могут начать изучать и экспериментировать с машинным обучением. Возможно, в будущем мы даже начнем использовать ASIC для решения задач, связанных с машинным обучением.

Узнайте, как тензорные ядра ускоряют ваши модели смешанной точности

Ваши модели глубокого обучения, от интеллектуальных помощников до автономных роботов и не только, решают задачи, сложность которых быстро растет. Но объединение этих моделей становится все труднее и часто приводит к неэффективным и неэффективным циклам обучения.

Вы не должны позволять этим ограничениям замедлять вашу работу. Графические процессоры NVIDIA Ampere, Volta и Turing на базе тензорных ядер открывают прямой путь к более быстрому обучению и повышению производительности глубокого обучения. Третье поколение тензорных ядер, представленное в архитектуре NVIDIA Ampere, обеспечивает огромный прирост производительности и обеспечивает новые точности для охвата всего спектра, необходимого от исследований до производства — FP32, Tensor Float 32 (TF32), FP16, INT8, INT4 и bfloat16. С включенными тензорными ядрами вы можете значительно увеличить пропускную способность и сократить время обучения ИИ.

Новое знакомство с тензорными ядрами?

Узнайте, как тензорные ядра ускоряют обучение и развертывание ИИ

Графические процессоры NVIDIA с включенными тензорными ядрами уже помогли Fast.AI и AWS добиться впечатляющего прироста производительности и позволили NVIDIA занять первые места в MLPerf, первом общеотраслевом тесте искусственного интеллекта.

Истории успеха клиентов

Nuance добился 50 процентного ускорения обучения ASR и NLP с помощью Mixed Precision

AWS рекомендует тензорные ядра для самых сложных моделей глубокого обучения и научных приложений

Эталонные показатели производительности

NVIDIA занимает первые места в MLPerf — первом в мире общеотраслевом тесте искусственного интеллекта за счет использования тензорных ядер

Узнайте о производительности продуктов NVIDIA AI в разных платформах, моделях и графических процессорах

Высокопроизводительные вычисления

Графические процессоры NVIDIA с тензорными ядрами обеспечивают 5 из 6 финалистов Gordon Bell в научных приложениях

Использование смешанной точности для научных вычислений FP64

«Исследователи в области машинного обучения, специалисты по данным и инженеры хотят сократить время разработки решения. Когда TensorFloat-32 изначально интегрирован в PyTorch, он обеспечивает прямое ускорение без изменений кода, сохраняя при этом точность FP32 при использовании графических процессоров на базе архитектуры NVIDIA Ampere».

«TensorFloat-32 обеспечивает значительное увеличение производительности приложений ИИ для обучения и логического вывода, сохраняя при этом уровень точности FP32. Мы планируем обеспечить нативную поддержку TensorFloat-32 в TensorFlow, чтобы специалисты по обработке и анализу данных могли извлечь выгоду из значительно более высоких скоростей графических процессоров NVIDIA A100 с тензорными ядрами без каких-либо изменений кода».

— Кемаль Эль Муджахид, директор по управлению продуктами TensorFlow

«Nuance Research продвигает и применяет технологии диалогового ИИ для мощных решений, которые переопределяют то, как люди и компьютеры взаимодействуют. Скорость нашего продвижения отражает скорость, с которой мы обучаем и оцениваем модели глубокого обучения. С помощью Automatic Mixed Precision мы добились 50-процентного ускорения обучения модели ASR на основе TensorFlow без потери точности за счет минимального изменения кода. Мы стремимся добиться аналогичного эффекта в других наших приложениях для обработки языка с глубоким обучением».

— Вэньсюань Тэн, старший менеджер по исследованиям, Nuance Communications

«Автоматизированная смешанная точность на базе графических процессоров NVIDIA с тензорными ядрами на Alibaba позволяет нам мгновенно ускорить модели искусственного интеллекта почти в 3 раза. Наши исследователи оценили простоту включения этой функции для мгновенного ускорения нашего ИИ».

— Вэй Линь, старший директор Alibaba Computing Platform

«Clova AI разрабатывает передовые мультимодальные платформы в рамках партнерства между ведущей поисковой системой Кореи NAVER и ведущим мессенджером Японии LINE. Команда LaRva из Clova AI фокусируется на понимании языка на этой платформе, чтобы предоставлять услуги на основе ИИ. «Использование автоматической смешанной точности на базе графических процессоров NVIDIA с тензорными ядрами увеличило пропускную способность и позволило нам удвоить размер пакета для таких массивных моделей, как RoBERTa. С помощью этих оптимизаций мы добились ускорения обучения в 2 раза при сохранении точности. Мы ожидаем, что эта усовершенствованная технология может улучшить многие наши услуги НЛП, включая ИИ для контакт-центра. Это означает значительную экономию средств при производстве наших моделей и улучшенные услуги для клиентов в более короткие сроки».

— Донгджун Ли и Сунгдонг Ким, инженер по машинному обучению, NAVER

< /цитата>

Последние три года Nvidia производит графические чипы с дополнительными ядрами, помимо обычных, используемых для шейдеров. Эти загадочные блоки, известные как тензорные ядра, можно найти в тысячах настольных ПК, ноутбуков, рабочих станций и центров обработки данных по всему миру. Но что именно они собой представляют и для чего используются? Они вообще нужны вам в видеокарте?

Сегодня мы объясним, что такое тензор и как тензорные ядра используются в мире графики и глубокого обучения.

Время для быстрого урока математики

Чтобы точно понять, что делают тензорные ядра и для чего их можно использовать, нам сначала нужно понять, что такое тензоры. Все микропроцессоры, в какой бы форме они ни были, выполняют математические операции (сложение, умножение и т. д.) над числами.

Иногда эти числа нужно сгруппировать, потому что они имеют определенное значение друг для друга. Например, когда чип обрабатывает данные для рендеринга графики, он может иметь дело с отдельными целыми значениями (такими как +2 или +115) для коэффициента масштабирования или с группой чисел с плавающей запятой (+0,1, -0,5, +). 0.6) для координат точки в трехмерном пространстве. В последнем случае для определения местоположения требуются все три элемента данных.

Тензор – это математический объект, описывающий отношения между другими математическими объектами, которые связаны друг с другом.

тензор – это математический объект, описывающий взаимосвязь между другими математическими объектами, которые связаны друг с другом. Обычно они отображаются в виде массива чисел, где размер массива можно просмотреть, как показано ниже.

Самый простой тип тензора, который вы можете получить, будет иметь нулевую размерность и состоять из одного значения — другое название для этого — скалярная величина. Когда мы начинаем увеличивать количество измерений, мы можем столкнуться с другими распространенными математическими структурами:

  • 1 размер = вектор
  • 2 измерения = матрица

Строго говоря, скаляр — это тензор 0 x 0, вектор — это 1 x 0, а матрица — это 1 x 1, но для простоты и того, как это связано с тензорными ядрами в графическом процессоре, мы я просто буду иметь дело с тензорами в виде матриц.

Одной из самых важных математических операций, выполняемых с матрицами, является умножение (или произведение). Давайте посмотрим, как перемножаются две матрицы с четырьмя строками и столбцами значений:

Окончательный ответ на умножение всегда имеет то же количество строк, что и первая матрица, и то же количество столбцов, что и вторая. Так как же умножить эти два массива? Вот так:

Чтобы со всем этим справиться, вам понадобятся не только пальцы рук и ног

Как видите, «простое» вычисление матричного произведения состоит из целой стопки маленьких умножений и сложений. Поскольку каждый ЦП на рынке сегодня может выполнять обе эти операции, это означает, что любой настольный компьютер, ноутбук или планшет может обрабатывать основные тензоры.

Однако приведенный выше пример содержит 64 умножения и 48 сложений; каждый маленький продукт приводит к значению, которое должно быть где-то сохранено, прежде чем оно может быть накоплено с другими 3 маленькими продуктами, прежде чем это окончательное значение для тензора можно будет где-то сохранить.Таким образом, хотя матричные умножения математически просты, они требуют больших вычислительных ресурсов — необходимо использовать множество регистров, а кэш должен справляться с большим количеством операций чтения и записи.

Архитектура ЦП Intel Sandy Bridge, впервые предлагающая расширения AVX

ЦП от AMD и Intel на протяжении многих лет предлагали различные расширения (MMX, SSE, теперь AVX — все они SIMD, одна инструкция, несколько данных), которые позволяют процессору обрабатывать множество числа с плавающей запятой одновременно; именно то, что нужно для умножения матриц.

Но существует особый тип процессора, специально предназначенный для обработки SIMD-операций: графические процессоры (GPU).

Умнее обычного калькулятора?

В мире графики огромное количество данных необходимо перемещать и обрабатывать в виде векторов одновременно. Возможности параллельной обработки графических процессоров делают их идеальными для обработки тензоров, и сегодня все они поддерживают то, что называется GEMM (Общее умножение матриц).

Это «слитная» операция, при которой две матрицы перемножаются, а результат суммируется с другой матрицей. Существуют некоторые важные ограничения на формат матриц, и они связаны с количеством строк и столбцов в каждой матрице.

Требования к строкам и столбцам для GEMM: матрица A(m x k), матрица B(k x n), матрица C(m x n)

Алгоритмы, используемые для выполнения матричных операций, как правило, лучше всего работают, когда матрицы квадратные (например, использование массивов 10 x 10 будет работать лучше, чем 50 x 2) и относительно небольшого размера. Но они по-прежнему работают лучше, когда обрабатываются на оборудовании, предназначенном исключительно для этих операций.

В декабре 2017 года Nvidia выпустила видеокарту с графическим процессором с новой архитектурой под названием Volta. Он был нацелен на профессиональные рынки, поэтому ни в одной модели GeForce этот чип никогда не использовался. Особенностью его было то, что это был первый графический процессор с ядрами, предназначенными только для тензорных вычислений.

Графическая карта Nvidia Titan V с чипом GV100 Volta. Да, на нем можно запустить Crysis

Название не требует воображения, но тензорные ядра от Nvidia были разработаны для переноса 64 GEMM за такт на матрицах 4 x 4, содержащих значения FP16 (числа с плавающей запятой размером 16 бит) или умножение FP16. с добавлением FP32. Такие тензоры очень малы по размеру, поэтому при обработке реальных наборов данных ядра будут обрабатывать небольшие блоки более крупных матриц, создавая окончательный ответ.

Тензорная версия игры Where's Waldo от Nvidia?

Ранее в этом году архитектура Ampere дебютировала в графическом процессоре A100 для центров обработки данных, и на этот раз Nvidia улучшила производительность (256 GEMM за цикл вместо 64), добавила дополнительные форматы данных и возможность обработки < em>разреженные тензоры (матрицы с большим количеством нулей) очень быстро.

Для программистов получить доступ к тензорным ядрам в любом из чипов Volta, Turing или Ampere несложно: в коде просто нужно использовать флаг, чтобы сообщить API и драйверам, что вы хотите использовать тензорные ядра, тип данных должен должна поддерживаться ядрами, а размеры матриц должны быть кратны 8. После этого все остальное будет делать это железо.

Все это хорошо, но насколько тензорные ядра лучше справляются с GEMM, чем обычные ядра графического процессора?

Когда Volta только появилась, Anandtech провела некоторые математические тесты, используя три карты Nvidia: новую Volta, топовую карту на базе Pascal и старую карту Maxwell.

Термин точность относится к количеству битов, используемых для чисел с плавающей запятой в матрицах, где двойное значение равно 64, одинарное значение – 32 и т. д. По горизонтальной оси отложено максимальное количество операций FP, выполняемых в секунду, или сокращенно FLOP (помните, что один GEMM равен 3 FLOP).

Вы только посмотрите, что получилось, когда вместо стандартных так называемых ядер CUDA использовались тензорные ядра! Они явно фантастически справляются с такой работой, так что же можно сделать с тензорными ядрами?

Математика, чтобы сделать все лучше

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

Еще одна область, в которой любят использовать тензоры, — это машинное обучение, особенно глубокое обучение подмножеств. Все дело в обработке огромных коллекций данных в огромных массивах, называемых нейронными сетями. Связям между различными значениями данных присваивается определенный вес — число, которое показывает, насколько важна эта связь.

Поэтому, когда вам нужно выяснить, как взаимодействуют все сотни, если не тысячи подключений, вам нужно умножить каждый фрагмент данных в сети на все различные веса подключений. Другими словами, перемножьте две матрицы вместе: классическая тензорная математика!

Чипы Google TPU 3.0 скрыты под водяным охлаждением

Вот почему все большие суперкомпьютеры для глубокого обучения оснащены графическими процессорами, и почти всегда они принадлежат Nvidia. Однако некоторые компании зашли так далеко, что создали собственные процессоры с тензорными ядрами. Google, например, анонсировала свой первый TPU (блок тензорной обработки) в 2016 году, но эти чипы настолько специализированы, что не могут выполнять ничего, кроме матричных операций.

Тензорные ядра в потребительских графических процессорах (GeForce RTX)

Но что, если у вас есть видеокарта Nvidia GeForce RTX и вы не астрофизик, решающий задачи с римановыми многообразиями или экспериментирующий с глубинами сверточных нейронных сетей. Какая польза от тензорных ядер для вас?

По большей части они не используются для обычного рендеринга, кодирования или декодирования видео, и может показаться, что вы зря потратили деньги на бесполезную функцию. Однако в 2018 году Nvidia внедрила тензорные ядра в свои потребительские продукты (Turing GeForce RTX) и представила DLSS — суперсэмплинг с глубоким обучением.

Основная предпосылка проста: визуализируйте кадр с низким разрешением, а когда закончите, увеличьте разрешение конечного результата, чтобы он соответствовал исходным размерам экрана монитора (например, визуализируйте в 1080p, затем измените его размер до 1400p). ). Таким образом, вы получаете преимущество в производительности за счет обработки меньшего количества пикселей, но при этом получаете красивое изображение на экране.

Консоли делали что-то подобное в течение многих лет, и многие современные игры для ПК также предлагают эту возможность. В Assassin's Creed: Odyssey от Ubisoft вы можете изменить разрешение рендеринга вплоть до 50% от разрешения монитора. К сожалению, результат выглядит не ахти. Вот как выглядит игра в разрешении 4K с максимальными настройками графики (нажмите, чтобы увидеть версию в полном разрешении):

При работе с высоким разрешением текстуры выглядят намного лучше, поскольку в них сохраняются мелкие детали. К сожалению, все эти пиксели требуют большой обработки, чтобы вывести их в массовое производство. А теперь посмотрите, что происходит, когда игра настроена на рендеринг в разрешении 1080p (количество пикселей на 25 % больше, чем раньше), а затем с помощью шейдеров в конце снова расширяется до 4K.

Разница может быть не сразу заметна благодаря сжатию jpeg и изменению масштаба изображений на нашем веб-сайте, но броня персонажа и скала на расстоянии несколько размыты. Давайте увеличим масштаб раздела для более тщательного изучения:

Левая часть изначально воспроизведена в разрешении 4K; справа — масштабирование 1080p до 4K. Разница гораздо более заметна, когда задействовано движение, поскольку смягчение всех деталей быстро превращается в размытую кашу. Частично это можно исправить с помощью эффекта повышения резкости в драйверах видеокарты, но лучше вообще этого не делать.

Здесь DLSS играет свою роль — в первой итерации технологии Nvidia были проанализированы выбранные игры, запущенные в низком и высоком разрешениях, со сглаживанием и без него. Все эти режимы генерировали множество изображений, которые передавались на их собственные суперкомпьютеры, которые использовали нейронную сеть, чтобы определить, как лучше всего преобразовать изображение 1080p в идеальное изображение с более высоким разрешением.

Надо сказать, что DLSS 1.0 был не очень хорош, поскольку в некоторых местах детали часто терялись или странно мерцали. На самом деле он также не использовал тензорные ядра вашей видеокарты (это было сделано в сети Nvidia), и каждая игра, поддерживающая DLSS, требовала собственной проверки Nvidia для создания алгоритма масштабирования.

Когда в начале 2020 года вышла версия 2.0, в нее были внесены некоторые значительные улучшения. Наиболее примечательным из них было то, что суперкомпьютеры Nvidia использовались только для создания общего алгоритма масштабирования — в новой итерации DLSS данные из визуализированного кадра будут использоваться для обработки пикселей (через тензорные ядра вашего графического процессора) с использованием нейронной модели. .

Мы по-прежнему впечатлены тем, чего может достичь DLSS 2.0, но на данный момент очень немногие игры поддерживают его — всего 12 на момент написания. Однако все больше разработчиков стремятся внедрить его в свои будущие версии, и на то есть веские причины.

При любом масштабировании можно добиться значительного прироста производительности, так что вы можете поставить свой последний доллар на то, что DLSS продолжит развиваться.

Хотя визуальный результат DLSS не всегда идеален, высвобождая производительность рендеринга, разработчики могут добавлять больше визуальных эффектов или предлагать одну и ту же графику на более широком диапазоне платформ.

Например, DLSS часто рекламируется вместе с трассировкой лучей в играх с поддержкой RTX. Графические процессоры GeForce RTX содержат дополнительные вычислительные блоки, называемые ядрами RT: выделенные логические блоки для ускорения вычислений пересечения лучей и треугольников и обхода иерархии ограничивающих объемов (BVH). Эти два процесса требуют много времени для определения того, где свет взаимодействует с остальными объектами в сцене.

Как мы выяснили, трассировка лучей очень интенсивна, поэтому для обеспечения приемлемой производительности разработчики игр должны ограничивать количество лучей и отражений, выполняемых в сцене. Этот процесс также может привести к зернистости изображений, поэтому необходимо применять алгоритм шумоподавления, что усложняет обработку. Ожидается, что тензорные ядра повысят производительность здесь, используя шумоподавление на основе ИИ, хотя это еще не реализовано, поскольку большинство текущих приложений все еще используют ядра CUDA для этой задачи. С другой стороны, благодаря тому, что DLSS 2.0 становится жизнеспособным методом масштабирования, тензорные ядра можно эффективно использовать для повышения частоты кадров после применения к сцене трассировки лучей.

Есть и другие планы относительно тензорных ядер в картах GeForce RTX, например улучшенная анимация персонажей или имитация одежды. Но, как и в случае с DLSS 1.0 до них, пройдет некоторое время, прежде чем сотни игр будут регулярно использовать специализированные матричные калькуляторы в графических процессорах.

Ранние дни, но обещания есть

Итак, вот и все: тензорные ядра, небольшие изящные аппаратные средства, но их можно найти только в небольшом количестве видеокарт потребительского уровня. Изменится ли это в будущем? Поскольку Nvidia уже значительно улучшила производительность одного тензорного ядра в своей последней архитектуре Ampere, есть большая вероятность, что мы увидим больше моделей среднего и бюджетного ценового сегмента, использующих их.

Хотя AMD и Intel не используют их в своих графических процессорах, мы можем увидеть, что они реализуют нечто подобное в будущем. AMD предлагает систему для повышения резкости или улучшения детализации в готовых кадрах за небольшую плату за производительность, поэтому они вполне могут просто придерживаться этого — тем более, что разработчикам не нужно интегрировать его; это просто переключатель в драйверах.

Есть также аргумент, что пространство кристалла в графических чипах лучше потратить на простое добавление большего количества шейдерных ядер, что и сделала Nvidia, когда создавала бюджетные версии своих чипов Turing. Например, GeForce GTX 1650 полностью отказалась от тензорных ядер и заменила их дополнительными шейдерами FP16.

Но на данный момент, если вы хотите испытать сверхвысокую пропускную способность GEMM и все преимущества, которые это может принести, у вас есть два варианта: получить себе кучу огромных многоядерных процессоров или только один графический процессор с тензорными ядрами.

Вернуться ко всем статьям

Что такое тензорные ядра?

На современной видеокарте Nvidia имеется целых три типа специализированных процессорных ядер. Ядра CUDA, которые являются основными программируемыми графическими ядрами. Затем у нас есть ядра трассировки лучей, которые созданы для быстрого расчета эффектов световых лучей, отражающихся от сцены в режиме реального времени. Предлагая самую фотореалистичную графику, которую когда-либо видели в графике реального времени. Наконец, есть тензорные ядра. Они не привлекают особого внимания со стороны основных средств массовой информации и пользователей, но на самом деле они являются важным компонентом всего ценностного предложения карты.Прежде чем мы сможем понять, чем ценны тензорные ядра, мы должны сначала поговорить о том, что такое «тензор».

Тензор – это математическое описание группы значений, которые каким-то образом связаны друг с другом. Например, точка в трехмерном пространстве описывается тремя числами, по одному на каждую ось. Если вы перемещаете точку в трехмерном пространстве, все три числа изменяются в фиксированном отношении друг к другу. Технически одиночные числа (скаляры), векторы и матрицы чисел на самом деле являются просто тензорами особого случая. Однако, когда люди ссылаются на тензоры, обычно имеют в виду более сложные наборы связанных чисел. Например, гидростатическое давление, сила сдвига и напряжение материала легко выражаются в виде тензоров.

Пока все хорошо, но когда вы начинаете выполнять вычисления с использованием тензоров, все быстро усложняется. Когда вам нужно умножить два тензора, необходимо выполнить множество более мелких вычислений. Хуже того, в то время как ЦП выполняет эти небольшие вычисления, многие промежуточные результаты должны храниться в регистрах ЦП. Другими словами, выполнение относительно небольшого количества математических операций над сложными тензорами может быстро засорить внутреннюю работу ядра ЦП!

Тензорные ядра и глубокое обучение

Хотя любой ЦП, который может выполнять все основные математические операции, может обрабатывать тензоры, они не все выполняют их с одинаковой скоростью или эффективностью. Это проблема, которая на протяжении многих лет имела различные решения по ускорению. Вы, возможно, помните, например, расширения MMX, добавленные к ранним процессорам Pentium.

MMX в основном использовался для ускорения операций, характерных для мультимедиа. Например, видео представляет собой сетку пикселей. Каждый пиксель имеет значение цвета и положение в сетке. Теперь представьте, что вы хотите сделать что-то вроде добавления фильтра коррекции цвета к отснятому материалу, увеличить масштаб или внести иные изменения, влияющие на значение каждого отдельного пикселя в сетке. У вас есть одна операция, но вы должны применить ее к миллионам значений. Если бы вы делали их последовательно, одно за другим, это заняло бы вечность. MMX позволял ЦП применять операцию ко всей матрице значений сразу. Позже MMX был дополнен SSE и AVX. Все наборы инструкций, ускоряющие обработку матриц данных.

Что приводит нас к тензорным ядрам. Вместо ЦП общего назначения со специальными инструкциями по увеличению скорости вычисления матриц чисел у вас есть целое ядро ​​ЦП, которое выполняет только эти типы вычислений. Это кажется нишевым вариантом использования, но на самом деле популярность этих типов процессоров для центров обработки данных и рабочих станций резко возросла. Нейронным сетям и другим связанным с ними методам машинного обучения, используемым для построения алгоритмов, для работы нужны именно такие математические мускулы.

Тензорные ядра в повседневном использовании

За пределами центров обработки данных тензорные ядра могут значительно увеличить производительность отдельных рабочих станций, которым необходимо выполнять физическое моделирование. Помните, мы говорили, что такие вещи, как материальные напряжения и силы сдвига, обычно выражаются в виде тензоров. Вот почему тензорные ядра могут ускорить такие процессы, как моделирование жидкостей и газов, виртуальные автомобильные краш-тесты или любой тип физической силы, которую можно выразить в виде тензора.

Потребительские карты с тензорными ядрами, по сути линейка карт Nvidia RTX, тоже не просто несут мертвый груз. Nvidia разработала DLSS (суперсэмплинг с глубоким обучением), который, начиная с DLSS 2.0, теперь использует эти тензорные ядра для масштабирования изображений с более низким разрешением до изображений с более высоким разрешением с потрясающими результатами. Конечным результатом является то, что графический процессор не работает так усердно, создавая изображение в низком разрешении, а тензорные ядра перед отправкой на монитор подкрашивают его.

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

Другие приложения наверняка будут эффективно использовать тензорные ядра даже для обычных пользователей. RTX Voice, например, может удалить практически любой фоновый шум из живого аудиопотока. Карты без RTX тоже могут это делать, но гораздо менее эффективно.

Нужно ли вам беспокоиться?

Мы бы сказали да. Даже если вы не можете придумать какое-либо немедленное применение тензорных ядер в своих собственных сценариях использования, ясно, что Nvidia намерена работать в долгосрочной перспективе. RT и тензорные ядра никуда не денутся. Это означает, что разработчики программного обеспечения могут начать создавать программное обеспечение, чтобы использовать их преимущества. Хотя сейчас тензорные ядра могут показаться небольшой нишей, через год или два нас не удивит, если начнут появляться приложения-убийцы для этой технологии.

Читайте также: