SLIDE: новый алгоритм тренировки нейросетей, который работает намного быстрее, чем TensorFlow
На днях группа ученых из Университета Райса (США) совместно с Intel Labs объявила о создании алгоритма, который на порядок (в 10 раз), по сравнению с TensorFlow, ускоряет процесс тренировки нейронных сетей на традиционных процессорах. Его название SLIDE происходит из аббревиатуры Sub-LInear Deep learning Engine — сублинейный механизм глубокого обучения. Новый алгоритм оказался столь эффективным, что тренировка нейросети на двух 22-ядерных процессорах Intel Xeon E5-2699A v4 с помощью SLIDE заняла в 3.5 раз меньше времени, чем аналогичный процесс на связке TensorFlow и графического ускорителя Nvidia Tesla V100.
Прежде чем перейти к описанию достоинств нового алгоритма, давайте кратко затронем математическую основу традиционного обучения искусственных нейросетей (ИНС). Процесс её тренировки состоит в «подкручивании» узлов нейросети (нейронов) таким образом, чтобы потом она давала правильные ответы. В свою очередь «подручивание» сводится к вычислению для каждого из нейронов правильного значения (веса). Поскольку оно зависит от весов других нейронов, для расчета хорошо подходит перемножение матриц.
Но проблема в том, что количество нейронов в некоторых современных ИНС исчисляется миллионами и даже миллиардами, поэтому перемножение огромных матриц занимает много времени даже на очень производительных графических ускорителях. При этом математическая оптимизация этого процесса оттачивается не первое десятилетие и похоже уже достигла своего предела. Кульминацией этих достижений возможно является как раз созданная в Google библиотека TensorFlow, работающая с многомерными массивами, тензорами (матрица представляет собой двумерный тензор).
А вот алгоритм SLIDE вместо традиционного перемножения матриц (в котором хорошо себя проявляют именно графические ускорители, способные одновременно выполнять большое количество относительно простых расчетов) задействует хеш-функции. Хеширование представляет собой индексирование данных таким образом, что это ускоряет поиск информации. В нашем случае такой информацией являются сами нейроны, представленные в виде непрерывно реорганизуемых хеш-таблиц. Задействованный в алгоритме SLIDE вероятностный метод LSH снижает размерность матрицы, с каждым градиентным обновлением обнуляя и отсеивая неактивные нейроны.
Вместе с тем наше внимание привлекло то обстоятельство (впрочем, вполне естественное), что на ГПУ тренировка нейросети при помощи TensorFlow занимает гораздо меньше времени, чем на ЦПУ (напомним, что аналогичный процесс при помощи SLIDE-ЦПУ занимает в 10 раз меньше времени, чем на TensorFlow-ЦПУ и в 3.5 раз меньше, чем на TensorFlow-ГПУ). При этом заголовок новости, опубликованной на сайте Университета Райса (SLIDE — первый алгоритм для тренировки нейросетей, который на ЦПУ работает быстрее, чем на ГПУ) не вполне корректен — в опубликованной статье сравнение SLIDE-ЦПУ со SLIDE-ГПУ не делается.
Gadgets News обратился к главе группы, разработавшей алгоритм, Аншумали Шривастава (Anshumali Shrivastava), и тот любезно ответил на наши вопросы. Нас интересовало следующее:
- Можно ли утверждать, что скорость тренировки нейросети при помощи SLIDE на процессоре не отличается от таковой на графическом ускорителе?
- Можно ли ускорить работу SLIDE на ГПУ посредством оптимизации алгоритма под архитектуру графического ускорителя?
Как пояснил Шривастава, использование больших хеш-таблиц на ГПУ (или возможно нескольких ГПУ) потребует значительной доработки. SLIDE весьма требователен к объему [оперативной] памяти, куда для эффективной реализации необходимо загрузить хеш-таблицы. Доступ к нескольким сотням гигабайт — не проблема для ЦПУ, но станет бутылочным горлышком для ГПУ, с его 32 Гб памяти в лучшем случае. Для запуска SLIDE на графических ускорителях возможно придется задействовать сразу несколько ГПУ с быстрой скоростью обмена данными между собой. Они хорошо подходят для SLIDE с точки зрения параллельных вычислений, но практическая реализация такой связки задача нетривиальная и требует отдельного исследования.
Как бы то ни было, новый алгоритм служит конкретным примером практического преимущества многоядерных процессоров над графическими ускорителями. Что особенно актуально с появлением на рынке относительно доступных ЦПУ с некогда невообразимым количеством ядер — например, как 64-ядерный Threadripper 3990X ($4 тыс). Но что еще важнее, SLIDE представляет собой пример успешной реализации нетипичного подхода в тренировке нейросетей, где традиционное перемножение матриц является узким местом машинного обучения.