Tpu процессор что это
Чем хорош чип Google Tensor? Разбор
Что ж вышел Pixel 6: появились обзоры, мы всё поняли, хайп прошел. Или нет?
Не пугайтесь про Pixel 6 и Pixel 6 Pro еще будет куча контента! В любом случае, теперь мы можем спокойно поговорить про самую главную и наверное самую недооцененную фишку нового смартфона Google — процессор Tensor.
Это необычный чип. Google Tensor не похож на, то что делает Samsung, Qualcomm, даже Apple и на то что делал HUAWEI тоже. Tensor — это нечто особенное.
В своё время Google показал, как делать вычислительную фотографию. И судя по тому, что мы узнали про Tensor, теперь Google показывает всей индустрии как делать процессоры.
Чем Google Tensor не является.
Вступление было достаточно пафосным. Поэтому давайте чуть вернёмся на землю и посмотрим правде в глаза: Google Tensor – не идеальный процессор. Он не самый быстрый, не самый энергоэффективный и далеко не такой вертикально интегрированный, как А15 Bionic. Ведь в процессорах Apple, в отличие от Google, свой дизайн ядер, своя графика, и вообще все свое, кроме модема, но и это вопрос времени.
Но есть в Google Tensor такое, что выделяет его среди всех конкурентов. И речь идет про уникальные инженерные решения, до которых кроме Google никто не додумался. И начнем мы с такого решения, как компоновка.
Компоновка
Такой вопрос. Кто у нас в мире главный модельер? Или скажем так, самый влиятельный модельер? Как думаете? Кто-нибудь из дома Gucci? Armani? Prada? Может Канье Уэст?
Нет! Это компания ARM, которая, как положено хорошему модельеру, каждый год выпускает новую коллекцию дизайнов ядер Cortex. Дальше эти дизайны лицензируют вендоры: Qualcomm, Samsung, MediaTek и теперь Google. Они и воплощают их в виде процессоров для наших смартфонов.
Поэтому именно компания ARM определяет, что именно вы будете носить в карманах джинс и сумочках в этом году. Более того, помимо дизайна ядер, ARM еще дает рекомендации — как именно, оптимальнее всего эти ядра компоновать.
Например, в этом году на пике моды трёхкластерная компоновка 1+3+4, где есть одно огромное ядро Cortex-X1, три мощных ядра Cortex-A78, и четыре энергоэффективных Cortex-A55.
Такая компоновка используется в Snapdragon 888, Exynos 2100, да и остальные делают примерно то же самое, танцуя в ритме 1+3+4.
Но только не Google! Эти ребята делают какую-то особую дичь. В Google Tensor в качестве энергоэффективных ядер, как и у всех используется четыре ядра Cortex A55. Но вместо одного альфа ядра, тут сразу два Cortex-X1. А вместо актуальных на текущий момент Cortex-A78, они используют два ядра Cortex-A76.
А это даже не прошлый, а позапрошлый дизайн, который вышел еще в 2018 году. Это времена Snapdragon 855. Например, Pixel 4 работал на таком процессоре.
Зачем Google так делает? Ведь в использовании старых ядер нет ни экономической выгоды, ни технических причин. А всё дело вот в этой картинке.
Здесь вы видите сравнение ядер Cortex A76, A77 и A78 по производительности, потребляемой энергии и площади при использовании одинакового техпроцесса 7 нм.
И тут мы видим, что Cortex A76 из этой троицы — это самые компактные и энергоэффективные ядра и разница тут огромная. То есть смотрите, если Google уже влепил два огромных мощных ядра X1, они просто не могут поставить им в пару практически такие же мощные A78. Процессор будет тупо перегреваться. А мы знаем как перегревается Snapdragon 888 с одним ядром X1.
Поэтому Google взяли Cortex-A76 — как самые оптимальные средние ядра. И тем самым у них получилась куда более честная и логичная трёхкластерная компоновка 2+2+4.
Более того, Cortex-A76 в Google Tensor — это не те же самые ядра, что были 3 года назад и стоят в Pixel 4. Ведь тогда процессоры разрабатывалась по техпроцессу 7 нм, а Google перенёс старый дизайн на новый техпроцесс 5 нм, что позволило сделать ядра еще меньше и энергоэффективнее. И скорее всего, так сделать было сложнее, чем просто использовать актуальные A78 изначально заточенные под 5 нм.
Круто! Но зачем нужно было создавать себе сложности, и брать два ядра X1? Так процессор будет работать быстрее? Нет!
По одноядерной производительности мы вполне логично получаем паритет с Qualcomm Snapdragon 888 и Samsung Exynos 2100. А вот в многопотоке Tensor по полной сливает всем актуальным чипам.
Тогда зачем Google пришлось экспериментировать с компоновкой? А ответ кроется в понятии гетерогенные вычисления. Смотрите.
Гетерогенные вычисления
Да, процессор Google в бенчмарках – не чемпион, хотя и не аутсайдер, это тоже стоит признать, но Snapdragon 888 объективно в бенчмарках быстрее. По крайней мере в тестах CPU.
Но дело в том, что бенчмарки не показывают как процессор будет работать в реальной жизни.
Бенчмарк – это как упражнение в спортзале, когда изолированно нагружаешь какую-то группу мышц. Но в реальной жизни, когда нужно перетащить шкаф, хорошо прокаченный трицепс может и не пригодиться.
Тоже самое и с процессорами, очень редко бывает когда нагружается какой-то отдельный вычислительный блок, например, только одно мощное ядро.
Поэтому реальный тест на прочность процессора происходит когда одновременно происходят вычисления совершенно разного типа, и соответственно нагрузка идет на всю систему на кристалле, а не только на CPU или GPU. Это и называется гетерогенными вычислениями.
Яркий пример таких вычислений — это работа приложения “камера”. В этом случае нагрузка на центральный процессор не максимальная, а средняя. Но одновременно с ЦП тут на полную трудится сигнальный сопроцессор ISP, постоянно считая и обрабатывая данные с матрицы. Трудится графический процессор, особенно, если запустить AR. Нейронный движок постоянно распознаёт, сегментирует изображение. И всё это в реальном времени со скоростью 60 кадров в секунду. И вот именно под такие средние гетерогенные нагрузки и спроектирован Google Tensor.
Одни из руководителей команды Google Silicon Фил Кармак описывает это так:
“В задачах с довольно высокой нагрузкой, мы используем два ядра X1 на пониженных частотах, что делает их ультраэффективными. При условиях, в которых вы бы привычно использовали пару Cortex A76, выжатых на максимум, пара Cortex X1 будет едва напрягаться.”
К примеру, если предыдущий Pixel 5 перегревался при записи 4К видео. То в Pixel 6 такой проблемы нет, несмотря на то, что «шестерка» пишет видео в HDR.
Также по словам Кармака два ядра Cortex X1 позволяют быстрее щелкать кратковременные быстрые задачи, типа открытия приложения или подгрузки страницы, чтобы быстрее переходить в энергоэффективное состояние.
По крайней мере, именно такая была идея по словам Google. На практике же, судя по тестам авторитетного ресурса Anandtech, именно реализация идей подкачала. Средние ядра А76 и мелкие А55 в реализации Google, тупо отстают от конкурентов как по энергоэффективности, так и по мощности.
Tensor
Но не об этом, на самом деле нам хотелось поговорить, рассказывая про Google Tensor. Давайте уже обратим внимание на слона в комнате, имя этого слона «Искусственный интеллект».
Главная инновация мобильного процессора Google — это собственный нейронный движок TPU. Собственно TPU расшифровывается Tensor Processing Unit. Весь процессор, назван в честь этого компонента и построен вокруг этого компонента.
И вот, по тем же данным Anandtech, нейромодулятор в Google Tensor, просто уничтожает всех. Например, в области обработки естественного языка, превосходство над конкурентами трехкратное. И это разница в несколько поколений.
Да, не во всех тестах нейромодуль Google доминирует, но везде цифры очень хорошие. И это говорит, что нейропроцессор Google – один из самых мощных, а может и самый мощный на рынке.
Но зачем Google понадобилась такая мощность?
И вот наконец-то настал их звёздный час, потому, что теперь появилось железо на котором их алгоритмы можно воплотить в жизнь. Давайте посмотрим, что уже реализовали.
HDRnet
В 2017 году ребята научили нейросеть, в реальном времени имитировать работу их фирменного алгоритма HDR+.
Сначала эту наработку стали использовать в Pixel 4 в виде функции Live HDR+. В приложении камера появились HDR превью и слайдеры регулировки тени и света.
А в Pixel 6 этот же алгоритм встроили прямо в ISP-модуль и поэтому смогли масштабировать для записи HDR видео. И теперь этот алгоритм называют HDRnet.
Кстати, обратили внимание как Google прокачал стабилизацию в видео? Еще бы, ведь они использовали алгоритм Deep Online Fused Video Stabilization из публикации этого года.
И видимо алгоритм Steadiface 2019 года для фронталки.
Synthesize Motion Blur
Погнали дальше. В Pixel 6 появился режим, имитирующий длинную выдержку? Так публикация ждала своей реализации с 2019 года!
Face Unblur
Или наоборот, Pixel 6 научился убирать размытие движение с лиц? Скорее всего им помогла вот эта работа 2021 года по исправлению размытия. Кстати, вы знали, что на фотках со сверхширокоугольной камеры Google исправляет геометрию лиц? И так далее…
В камере реализовано огромное количество алгоритмов, а сколько всего стоит на очереди даже сложно представить.
Не нравятся блики на фотках нового пикселя? Не проблема, скорее всего в будущем мы от них избавимся, потому как есть алгоритм, удаляющий блики.
Context HUB
А ведь все эти сложные алгоритмы из мира вычислительной фотографии – это только малая часть, того чем занимается Google Research.
В Google Tensor встроен потрясающий движок распознавания речи и перевода, который работает с 52 языками, насколько я помню, и всё это целиком устройстве, без подключения к сети.
Так в системе на кристалле есть отдельный вычислительный блок Context Hub, который по словам Google приносит «машинное обучение в область сверхнизкого энергопотребления».
Это блок, который постоянно трудится и что-то анализирует в фоне. Например, он отвечает за функцию, “Что сейчас играет?” и бог знает чем он еще занимается? Может, предлагает варианты ответа на сообщения в gBoard, может оптимизирует энергопотребление. Мы точно не знаем. Но что мы знаем наверняка: Google Tensor — это первый процессор, в котором настолько обширно используются возможности машинного обучения. И это только начало…
Tensor 2 и выводы
В сеть уже потихоньку начинают утекать данные про Google Tensor 2, который будет в Pixel 7.
Если первый Tensor имел кодовое имя Whitechapel и номер модели GS101, Tensor 2, судя по утечкам, получил крутое кодовое имя Cloudripper и номер GS201.
Данных по характеристикам нового Tensor пока нет, но очевидно что Google в этой игре всерьез и надолго.
Разработка первого Tensor шла на протяжении четырех лет. И хоть у них получился не самый быстрый и энергоэффективный процессор, первый блин вышел точно не комом.
Да, Pixel в общих мировых продажах телефонв занимают ничтожно малою долю. Да, Пиксели всегда в чем-то отстают от конкурентов. Но влияние этих телефонов на всю индустрию огромное!
В свое время Google задал тренд на вычислительную фотографию. Теперь же мы очень надеемся Google задаст новый тренд в мире процессоров.
Ведь Google Tensor — это процессор, созданный не маркетологами, а инженерами. И в наше время это большая редкость.
Почему TPU так хорошо подходят для глубинного обучения?
Тензорный процессор третьего поколения
Тензорный процессор Google — интегральная схема специального назначения (ASIC), разработанная с нуля компанией Google для выполнения задач по машинному обучению. Он работает в нескольких основных продуктах Google, включая Translate, Photos, Search Assistant и Gmail. Облачный TPU обеспечивает преимущества, связанные с масштабируемостью и лёгкостью использования, всем разработчикам и специалистам по изучению данных, запускающим передовые модели машинного обучения в облаке Google. На конференции Google Next ‘18 мы объявили о том, что Cloud TPU v2 теперь доступен для всех пользователей, включая бесплатные пробные учётные записи, а Cloud TPU v3 доступен для альфа-тестирования.
Но многие спрашивают – какая разница между CPU, GPU и TPU? Мы сделали демонстрационный сайт, где расположена презентация и анимация, отвечающая на этот вопрос. В этом посте я хотел бы подробнее остановиться на определённых особенностях содержимого этого сайта.
Как работают нейросети
Перед тем, как начать сравнивать CPU, GPU и TPU, посмотрим, какого рода вычисления требуются для машинного обучения – а конкретно, для нейросетей.
Представьте, к примеру, что мы используем однослойную нейросеть для распознавания рукописных цифр, как показано на следующей диаграмме:
Если картинка будет сеткой размером 28х28 пикселей серой шкалы, её можно преобразовать в вектор из 784 значений (измерений). Нейрон, распознающий цифру 8, принимает эти значения и перемножает их со значениями параметра (красные линии на диаграмме).
Параметр работает как фильтр, извлекая особенности данных, говорящих о схожести изображения и формы 8:
Это наиболее простое объяснение классификации данных нейросетями. Перемножение данных с соответствующими им параметрами (окраска точек) и их сложение (сумма точек справа). Наивысший результат обозначает наилучшее совпадение введённых данных и соответствующего параметра, которое, скорее всего, и будет правильным ответом.
Проще говоря, нейросетям требуется делать огромное количество перемножений и сложений данных и параметров. Часто мы организовываем их в виде матричного перемножения, c которым вы могли столкнуться в школе на алгебре. Поэтому проблема состоит в том, чтобы выполнить большое количество матричных перемножений как можно быстрее, потратив как можно меньше энергии.
Как работает CPU
Как подходит к такой задаче CPU? CPU – процессор общего назначения, основанный на архитектуре фон Неймана. Это значит, что CPU работает с ПО и памятью как-то так:
Главное преимущество CPU – гибкость. Благодаря архитектуре фон Неймана, вы можете загружать совершенно разное ПО для миллионов различных целей. CPU можно использовать для обработки текстов, управления ракетными двигателями, выполнения банковских транзакций, классификации изображений при помощи нейросети.
Но поскольку CPU такой гибкий, оборудование не всегда знает заранее, какой будет следующая операция, пока не прочтёт следующую инструкцию от ПО. CPU нужно хранить результаты каждого вычисления в памяти, расположенной внутри CPU (так называемые регистры, или L1-кэш). Доступ к этой памяти становится минусом архитектуры CPU, известным как узкое место архитектуры фон Неймана. И хотя огромное количество вычислений для нейросетей делает предсказуемым будущие шаги, каждое арифметико-логическое устройство CPU (ALU, компонент, хранящий и управляющий множителями и сумматорами) выполняет операции последовательно, каждый раз обращаясь к памяти, что ограничивает общую пропускную способность и потребляет значительное количество энергии.
Как работает GPU
Для увеличения пропускной способности по сравнению с CPU, GPU использует простую стратегию: почему бы не встроить в процессор тысячи ALU? В современном GPU содержится порядка 2500 – 5000 ALU на процессоре, что делает возможным выполнение тысяч умножений и сложений одновременно.
Такая архитектура хорошо работает с приложениями, требующими массивного распараллеливания, такими, например, как умножение матриц в нейросети. При типичной тренировочной нагрузке глубинного обучения (ГО) пропускная способность в этом случае увеличивается на порядок по сравнению с CPU. Поэтому на сегодняшний день GPU является наиболее популярной архитектурой процессоров для ГО.
Но GPU всё равно остаётся процессором общего назначения, который должен поддерживать миллион различных приложений и ПО. А это возвращает нас к фундаментальной проблеме узкого места архитектуры фон Неймана. Для каждого вычисления в тысячах ALU, GPU необходимо обратиться к регистрам или разделяемой памяти, чтобы прочесть и сохранить промежуточные результаты вычислений. Поскольку GPU выполняет больше параллельных вычислений на тысячах своих ALU, он также тратит пропорционально больше энергии на доступ к памяти и занимает большую площадь.
Как работает TPU
Когда мы в Google разрабатывали TPU, мы построили архитектуру, предназначенную для определённой задачи. Вместо разработки процессора общего назначения, мы разработали матричный процессор, специализированный для работы с нейросетями. TPU не сможет работать с текстовым процессором, управлять ракетными двигателями или выполнять банковские транзакции, но он может обрабатывать огромное количество умножений и сложений для нейросетей с невероятной скоростью, потребляя при этом гораздо меньше энергии и умещаясь в меньшем физическом объёме.
Главное, что позволяет ему это делать – радикальное устранение узкого места архитектуры фон Неймана. Поскольку основной задачей TPU является обработка матриц, разработчикам схемы были знакомы все необходимые шаги вычислений. Поэтому они смогли разместит тысячи множителей и сумматоров, и соединить их физически, сформировав большую физическую матрицу. Это называется архитектурой конвейерного массива. В случае с Cloud TPU v2 используются два конвейерных массива по 128 х 128, что в сумме даёт 32 768 ALU для 16-битных значений с плавающей точкой на одном процессоре.
Посмотрим, как конвейерный массив выполняет подсчёты для нейросети. Сначала TPU загружает параметры из памяти в матрицу множителей и сумматоров.
Затем TPU загружает данные из памяти. По выполнению каждого умножения результат передаётся следующим множителям, при одновременном выполнении сложений. Поэтому на выходе будет сумма всех умножений данных и параметров. В течение всего процесса объёмных вычислений и передачи данных доступ к памяти совершенно не нужен.
Поэтому TPU демонстрирует большую пропускную способность при подсчётах для нейросетей, потребляя гораздо меньше энергии и занимая меньше места.
Преимущество: уменьшение стоимости в 5 раз
Какие же преимущества даёт архитектура TPU? Стоимость. Вот стоимость работы Cloud TPU v2 на август 2018 года, на время написания статьи:
Обычная и TPU-шная стоимость работы для разных регионов Google Cloud
Стэнфордский университет раздаёт набор тестов DAWNBench, измеряющих быстродействие систем с глубинным обучением. Там можно посмотреть на различные комбинации задач, моделей и вычислительных платформ, а также на соответствующие результаты тестов.
Что такое тензорные ядра: вычисления со смешанной точностью
В течение последних трёх лет Nvidia создавала графические чипы, в которых помимо обычных ядер, используемых для шейдеров, устанавливались дополнительные. Эти ядра, называемые тензорными, уже есть в тысячах настольных PC, ноутбуков, рабочих станций и дата-центров по всему миру. Но что же они делают и для чего применяются? Нужны ли они вообще в графических картах?
Сегодня мы объясним, что такое тензор, и как тензорные ядра используются в мире графики и глубокого обучения.
Краткий урок математики
Чтобы понять, чем же заняты тензорные ядра и для чего их можно использовать, нам сначала разобраться, что такое тензоры. Все микропроцессоры, какую бы задачу они ни выполняли, производят математические операции над числами (сложение, умножение и т.д.).
Тензор — это математический объект, описывающий соотношения между другими математическими объектами, связанными друг с другом. Обычно они отображаются в виде массива чисел, размерность которого показана ниже.
Простейший тип тензора имеет нулевую размерность и состоит из единственного значения; иначе он называется скалярной величиной. При увеличении количества размерностей мы сталкиваемся с другими распространёнными математическими структурами:
Одна из самых важных математических операций, выполняемых над матрицами — это умножение (или произведение). Давайте взглянем на то, как перемножаются друг на друга две матрицы, имеющие по четыре строки и столбца данных:
Окончательным результатом умножения всегда будет то же количество строк, что и в первой матрице, и то же количество столбцов, что и во второй. Как же перемножить эти два массива? Вот так:
На пальцах это посчитать не удастся
Как вы видите, вычисление «простого» произведения матриц состоит из целой кучи небольших умножений и сложений. Так как любой современный центральных процессор может выполнять обе эти операции, простейшие тензоры способен выполнять каждый настольный компьютер, ноутбук или планшет.
Однако показанный выше пример содержит 64 умножений и 48 сложений; каждое небольшое произведение даёт значение, которое нужно где то хранить, прежде чем его можно будет сложить с другими тремя небольшими произведениями, чтобы позже можно было сохранить окончательное значение тензора. Поэтому, несмотря на математическую простоту умножений матриц, они затратны вычислительно — необходимо использовать множество регистров, а кэш должен уметь справляться с кучей операций считывания и записи.
Архитектура Intel Sandy Bridge, в которой впервые появились расширения AVX
На протяжении многих лет в процессорах AMD и Intel появлялись различные расширения (MMX, SSE, а теперь и AVX — все они являются SIMD, single instruction multiple data), позволяющие процессору одновременно обрабатывать множество чисел с плавающей запятой; это как раз то, что требуется для перемножения матриц.
Но существует особый тип процессоров, который специально спроектирован для обработки операций SIMD: графические процессоры (graphics processing unit, 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 выпустила графическую карту с GPU, имеющим новую архитектуру Volta. Она была нацелена на профессиональные рынки, поэтому этот чип не использовался в моделях GeForce. Уникальным он был потому, что стал первым графическим процессором, имеющим ядра только для выполнения тензорных вычислений.
Графическая карта Nvidia Titan V, на которой установлен чип GV100 Volta. Да на ней можно запустить Crysis
Тензорные ядра Nvidia были предназначены для выполнения по 64 GEMM за тактовый цикл с матрицами 4 x 4, содержащими значения FP16 (числа с плавающей запятой размером 16 бит) или умножение FP16 со сложением FP32. Такие тензоры очень малы по размеру, поэтому при обработке настоящих множеств данных ядра обрабатывают небольшие части больших матриц, выстраивая окончательный ответ.
Менее года спустя Nvidia выпустила архитектуру Turing. На этот раз тензорные ядра были установлены и в модели GeForce потребительского уровня. Система была улучшена для поддержки других форматов данных, например, INT8 (8-битное целочисленное значение), но во всём остальном они работали так же, как в Volta.
В начале этого года архитектура Ampere дебютировала в графическом процессоре дата-центра A100, и на этот раз Nvidia повысила производительность (256 GEMM за цикл вместо 64), добавила новые форматы данных и возможность очень быстрой обработки разреженных тензоров (sparse tensor) (матриц со множеством нулей).
Программисты могут получить доступ к тензорным ядрам чипов Volta, Turing и Ampere очень просто: код всего лишь должен использовать флаг, сообщающий API и драйверам, что нужно применять тензорные ядра, тип данных должен поддерживаться ядрами, а размерности матриц должны быть кратными 8. При выполнении всех этих условий всем остальным займётся оборудование.
Всё это здорово, но насколько тензорные ядра лучше в обработке GEMM, чем обычные ядра GPU?
Когда появилась Volta, сайт Anandtech провёл математические тесты трёх карт Nvidia: новой Volta, самой мощной из линейки Pascal и старой карты Maxwell.
Понятие точности (precision) относится к количеству бит, использованных для чисел с плавающей запятой в матрицах: двойная (double) обозначает 64, одиночная (single) — 32, и так далее. По горизонтальной оси отложено максимальное количество операций с плавающей запятой, выполняемое за секунду, или сокращённо FLOPs (помните, что одна GEMM — это 3 FLOP).
Просто взгляните на результаты при использовании тензорных ядер вместо так называемых ядер CUDA! Очевидно, что они потрясающе справляются с подобной работой, но что же мы можем делать при помощи тензорных ядер?
Математика, делающая всё лучше
Тензорные вычисления чрезвычайно полезны в физике и проектировании, они используются для решения всевозможных сложных задач в механике жидкостей, электромагнетизме и астрофизике, однако компьютеры, которые использовались для обработки подобных чисел, обычно выполняли операции с матрицами в больших кластерах из центральных процессоров.
Ещё одна область, в которой любят применять тензоры — это машинное обучение, особенно её подраздел «глубокое обучение». Его смысл сводится к обработке огромных наборов данных в гигантских массивах, называемых нейронными сетями. Соединениям между различными значениями данных задаётся определённый вес — число, выражающее важность конкретного соединения.
Поэтому когда нам нужно разобраться, как взаимодействуют все эти сотни, если не тысячи соединений, нужно умножить каждый элемент данных в сети на все возможные веса соединений. Другими словами, перемножить две матрицы, а это классическая тензорная математика!
Чипы Google TPU 3.0, закрытые системой водяного охлаждения
Именно поэтому во всех суперкомпьютерах глубокого обучения используются GPU, и почти всегда это Nvidia. Однако некоторые компании даже разработали собственные процессоры из тензорных ядер. Google, например, в 2016 году объявила о разработке своего первого TPU (tensor processing unit), но эти чипы настолько специализированные, что не могут выполнять ничего, кроме операций с матрицами.
Тензорные ядра в потребительских GPU (GeForce RTX)
Но что если я куплю графическую карту Nvidia GeForce RTX, не являясь ни астрофизиком, решающим задачи римановых многообразий, ни специалистом, экспериментирующим с глубинами свёрточных нейронных сетей. Как я могу использовать тензорные ядра?
Чаще всего они не применяются для обычного рендеринга, кодирования или декодирования видео, поэтому может показаться, что вы потратили деньги на бесполезную функцию. Однако Nvidia встроила тензорные ядра в свои потребительские продукты в 2018 году (Turing GeForce RTX), внедрив при этом DLSS — Deep Learning Super Sampling.
Принцип прост: рендерим кадр в довольно низком разрешении, а после завершения повышаем разрешение конечного результата так, чтобы он совпадал с «родными» размерами экрана монитора (например, рендерим в 1080p, а затем изменяем размер до 1400p). Благодаря этому повышается производительность, ведь обрабатывается меньшее количество пикселей, а на экране всё равно получается красивое изображение.
Консоли имели такую функцию уже многие годы, и многие современные игры для PC тоже обеспечивают эту возможность. В 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 для обработки пикселей с помощью нейронной модели (тензорными ядрами GPU) используются данные из отрендеренного кадра.
Нас впечатляют возможности DLSS 2.0, но пока его поддерживает очень мало игр — на момент написания статьи их было всего 12. Всё больше разработчиков хочет реализовать его в своих будущих играх, и на то есть причины.
Благодаря любому увеличению масштаба можно добиться серьёзного роста производительности, поэтому можно быть уверенными, что DLSS продолжит эволюционировать.
Хотя визуальные результаты работы DLSS не всегда идеальны, освободив занятые рендерингом ресурсы, разработчики смогут добавить больше визуальных эффектов или обеспечить один уровень графики на более широком диапазоне платформ.
Например, DLSS часто рекламируют вместе с трассировкой лучей (ray tracing) в играх с «поддержкой RTX». Карты GeForce RTX содержат дополнительные вычислительные блоки, называемые RT-ядрами, это специализированные логические блоки для ускорения вычислений пересечения луча с треугольником и обхода иерархии ограничивающих объёмов (bounding volume hierarchy, BVH). Эти два процесса являются очень длительными процедурами, определяющими способ взаимодействия света с другими объектами сцены.
Как мы выяснили, ray tracing — очень трудоёмкий процесс, поэтому чтобы обеспечить в играх приемлемый уровень частоты кадров, разработчики должны ограничить количество лучей и выполняемых в сцене отражений. При выполнении этого процесса могут создаваться зернистые изображения, поэтому необходимо применять алгоритм устранения шумов, что повышает сложность обработки. Ожидается, что тензорные ядра повысят производительность этого процесса благодаря устранению шумов с использованием ИИ, однако это ещё предстоит реализовать: большинство современных приложений по-прежнему использует для этой задачи ядра CUDA. С другой стороны, благодаря тому, что DLSS 2.0 становится вполне практичной техникой повышения размера, тензорные ядра можно будет эффективно использовать для повышения частоты кадров после применения в сцене трассировки лучей.
Существуют и другие планы по использованию тензорных ядер карт GeForce RTX, например, улучшение анимаций персонажей или симуляция тканей. Но как и в случае с DLSS 1.0, пройдёт ещё немало времени, прежде чем появятся сотни игр, использующие специализированные матричные вычисления на GPU.
Многообещающее начало
Итак, ситуация такова — тензорные ядра, отличные аппаратные блоки, которые, однако, встречаются только в некоторых картах потребительского уровня. Изменится ли что-то в будущем? Так как Nvidia уже значительно улучшила производительность каждого тензорного ядра в своей архитектуре Ampere, есть большая вероятность того, что они будут устанавливаться и в модели нижнего и среднего ценового уровня.
Хотя таких ядер пока нет в GPU компаний AMD и Intel, возможно, в будущем мы их увидим. У AMD есть система повышения резкости или улучшения деталей в готовых кадрах ценой небольшого снижения производительности, поэтому компания, возможно, будет придерживаться этой системы, особенно учитывая то, что её не нужно интегрировать разработчикам, достаточно включить её в драйверах.
Существует также мнение, что пространство на кристаллах в графических чипах лучше было бы потратить на дополнительные шейдерные ядра — так поступила Nvidia при создании бюджетных версий своих чипов Turing. В таких продуктах, как GeForce GTX 1650, компания полностью отказалась от тензорных ядер и заменила их дополнительными FP16-шейдерами.
Но пока, если вы хотите обеспечить сверхбыструю обработку GEMM и воспользоваться всеми её преимуществами, то у вас есть два варианта: купить кучу огромных многоядерных CPU или просто один GPU с тензорными ядрами.