Nvidia Volta: новая вычислительная архитектура

Новая вычислительная архитектура


Содержание

intro.jpg

На своей традиционной конференции GTC 2017, прошедшей в прошлом месяце, компания Nvidia традиционно же представила новую вычислительную архитектуру, ранее известную под кодовым именем Volta. Компания уже много лет занимается далеко не только рынком игровых графических процессоров, успешно участвуя и в других сферах: профессиональных графических и вычислительных решениях, высокопроизводительных вычислениях и автомобильных системах.

Более того, по финансовым отчетам компании на протяжении нескольких кварталов хорошо видно, что хотя игровые решения остаются лидирующими и важнейшими для Nvidia, доходы от поставок в сфере автомобильных решений и сегмента высокопроизводительных вычислений (серверов, дата-центров и т. д.) выросли в несколько раз. Поэтому совершенно неудивительно, что компания вкладывает всё бо́льшие средства в развитие решений, предназначенных именно для неграфических вычислений. Ну, и игрокам от этого тоже некоторая польза есть — если несколько лет назад улучшения в GPU оплачивали в основном они, то теперь к этому добавилась нехилая доля от более серьезных применений.

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

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

В рамках этой статьи для нас особенно важно то, что у Nvidia вполне уже есть мотивация делать отдельные GPU для вычислений, и отдельные GPU для игр, как это и происходит уже некоторое время. Хотя графические и вычислительные процессоры Nvidia одного поколения архитектурно весьма близки и во многом похожи, в них есть уже и важные отличия, уникальные именно для конкретных применений — достаточно вспомнить HBM2-память, применяемую в ускорителе вычислений семейства Pascal, или заметно большее количество блоков для FP64-вычислений.

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

Вычислительный ускоритель Tesla V100

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

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

keynote-1.png

Индустрии высокопроизводительных вычислений сейчас понадобился даже еще больший скачок, чем привычные 1,5 раза ускорения в год. Также на всю индустрию повлияло и появление специализированных решений для машинного обучения, вроде Tensor Processing Unit (TPU) от Google, вторая версия которого была объявлена недавно. Вот и Nvidia решила не отставать, представив новое поколение вычислительной архитектуры Volta, в которое вошли специализированные блоки, обеспечивающие многократное преимущество по скорости в задачах глубокого обучения, по сравнению с Pascal.

Для традиционных вычислительных HPC-задач и новых сфер с применением искусственного интеллекта, компания Nvidia выпустила новый вычислительный ускоритель Tesla V100, основанный на новом графическом (чисто номинально, так как он предназначен для далеко не только и не столько графических вычислений) чипе GV100. Интересно, что электрически и физически новый чип совместим со старым — это сделано для ускорения производства и внедрения новинки, ведь можно использовать те же системные платы, системы питания и так далее.

v100-sm.jpg

На фото выше показан вычислительный ускоритель Tesla V100, основанный на чипе GV100 — первенце архитектуры Volta и выполненный в форм-факторе SXM2, точно таком же, что и уже известный нам ускоритель Tesla P100 на основе Pascal GP100. На момент своего анонса это — наиболее высокопроизводительный параллельный процессор в мире, отличающийся высокой вычислительной производительностью как для типичных HPC-применений, так и для задач глубокого обучения (deep learning), требующих специфической обработки очень больших массивов данных.

Кроме этого, в первом GPU архитектуры Volta применяется 16 ГБ высокоскоростной HBM2-памяти, разработанной совместно с Samsung, имеющей пропускную способность в ПСП 900 ГБ/с — на 50% выше, по сравнению с предыдущим поколением. А для связи между графическими процессорами и между графическим и центральным процессорами, применяется высокоскоростной интерфейс NVLink нового поколения, отличающийся вдвое увеличенной пропускной способностью по сравнению с предыдущим решением — 300 ГБ/с.

