Железо
Rar1ty
5803

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

В закладки
Слушать

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

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

Небольшой урок математики

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

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

Тензор - описывает взаимосвязь между математическими объектами, которые связаны между собой.

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

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

1 измерение = вектор

2 измерения = матрица

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

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

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

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

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

Архитектура процессора Intel Sandy Bridge - первая, предложившая AVX расширения.

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

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

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

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

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

Требования к строкам и столбцам для 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. Такие тензоры очень малы по размеру, поэтому при работе с большими наборами данных, ядра будут пропускать через себя небольшие блоки больших матриц, формируя окончательный ответ.

Менее чем через год Nvidia запустила архитектуру Turing. На этот раз в моделях GeForce потребительского класса также использовались тензорные ядра. Система была обновлена для поддержки других форматов данных, таких как INT8 (8-битные целочисленные значения), но в остальном они работали точно так же, как и в Volta.

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

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

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

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

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

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

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

FLOPS (также flops, flop/s, флопс или флоп/с; акроним от англ. FLoating-point Operations Per Second, произносится как флопс) — внесистемная единица, используемая для измерения производительности компьютеров, показывающая, сколько операций с плавающей запятой в секунду выполняет данная вычислительная система.

Математика делает всё лучше

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

Другая область, которая любит использовать тензоры, это машинное обучение, особенно глубокое обучение (deep learning). Все это связано с обработкой огромных массивов данных, называемых нейронными сетями. Соединениям между различными значениями данных присваивается определенная масса (weight) - число, которое выражает, насколько важно это соединение.

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

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

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

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

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

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

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

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

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

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

Левая часть была отрисована в 4К; правая - в 1080p, увеличенная до 4К. Разница гораздо более выражена, когда речь идет о движении, так как размягчение (softening) всех деталей быстро превращается в размытую кашу. Некоторую часть можно было бы вернуть назад, используя усиление резкости в драйверах видеокарты, но лучше вообще этого не делать.

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

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

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

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

Есть большой прирост производительности, который можно найти, делая любой вид масштабирования (upscaling), так что вы можете поставить свой последний рубль на то, что DLSS будет продолжать развиваться.

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

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

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

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

Еще рано судить, но надежда есть

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

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

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

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

{ "author_name": "Rar1ty", "author_type": "self", "tags": ["\u043f\u0435\u0440\u0435\u0432\u043e\u0434","\u043b\u043e\u043d\u0433\u0440\u0438\u0434"], "comments": 41, "likes": 194, "favorites": 410, "is_advertisement": false, "subsite_label": "hard", "id": 182473, "is_wide": false, "is_ugc": true, "date": "Sun, 02 Aug 2020 15:09:42 +0300", "is_special": false }
Объявление на DTF
0
41 комментарий
Популярные
По порядку
Написать комментарий...
6

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

Ответить
6

Ссылка есть в конце 

Ответить
6

Офигенный дизайн сайта (мы все знаем в кого тыкать палкой). Ссылки реально не замечаешь при прочтении. Так что реально лучше небось самому абзац про это вначале написать -так будет вернее.

Ответить
2

Источник есть, перевод нормальный, не парься

Ответить
1

Я поза вчера его прочитал, а тут такое.

Ответить

Скрытый бокал

13

Мужик, видно, что ты стараешься. И я даже, наверное, знаю почему - как только ввели донаты, люди массово почувствовали в себе писательские таланты. В этом нет ничего плохого. Но пожалуйста, постарайся писать оригинальный контент и хорошо готовить посты. У тебя уже два улетело в минус. Не стремись сделать по 3 поста в день. Ты хотя бы над одним поработай пару дней, что бы он реально выстрелил.

Ответить
0

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

Ответить
3

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

Ответить
0

В начале, где про умножение матриц, слово addition переведено как прибавление, лол. Умножение и прибавление, дзинь-дзинь-дзинь! 

Ответить
0

и что ты не понял?

Ответить
10

качество перевода никакое

Ответить
4

Да, иногда лучше подготовиться перед тем как лезть

Все это связано с обработкой огромных массивов данных, называемых нейронными сетями.

Соединениям между различными значениями данных присваивается определенная масса (weight) - число, которое выражает, насколько важно это соединение.

Ответить
0

Кек... Только обратил внимание на "массу". У нас это, вроде как, весом связи называется.

Ответить
0

Ну, и нейросеть - это массив данных с очень большим расширением смысла

Ответить
1

А разве можно с хабра посты воровать?

Ответить
5

Я брал статью с техспота. Оригинал там. https://www.techspot.com/article/2049-what-are-tensor-cores/

Ответить
3

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

