Веселый нейрофермер

Гоняем нейросети в облачных фермах видеокарт
5 минут

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

Гитлер в игре Wolfenstein 3D

Деды наиграли: как Wolfenstein 3D изменил гейм-индустрию

История про роль антифашистского сопротивления в индустрии игр начнется с определения двух основных понятий — CPU и GPU.

Что это такое? Любой обычный школьный информатик сказал бы вам, что CPU — это центральный процессор, который отвечает за общие вычисления на компьютере. А GPU — специализированный видеопроцессор, который отвечает за отрисовку высококачественной графики на экране. Но настоящие фанаты игр таким формальным объяснением, конечно, не удовлетворятся. И, продолжив изучать вопрос, непременно найдут прохладную историю о том, как видеокарты появились в наших системниках.

Если вкратце, история такова. Три десятилетия назад компьютерные игры были плоскими, примитивными и двумерными — змейки, тетрисы, пэкмены, ну, вы помните. Но всё изменилось 5 мая 1992 года — в день, когда два американских разработчика по имени Джон (Джон Кармак и Джон Ромеро) из компании id Software перевернули индустрию игр первым в мире 3D-шутером Wolfenstein 3D. Это была настоящая революция: ещё вчера вы могли гонять микроскопического червячка по плоскому полю. А уже сегодня вы получили возможность по-настоящему прочувствовать, как воевали деды, уничтожая трехмерных фашистов в мире Wolfenstein.

С этого момента 3D-игры стали стремительно заполнять рынок. Качество картинки росло с каждым месяцем, но вместе с ним росла и вычислительная нагрузка на компы. В конце концов трёхмерная графика начала зависать уже совершенно по-фашистски — и в результате обычные пользователи стали проявлять активный интерес к видеочипам, ускоряющим отрисовку 3D. Потому что, как известно, в жизни можно сэкономить на многом — но вспарывать кишки трёхмерным врагам человечества желательно без тормозов.


Процессоры против видеочипов

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

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


Видеочипы (и видеодейлы) спешат на помощь

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

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

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


Наши люди дома видеокарты не держат

Впрочем, у мощных видеокарт есть одна существенная проблема — мощная цена. А для задач машинного обучения и нейронных сетей может понадобиться целая ферма из очень дорогих карт. В результате для того, чтобы ферма из видеочипов окупалась, её нужно все время держать под нагрузкой. Иначе дорогое оборудование будет простаивать впустую, пока вы гоняете любимые видосы с котами или кисками (даже если в 4к).

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

Помимо этого, облачные провайдеры предоставляют доступ к очень редкому и дорогому оборудованию. Например, к видеокартам Nvidia Tesla V100 (пожалуй, лучшее железо для обсчета нейронных сетей, которое сегодня можно купить за деньги). Цена одной такой платы составляет от 11000 до 13000 долларов. Дома такое держать точно не будешь, а вот заказать вычисления на такой видяхе в облаке — вполне доступно.

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

Осталось только уговорить себя это сделать :)