Ключевые особенности Tesla V100

  • Новый дизайн потокового мультипроцессора (Streaming Multiprocessor — SM), оптимизированный в том числе для задач глубокого обучения — в архитектуре Volta мультипроцессор SM был серьезно переделан, став на 50% более энергоэффективным, по сравнению с дизайном мультипроцессора Pascal. Серьезные архитектурные изменения позволили повысить производительность FP32- и FP64-вычислений при том же уровне энергопотребления, что является важнейшей задачей любого производителя чипов. Новые тензорные ядра (Tensor Cores), разработанные специально для тренировки и инференса нейросетей в задачах глубокого обучения (deep learning) способны дать превосходство в скорости вплоть до 12-кратного (при тренировке нейросети и вычислениях смешанной точности). Обладая независимыми параллельными потоками данных для целочисленных вычислений и вычислений с плавающей запятой, мультипроцессор Volta также намного более эффективен при смешанной загрузке с использованием вычислительных и других операций. Новая возможность независимого управления потоками в Volta позволяет тонко синхронизировать и обеспечивать взаимодействие между параллельными потоками. Ну, а новая объединенная подсистема кэширования данных первого уровня (L1-кэш) и разделяемой памяти (Shared Memory) значительно повышает производительность в некоторых задачах, заодно упрощая и их программирование.

  • Поддержка второго поколения технологии высокоскоростных соединений NVLink позволяет увеличить пропускную способность, обеспечить большее число линий данных и улучшить масштабируемость для систем с несколькими GPU и CPU. Новый процессор GV100 поддерживает до шести 25 ГБ/с каналов NVLink, что дает общую пропускную способность в 300 ГБ/с. Вторая версия NVLink поддерживает также новые возможности серверов, основанных на процессорах IBM Power 9, включая когерентность кэша. Новая версия суперкомпьютера Nvidia DGX-1, основанная на Tesla V100, использует NVLink для обеспечения лучшей масштабируемости и сверхбыстрой тренировки нейросетей в задачах глубокого обучения.

  • Высокопроизводительная и эффективная HBM2-память объемом в 16 ГБ обеспечивает пиковую пропускную способность памяти до 900 ГБ/с. Сочетание быстрой памяти второго поколения производства компании Samsung и улучшенного контроллера памяти в GV100, обеспечило полуторакратный прирост в пропускной способности памяти по сравнению с предыдущим чипом GP100 архитектуры Pascal, при этом эффективное использование ПСП новым GPU достигает более чем 95% в реальных рабочих нагрузках.

  • Функция Multi-Process Service (MPS) позволяет нескольким процессам использовать совместно один и тот же GPU. В архитектуре Volta осуществляется аппаратное ускорение критических компонентов CUDA MPS-сервера, что позволяет повысить производительность, изоляцию и обеспечить лучшее качество обслуживания (QoS) для множества вычислительных приложений, использующих один GPU. Также в Volta было втрое увеличено максимальное количество клиентов MPS — с 16 для Pascal до 48 для Volta.

  • Улучшенная общая память и трансляция адресов — в GV100 общая память использует новые указатели, позволяющие переносить страницы памяти на процессор, который чаще обращается к этим страницам. Это повышает эффективность доступа к диапазонам памяти, разделяемым между разными процессорами. При условии использования платформ IBM Power, новые сервисы преобразования адресов (Address Translation Services — ATS) позволяют графическому процессору напрямую обращаться к страницам CPU.

  • Совместные группы и новые API для совместного запуска — совместные группы (Cooperative Groups) это новая программная модель, введенная в CUDA 9 и предназначенная для организации групп связанных потоков. Совместные группы позволяют разработчикам задать гранулярность, с которой потоки обмениваются данными, помогая организовать более эффективные параллельные вычисления. Основная функциональность совместных групп поддерживается на всех графических процессорах компании, начиная с Kepler, но в Pascal была включена поддержка новых Cooperative Launch API, поддерживающих синхронизацию между блоками потоков CUDA, а в Volta была добавлена поддержка новых шаблонов синхронизации (synchronization patterns).

  • Режимы максимальной производительности и максимальной энергоэффективности позволяют эффективнее использовать GPU в различных случаях. В режиме максимальной производительности, ускоритель Tesla V100 будет работать без ограничения частоты при потреблении питания до уровня TDP в 300 Вт — этот режим нужен для приложений, требующих наивысшей скорости вычислений и максимальной пропускной способности. Режим максимальной эффективности позволяет настроить энергопотребление ускорителей Tesla V100 так, чтобы получить оптимальную отдачу в пересчете на каждый ватт потребления энергии. При этом можно установить верхнюю планку потребляемой мощности для всех графических процессоров в серверной стойке, снизив энергопотребление при сохранении достаточной производительности.

  • Оптимизированное программное обеспечение — новые версии фреймворков глубокого обучения, такие как Caffe2, MXNet, CNTK, TensorFlow и другие могут использовать все возможности Volta для того, чтобы значительно повысить производительность тренировки и снизить время обучения нейросетей. Оптимизированные для Volta библиотеки cuDNN, cuBLAS и TensorRT, способны использовать новые возможности архитектуры Volta для повышения производительности задач глубокого обучения и привычных применений высокопроизводительных вычислений (HPC). Новая версия CUDA Toolkit 9.0 уже включает в себя новые и оптимизированные API с поддержкой функций Volta.

Аппаратная архитектура GV100

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

Как и аналогичный процессор GP100 из предыдущего поколения Pascal, новый GV100 состоит из нескольких вычислительных кластеров Graphics Processing Cluster (GPC), которые включают в себя кластеры Texture Processing Cluster (TPC), а также контроллеров памяти. В свою очередь, кластеры TPC состоят из нескольких потоковых мультипроцессоров Streaming Multiprocessor (SM), подробно о составе которых мы поговорим чуть позже.

diag-sm.png

На иллюстрации показан полноценный чип GV100 с 84 мультипроцессорами, а в ускорителе Tesla V100 используется его версия с 80 активными мультипроцессорами SM. Полная версия вычислительного процессора архитектуры Volta содержит шесть кластеров GPC и 42 кластера TPC, каждый из которых содержит по два мультипроцессора SM. То есть, всего в чипе есть 84 мультипроцессора SM, каждый из которых содержит 64 вычислительных ядра FP32, 64 ядра INT32, 32 ядра FP64 и 8 новых тензорных ядер, специализирующихся на ускорении нейросетей. Также каждый мультипроцессор содержит по четыре текстурных модуля TMU.

Соответственно, с 84 рабочими мультипроцессорами, полный чип GV100 предлагает мощь 5376 ядер FP32 и INT32, 2688 ядер FP64, 672 тензорных ядер и 336 модулей текстурирования. Для доступа к локальной видеопамяти в GPU имеется восемь 512-битных контроллеров HBM2-памяти, совместно дающих 4096-битную шину памяти. Каждый стек быстрой HBM2-памяти управляется собственной парой контроллеров памяти, а каждый из контроллеров памяти соединен с разделом кэш-памяти второго уровня объемом в 768 КБ, то есть, всего в GV100 получается 6 МБ L2-кэша.

Давайте сравним ускорители вычислений компании Nvidia, вышедшие за последние пять лет, по их характеристикам и пиковым показателям производительности (все расчеты сделаны на основе турбо-частот GPU):

Модель ускорителя Tesla K40 Tesla M40 Tesla P100 Tesla V100
Модель GPU GK180 GM200 GP100 GV100
Архитектура Kepler Maxwell Pascal Volta
Техпроцесс 28 нм 28 нм 16 нм FinFET+ 12 нм FFN
Кол-во транзисторов, млрд 7,1 8,0 15,3 21,1
Размер ядра, мм² 551 601 610 815
Кол-во SM 15 24 56 80
Кол-во TPC 15 24 28 40
Ядер FP32 на SM 192 128 64 64
Ядер FP32 всего 2880 3072 3584 5120
Ядер FP64 на SM 64 4 32 32
Ядер FP64 всего 960 96 1792 2560
Тензорные ядра всего - - - 640
Турбо-частота GPU, МГц 810/875 1114 1480 1455
Пиковая пр-сть FP32, терафлопс 5,0 6,8 10,6 15,0
Пиковая пр-сть FP64, терафлопс 1,7 2,1 5,3 7,5
Пиковая пр-сть тензор, терафлопс - - - 120
Кол-во TMU 240 192 224 320
Шина памяти, бит 384 384 4096 4096
Тип памяти GDDR5 GDDR5 HBM2 HBM2
Объем памяти, ГБ До 12 ГБ До 24 ГБ 16 ГБ 16 ГБ
Объем L2-кэша, КБ 1536 3072 4096 6144
Объем разделяемой памяти на SM, КБ 16/32/48 96 64 До 96 КБ
Объем регистрового файла, КБ 3840 6144 14336 20480
TDP, Вт 235 250 300 300

Хорошо видно явный прогресс, произошедший всего за несколько лет даже при условии не слишком быстрого развития новых техпроцессов на TSMC. За прошедшие годы, даже если не учитывать новые возможности тензорных ядер по матричным вычислениям, используемым в задачах глубокого обучения, производительность FP32-вычислений выросла втрое, для FP64 разница более чем четырехкратная, да и новый тип высокоскоростной памяти дал возможность серьезно повысить ПСП.