Ответить
2

Я по быстрому пролистнул, заметил пару предложений одинакковых  и написал. Сейчас поподробнее прочитал и понял, что ошибся. Молодец что перевел, а то со мной умники одни спорили что тензорные ядра это маркетинг. @Сергей Винокуров @wolik , ну что братья почитайте хоть какую-то полезную для себя информацию, а то и будете только дезинфу расскидывать в комментариях.

Ответить
1

Шо, фепе²с не увеличивает, значит брехня этот ваш тензор, а дилс, тупа сглаживание!!11!!

Ответить
0

Слушай, хорошо, давай как взрослые люди. Где в этой статье хоть одно слово сколько транзисторов они отвели по TC? Я ничего там не нашёл.

Ответить
0

Я тебе скинул статью где показывалось сколько ядер у rt и тензоров, плюс по фоткам крисстала люди расчитали в процентах сколько они занимают пространства. А ты до сих пор ничего понять не можешь. А вообще ты влез в дисскусию о том что тензорные ядра это маркетинг. И ты защищал человека который нес откровенную чушь, что ray tracing и DLSS это маркетинговая мешура. Так что да я тебе приписал сюда из-за этого. Может будешь понимать почему тензорные ядра в gpu это интересная штука, которая открывает новые возможность для разработчкиков.

Ответить
0

Подожди, эту статью ? https://www.techspot.com/article/2049-what-are-tensor-cores/ И где на фотке видны TC? Я просто "на пальцах" тебе обьяснить пытался, что это никак не 0,71%, но походу ты в это свято уверовал. Инфы, ещё раз, о количестве "съедены" TC в сети нет. 

https://lh3.googleusercontent.com/raD52-V3yZtQ3WzOE0Cvzvt8icgGHKXPpN2PS_5MMyZLJrVxgMtLN4r2S2kp5jYI9zrA2e0Y8vAfpZia669pbIog2U9ZKdJmQ8oSBjof6gc4IrhmorT2Rr-YopMlOf1aoU3tbn5Q Здесь речь о GА100, это блок диаграмма, туринг искать лень, и понятно по ней количество транзисторов считать не верно, но задай себе вопрос почему блок Tensore Core на ней так огромен? а не жалкие 1%

Ответить
0

Как ты надоел врубать дурачка. Я же тебе сразу скинул статью где люди сравниили кристталы gtx 1660 и rtx 2060.  И получили разницу в размере кристалла. Ты адекватный или нет? Читай что я тебе пишу,  а не пропускай все.
https://3dnews.ru/985583

Ответить
0

Ок, закончим, это какой то фейспалм. Пользователь на реддите твоя инфка, слов нет. Детский сад, блять.

Ответить
0

А что не так, два разных кристала. Они одинковые и раличие в них только: имеется rt + тензоры или нет. И можно спокойной вычислить сколько они место занимают. А ты пишешь что если оффициально никто не говорит, то надо верить что посчитать нельзя.

Ну если ты не веришь в математику, то я не виноват.

Ответить
0

Так же говоря о том что RTX это "не правильный" шаг и при этом подсчёт потраченных на это транзисторов, что RT блок тоже их сьедает. https://developer.nvidia.com/blog/wp-content/uploads/2018/09/image11.jpg

Ответить
1

А на зачёт когда приходить товарищ лектор? А если серьёзно, то спасибо за такую подробную лекцию. Интересное место ДТФ - тут можно найти всё от котиков до серьёзных технических или геймдевелоперских штук.

Ответить
0

а серьёзные технические котики и геймдевелоперские котики есть?

Ответить
1

Они пока только основы элементарной математики постигают.

Ответить
0

пофиксил
от котиков и порно до серьёзных технических ебеней

Ответить

Слабый лолипоп

1
Ответить
0

О да! Многомерные тензоры, сколько же боли они могут причинить, ух!

Ответить
0

А в 16 - й сети есть такие ядра?

Ответить
0

Ну вот! Вот! теперь всё понятно.
Оригинальный автор молодец.

Ответить
0

Статья, конечно, хорошая, а вот перевод очень так себе.

Ответить
0

Чет я разницы не увидел. Что с компа потом открыл что так. 😒А так пост интересен.

Ответить
0

Первая половина статьи очень тяжко зашла, особенно на загруженную голову, но перевалив за половину текста потом прям насладился! Автору спасибо большое! 

Ответить
–1

Спасибо, очень интересно. Про перевод ничего не могу сказать, т.к. не профи и не читаю постоянно хабр или техпорт. Считаю это придирками - кому надо, тот уточнит/прочитает в проф. источниках. 

Ответить

Комментарии

{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }