В статье рассматривается проблема больших вычислений при обучении искусственных нейронных сетей в высокопроизводительных системах. В частности, разбираются важные аспекты внутреннего устройства современных графических процессоров, а также технологии CUDA фирмы Nvidia. Это позволило сделать выводы об эффективности графических процессоров, которые имеют достаточно большой потенциал для обучения искусственных нейронных сетей. Это обусловлено их возможностью производить параллельные вычисления непосредственно за счет ресурсов своих мощностей.
Ключевые слова: видеокарты, графические процессоры, искусственные нейронные сети, параллельные вычисления.
В 2006 году компания Nvidia выпустила программно-аппаратный инструмент для программирования графических процессоров под названием CUDA, который позволил разработчикам легко программировать каждый отдельный пиксель на экране. Графический процессор включает в себя тысячи микрокомпьютеров — ядра, работающие одновременно, для визуализации каждого пикселя. Ядра, в свою очередь, выполняют много элементов низкоуровневой математики для рендеринга теней, отражений, освещения, прозрачности и прочих декоративных элементов.
До выпуска технологии CUDA программирование графического процессора было достаточно болезненным процессом для разработчиков, которым приходилось писать много низкоуровневого машинного кода. Технология CUDA, на разработку которой компания Nvidia потратила несколько лет, упростила программирование графических процессоров на языках высокого уровня, таких как Java или C++. Используя технологию CUDA, программисты могут разрабатывать модели глубокого обучения гораздо быстрее, дешевле и эффективнее. Основа архитектуры CUDA — масштабируемый массив потоковых мультипроцессоров (Streaming Multiprocessors). Данные мультипроцессоры способны обрабатывать параллельно сотни нитей. Для управления работой подобного массива потоков была разработана уникальная архитектура SIMT (Single-Instruction, Multiple-Thread), в которой реализуется подход к параллельным вычислениям, при котором несколько потоков выполняют одни и те же операции на разных данных (выдержка из дипломной работы на тему «Методы параллельного программирования нейронных сетей с использованием технологии CUDA» (НИУ ВШЭ, кафедра кибернетики, автор: П.А. Климов).
В основном, алгоритмы глубокого обучения — это большой набор линейной алгебры, который должен выполняться теми или иными средствами вычислительной техники, а 4-ядерный или 8-ядерный центральный процессор для объемных вычислений использовать неэффективно. Одной из лучших видеокарт, подходящих для обучения искусственных нейронных сетей, является Nvidia GeForce Titan X: в ней установлено 3584 CUDA-ядра на частоте 1000 МГц и 12 Гб видеопамяти типа GDDR5X с пропускной способностью 10 Гбит/с. Для глубокого обучения искусственных нейронных сетей крайне важно количество ядер и видеопамяти. Перемещение данных из памяти и обратно достаточно сильно ограничивает вычислительный процесс, поэтому, чем больше видеопамяти имеет видеокарта, тем быстрее искусственные нейронные сети будут обучаться.
Рассмотрим простой пример, когда на вход искусственной нейронной сети подаются некоторые данные. Заранее подготовив большую базу данных с правильными ответами, мы можем запустить обучение модели искусственной нейронной сети, и через некоторое время сеть научится правильно определять два различных объекта. Таким образом, искусственная нейронная сеть сама найдет закономерности, по которым можно определить тот или иной объект на изображении [2]. Тем не менее, такие расчеты требуют колоссальных вычислительных мощностей — центральные процессоры, даже с большим количеством ядер (4, 6, 8, 12), просто не предназначены для таких вычислений. Однако графические процессоры выполняют эти вычисления в несколько раз быстрее, поскольку имеют в своем распоряжении CUDA-ядра.
Поясним, в чем разница между центральным процессором (CPU) и графическим процессором (GPU). Центральный процессор в компьютере долгие годы затачивался на то, чтобы сделать одно действие как можно быстрее — как можно эффективнее обрабатывать команды одной за другой. Современные центральные процессоры имеют несколько ядер для многозадачности, но большинство задач, с которыми сталкивается процессор в повседневной жизни, работает на одном ядре. Подчеркнем, что речь идет не о профессиональном использовании компьютера, а, скорее, о более простых задачах — пользовательских, чтобы наглядно объяснить разницу между CPU и GPU. Итак, что касается видеокарт, то они изначально проектировались таким образом, чтобы как можно быстрее и эффективнее отрисовывать 3D-объекты — чем больше пикселей графический процессор может обработать параллельно, тем эффективнее он справляется со своими задачами.
Что касается внутреннего устройства типичной видеокарты, то она имеет множество слабых вычислителей с тактовой частотой около 1 ГГц, каждый из которых может выполнять простейшие команды. Современные видеокарты содержат от 1000 до 4000 таких ядер, что позволяет обрабатывать однотипные задачи в тысячи потоков одновременно. Вычислительная мощность компьютера измеряется во флопсах — сколько операций над числами можно выполнить за один такт. Современный 6-ядерный центральный процессор Intel Core i7 имеет производительность порядка 500 гигафлопс, а производительность современных видеокарт благодаря параллельной обработке данных достигает от 2000 до 16000 гигафлопс. С 1970-х по 2000-е годы развитие центральных процессоров следовало закону Мура: каждые 18 месяцев мощность центральных процессоров удваивалась, но последние десять лет закон начал нарушаться — на логарифмическом графике виден «перегиб» (см. рис. 1).
Рис. 1. График, изображающий прогресс производительности CPU и GPU [3]
Рост производительности перешел на видеокарты, и если в ближайшее время не произойдет глобальных изменений в развитии центральных процессоров, к 2025 году GPU станет в 1000 раз производительнее, чем CPU. Однако, безусловно, следует отметить, что выигрыш в производительности можно получить лишь для тех задач, которые могут выполняться параллельно в несколько тысяч потоков — в высокопроизводительных системах.
Первые попытки перенести обучение искусственных нейронных сетей на графические процессоры начались еще в 2004 году, за два года до появления возможности вычислений на GPU. Рассмотрим пример: имеется искусственная нейронная сеть с несколькими миллионами параметров, делающая предсказания на тысячах обучающих данных. Предположим, искусственная нейронная сеть определяет пол человека по посещенным страницам — для некоторых она дает ответы правильно, на других ошибается. Зная значение суммарной ошибки на порции данных, можно методом градиентного спуска найти направление, в котором нужно изменять параметры, чтобы уменьшить ошибку.
Итак, обучение подобной искусственной нейронной сети на центральном процессоре Intel Xeon с 24 ядрами займет в 7 раз больше времени, чем обучение на видеокарте Nvidia GeForce Titan X — разница очевидна, но даже такие показатели не являются максимальными [4]. Видеокарта Titan X работает на базе архитектуры Pascal — не самой новейшей архитектуре на сегодняшний день. Рассмотрим далее одну из самых передовых архитектур от компании Nvidia, которая имеет название Turing.
Графический чип на базе архитектуры Turing разбит на несколько кластеров обработки графики (GPC), которые состоят из кластеров обработки текстур (TPC) и движков растеризации. Каждый TPC включает два потоковых мультипроцессора SM, которых в старшем чипе TU102 72 элемента. Каждый из них содержит набор из 64 ядер FP32 для вычисления с плавающей запятой, столько же INT32 для целочисленных вычислений, а также 8 тензорных ядер. CUDA-ядро представляет собой связку INT и FP. Блок INT32 не появился впервые в архитектуре Turing, этот блок был и в более ранних архитектурах, но теперь эта связка приобрела значительные изменения: в новой архитектуре Turing блоки INT32 и FP32 могут выполнять целочисленные вычисления и расчеты с плавающей запятой одновременно, а не последовательно.
По исследованиям Nvidia, на каждые 100 инструкций с плавающей запятой поступает 36 целочисленных в среднем, одновременное выполнение инструкций привело к значительному ускорению. Плюс ко всему, к связке, составляющей CUDA-ядро, добавились тензорные ядра, которые тоже отличаются от тех, что использовались в более ранних архитектурах. В архитектуре Turing добавлен режим вычисления с низкой точностью INT8 и INT4 для более быстрой работы уже обученных искусственных нейронных сетей. Для обучения искусственной нейронной сети используется более высокая точность FP16, а для обученных искусственных нейронных сетей низкая точность эффективна, так как скорость при этом возрастает многократно [5].
В заключение следует сказать, что разработка интеллектуальных высокопроизводительных систем подразумевает обучение глубоких нейронных сетей с большими наборами обучающих данных. Для исследователей искусственного интеллекта и разработчиков высокопроизводительных систем графические процессоры Nvidia на базе архитектуры Turing, работающие на тензорных ядрах, обеспечивают быстрое обучение и высокую производительность искусственных нейронных сетей. При условии работающих тензорных ядер с вычислительными блоками FP16 и FP32, значительно увеличивается пропускная способность, а также сокращается время обучения искусственных нейронных сетей в рамках высокопроизводительных систем [6].
Литература:
1. NVIDIA TITAN X [Электронный ресурс] — Режим доступа: https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal (дата обращения: 16.06.20).
2. Соломатин А.И. Обнаружение объектов на изображении для автономных роботов. — Молодой ученый. — 2019. — №7. — С. 28-35.
3. Summit GPU Supercomputer Enables Smarter Science [Электронный ресурс] — Режим доступа: https://devblogs.nvidia.com/summit-gpu-supercomputer-enables-smarter-science (дата обращения: 16.06.20).
4. Глубокое обучение с TensorFlow на GPU [Электронный ресурс] — Режим доступа: https://youtu.be/dfDsZNj5yOo (дата обращения: 16.06.20).
5. NVIDIA TURING GPU ARCHITECTURE [Электронный ресурс] — Режим доступа: https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf (дата обращения: 16.06.20).
6. Нейронные сети: новый прорыв. Мнения экспертов [Электронный ресурс] — Режим доступа: http://lib.secuteck.ru/articles2/all-over-ip/neyronnye-seti-novyy-proryv-mneniya-ekspertov (дата обращения: 16.06.20).