Естественно, что все это вылилось в постоянное усложнение чипов — GV100 (Volta) стал втрое сложнее, чем GK180 (Kepler), но из-за совершенствования технологических процессов размер GPU вырос лишь в полтора раза. Вычислительный процессор GV100 имеет физический размер кристалла 815 мм². Это впечатляющий по размеру чип, особенно для еще не идеально отлаженного нового 12 нм FFN техпроцесса — скорее всего, его размер близок к предельному для фабрики TSMC. Чтобы хорошо понимать, насколько это много, можно сравнить размер чипа с размером сенсоров в полнокадровых цифровых камерах, которые имеют лишь чуть больший размер в 864 мм², но сделаны с использованием гораздо менее сложной литографии.

К слову о 12-нанометровом FFN-техпроцессе TSMC. Это действительно самый продвинутый на сегодня техпроцесс тайваньской компании, подходящий для производства таких больших и сложных чипов, как GV100. Единственный момент, который нужно знать — по сути, это уменьшенная версия известного техпроцесса 16 нм FinFET, четвертый вариант этой технологии с улучшенными характеристиками, отличающийся не так сильно, как числа 12 и 16. TSMC просто решила назвать его по-новому — для того, чтобы им было легче конкурировать с компаниями Samsung и GlobalFoundries, предлагающими техпроцесс 14 нм. Все эти цифры давно не говорят ничего особенного о реальных качествах техпроцесса, они очень примерны и могут «гулять» туда-сюда в зависимости от желания производителей.

При такой огромной площади кристалла неудивительно, что даже использование самого передового 12-нанометрового FFN-техпроцесса позволило сделать его лишь на самой грани нынешних возможностей фотолитографии. Чип получился очень большой и дорогой во всем, и инженерная команда Nvidia в лице Джона Албена, старшего вице-президента по проектированию GPU, высказала благодарность президенту компании Дженсену Хуангу за то, что он дал им возможность работать над столь сложным и многообещающим проектом. Для понимания сложности задачи в целом, Дженсен привел такие данные: в процессе разработки архитектуры Volta и первого вычислительного процессора на его основе, компанией было потрачено три миллиарда долларов.

Потоковый мультипроцессор Volta

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

Основные особенности мультипроцессоров Volta:

  • Новые тензорные ядра со смешанной точностью вычислений (FP16/FP32), предназначенные для матричных вычислений, используемых в задачах глубокого обучения;
  • Улучшенная кэш-память первого уровня с лучшей производительностью и сниженными задержками доступа;
  • Оптимизированный набор инструкций для упрощения декодирования и сокращения задержек при исполнении инструкций;
  • Специальные оптимизации для достижения высокой тактовой частоты и лучшей энергоэффективности.

Аналогично предыдущему вычислительному процессору GP100, основанному на архитектуре Pascal, мультипроцессоры в новый GV100 включают по 64 FP32-ядер и по 32 FP64-ядер на каждый SM. Однако, для улучшения утилизации вычислительных блоков и повышения общей производительности, новые SM используют новую схему разделения ресурсов.

Если мультипроцессор в GP100 разделен на два блока обработки, каждый из которых имеет по 32 FP32-ядра, 16 FP64-ядер, буфер инструкций, один планировщик варпов, два блока диспетчера и регистровый файл на 128 KB, то мультипроцессор в GV100 разбит уже на четыре блока обработки, каждый из которых имеет по 16 FP32-ядер, 8 FP64-ядер, 16 INT32-ядер, два новых тензорных ядра, новый кэш инструкций нулевого уровня (L0), один планировщик варпов, один блок диспетчера и регистровый файл на 64 КБ. Вот довольно подробная схема SM:

sm.png

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

Общий объем разделяемой памяти для всего вычислительного процессора GV100 стал больше за счет увеличения количества мультипроцессоров и возможности сконфигурировать объем разделяемой памяти до 96 КБ на каждый SM (из 128 КБ, предназначенного для L1-кэша данных и разделяемой памяти вместе), по сравнению с 64 КБ в GP100 предыдущего поколения.

Одно из самых важных изменений в новых мультипроцессорах Volta состоит в том, что в них входят раздельные FP32 и INT32 ядра, позволяющие одновременно исполнять FP32- и INT32-инструкции на полной скорости, что повышает утилизацию блоков и общую производительность GPU. Декодеры и планировщик запускают по одной инструкции и одному варпу за каждый такт, и всего выполняется вдвое больше инструкций и варпов на каждый мультипроцессор за такт, по сравнению с Pascal.

Предыдущие семейства GPU, включая Pascal, не могут выполнять FP32 и INT32 инструкции одновременно, а только по очереди, что негативно сказывается на производительности в некоторых задачах. Новая архитектура мультипроцессоров позволяет запускать FP32-инструкции в полном темпе и использовать оставшуюся половину слотов выдачи для выполнения других типов инструкций: INT32, FP64, загрузки/сохранения, ветвления, специальных функций SFU и т. д., повышая эффективность использования вычислительных возможностей GPU.

Повысился и темп выполнения инструкций и для математических операций умножения-сложения с однократным округлением (fused multiply-add — FMA), требующих лишь четырех тактов на Volta, по сравнению с шестью циклами на Pascal. А раз меньше стадий на исполнение, то и соответствующие исполнительные блоки, скорее всего, занимают меньше площади на чипе. Правда, более длинные конвейеры обычно способны работать на более высокой частоте, но это зависит еще много от чего: физического дизайна, техпроцесса, энергопотребления и т. д. Судя по первым данным, с частотой процессора у GV100 все в порядке.

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

Ускоритель прошлого поколения Tesla P100 уже обеспечивал заметно более высокую производительность при тренировке нейросетей, если сравнивать его с решениями, основанными на GPU еще более ранних поколений: Maxwell и Kepler, но потребности в тренировке и инференсе нейросетей все большего размера и сложности постоянно растут, и возможностей Pascal исследователям уже не хватает. Они используют нейросети из тысяч слоев и миллионов нейронов, что требует еще большей скорости вычислений.

И обычный полуторакратный прирост скорости, получаемый от каждой новой модели GPU, тут явно недостаточен. Именно для того, чтобы рост производительности соответствовал потребностям рынка, компания Nvidia решила внедрить в свой вычислительный процессор Volta новый тип ядер — тензорные ядра (Tensor Core). Эти ядра — самая важная особенность новой архитектуры Volta, которая и поможет получить многократный рост производительности в задачах обучения и инференса больших нейросетей.

Операции матричного перемножения (BLAS GEMM) лежат в основе обучения и инференса (процесс, обратный обучению — выводы на основе уже «умной» нейросети) нейронных сетей, они используются для умножения больших матриц входных данных и весов в связанных слоях сети. Тензорные ядра специализируются на выполнении этих перемножений и способны значительно увеличить производительность таких вычислений с плавающей запятой при сохранении сравнительно небольшой сложности в транзисторах и площади, занимаемой этими ядрами на GPU. Заодно значительно вырастает энергоэффективность.

tensor-op.png

GPU архитектуры Volta поддерживает новые инструкции и форматы данных, удобные для обработки массивов матриц 4×4. Каждое тензорное ядро обрабатывает матричный массив 4×4×4, выполняя операцию D = A × B + C, где A, B, C и D — это матрицы размером 4×4. Вычислительные ядра считывают два значения с FP16-точностью, упакованные в один регистр (матрицы A и B), их перемножение осуществляется с FP32-точностью, результат суммируется с FP32- или FP16-значением и записывается с 32-битной или 16-битной точностью. Для задач глубокого обучения такой точности вполне достаточно, и вполне может быть, что способности тензорных ядер пригодятся также и в других задачах.

Каждое тензорное ядро осуществляет 64 операции умножения-сложения с однократным округлением (fused multiply-add — FMA) с плавающей запятой смешанной точности за один такт. Точность вычислений в этой операции смешанная, многократное перемножение двух FP16-матриц осуществляется с FP32-точностью, накопление также совершается с FP32-точностью, и результат выдается в FP32-формате.

tensor-precision.png

Восемь тензорных ядер в каждом мультипроцессоре SM выполняют в общем 1024 операции с плавающей запятой за такт, что в восемь раз быстрее, чем может обеспечить мультипроцессор архитектуры Pascal с использованием стандартных FP32-операций. В целом, если сравнивать GV100 с вычислительным процессором GP100, это приводит к увеличению производительности в задачах глубокого обучения в 12 раз.

tensor.jpg

Во время выполнения заданной программы, исполнительным варпом используются несколько тензорных ядер одновременно. Несколько потоков внутри варпа обеспечивают большую операцию над матрицей размером 16×16×16, которая и обрабатывается тензорными ядрами. Возможность исполнения таких операций предоставляется в CUDA C++ API, этот интерфейс обеспечивает специализированную загрузку матриц, умножение и накопление матриц, а также операции хранения матриц для более эффективного использования тензорных ядер в CUDA-программах.

Дополнительно к новым возможностям CUDA, для прямого программирования тензорных ядер можно также использовать библиотеки из CUDA 9: cuBLAS и cuDNN включают новые возможности для использования тензорных ядер в приложениях и фреймворках задач глубокого обучения. Специалисты Nvidia работают вместе с разработчиками популярных фреймворков глубокого обучения, таких как Caffe2 и MXNet для того, чтобы все желающие могли использовать тензорные ядра архитектуры Volta в научных разработках с применением нейросетей.

Всего тензорных ядер в чипе GV100 имеется 640 штук — по 8 на каждый мультипроцессор. Все они вместе способны обеспечить до 120 специализированных тензорных терафлопс при тренировке и инференсе, что в 12 раз больше пикового значения для GP100, если использовать FP32-точность, и в 6 раз больше, если применять FP16-операции. На практике получается пусть и не 12, а несколько меньше, но тоже очень прилично.

На следующей иллюстрации показано, как применение тензорных ядер вычислительного процессора Tesla V100 повышает производительность операций библиотеки cuBLAS (ускоренная на GPU библиотека основных операций линейной алгебры) более чем в 9 раз — по сравнению с ускорителем Tesla P100, основанным на чипе архитектуры Pascal.

perf-tensor.png

Предпродажный образец Tesla V100 под управлением CUDA 9 за счет специализированных на определенных операциях тензорных ядрах, оказался способен выполнить перемножение матриц (GEMM) большого размера в 9,3 раза быстрее, чем Tesla P100 (при смешанной точности). Конечно, если у разработчика есть требование использовать FP32-точность для входных данных, тогда разница получится заметно меньшей — 1,8 раза, но даже в таком случае прирост вполне ощутим.

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

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

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

Улучшенные кэширование и разделяемая память

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

Объединение кэша L1 для данных и разделяемой памяти в один блок позволяет обеспечить лучшие характеристики для обоих типов доступа к памяти. Суммарная емкость этих типов памяти в GV100 составляет 128 КБ на каждый мультипроцессор, что в несколько раз больше, чем кэш данных у GP100, и всю эту память также можно использовать и в качестве кэш-памяти теми программами, которые не используют разделяемую память. Текстурные блоки в SM также используют эту же кэш-память. Самый простой пример разделения — поровну, когда разделяемая память сконфигурирована в объеме 64 КБ, а для текстурных операций и операций загрузки и хранения можно использовать оставшиеся 64 КБ в виде L1-кэша.

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

Основной причиной для такого слияния L1-кэша данных с разделяемой памятью в GV100 является достижение более высокой производительности разделяемой памяти для операций с L1-кэшем. Разделяемая память дает высокую пропускную способность и низкие задержки, но программистам приходится самостоятельно управлять такой памятью. Новая вычислительная архитектура Nvidia сокращает разницу в скорости между приложениями, которые самостоятельно управляют разделяемой памятью и теми, которые предпочитают обращаться к данным в видеопамяти и полагаться на их кэширование в L1-кэше.

perf-cache.png

L1-кэш в Volta нивелирует разницу между приложениями, которые вручную настроены для хранения данных в разделяемой памяти, и тех, которые обращаются к данным, хранящимся в локальной памяти напрямую. На приведенной выше диаграмме значение 1,0 равно производительности приложения, настроенного для использования исключительно разделяемой памяти, а два столбца для Pascal и Volta представляют производительность эквивалентных приложений, не использующих разделяемую память.

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

Независимое управление потоками

Одно из самых больших и сложных изменений в Volta — новые планировщики потоков и декодеры (dispatch unit), а соответственно и алгоритмы управления потоками и варпами, которые стали более эффективными. Архитектура Volta в целом была спроектирована для дальнейшего упрощения программирования GPU по сравнению с предыдущими поколениями, что должно сделать работу программистов более продуктивной, что особенно важно в случае сложных приложений.

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

Полный текст статьи читайте на iXBT