Почему Не Стоит Выбрасывать Radeon, Если Вы Интересуетесь Машинным Обучением?



Почему не стоит выбрасывать Radeon, если вы интересуетесь машинным обучением?

Когда я был студентом, у меня была возможность собрать собственную рабочую станцию.

Вполне логично, что я отдал предпочтение вычислительным решениям AMD. потому что дешевый выгодный по соотношению цена/качество.

Я долго выбирал комплектующие и в итоге подошёл к 40ке с набором FX-8320 и RX-460 2Гб.

На первый взгляд этот комплект показался идеальным! Мы с соседом по комнате немного майнили Monero и мой набор показал 650h/s против 550h/s на наборе i5-85xx и Nvidia 1050Ti. Правда, из-за моего комплекта ночью в комнате было немного жарко, но это решилось покупкой башенного кулера для процессора.



сказка закончилась

Все было как в сказке, пока я не заинтересовался машинным обучением в области компьютерного зрения.

Еще точнее — до тех пор, пока мне не пришлось работать с входными изображениями разрешением больше 100x100px (до этого момента мой 8-ядерный FX справлялся с этим быстро).

Первой трудностью была задача идентификации эмоций.

4 слоя ResNet, входное изображение 100x100 и 3000 изображений в обучающем наборе.

И вот — 9 часов обучения по 150 эпох на ЦП.

Конечно, из-за этой задержки страдает итеративный процесс разработки.

На работе у нас была Nvidia 1060 6GB и обучение подобной структуры (правда, там обучалась регрессия для локализации объектов) пролетело за 15-20 минут — 8 секунд на эпоху 3,5к изображений.

Когда под носом такой контраст, дышать становится еще труднее.

Ну, угадай мой первый шаг после всего этого? Да, пошёл продавать 1050Ti у соседа.

С доводами о бесполезности для него CUDA, с предложением обмена на мою карту с доплатой.

Но все напрасно.

И вот я уже выкладываю свой RX 460 на Авито и присматриваюсь к заветному 1050Ti на сайтах Ситилинк и Технопоинт. Даже если бы карта была успешно продана, мне бы пришлось найти еще 10к (я студент, хоть и работающий).



Google

ХОРОШО.

Пойду погуглить, как использовать Radeon под Tensorflow. Зная, что это экзотическая задача, я не особо надеялся найти что-то толковое.

Сборка для Ubuntu, запустится она или нет, получите кирпич - фразы, нахваченные с форумов.

И поэтому я пошел другим путем — гуглю не «Tensorflow AMD Radeon», а «Keras AMD Radeon».

меня мгновенно перекидывает на страницу ПледМЛ .

я я начинаю это за 15 минут (правда пришлось понизить Керас до 2.0.5) и я настроил изучение сети.

Первое наблюдение заключается в том, что эпоха занимает 35 секунд вместо 200.

Прыгаем исследовать

Авторы PlaidML - вершина.

ай , входящая в проектную группу Intel (!).

Цель разработки — максимальная кроссплатформенная совместимость.

Конечно, это добавляет уверенности в продукте.

Их статья говорит, что PlaidML конкурентоспособен с Tensorflow 1.3 + cuDNN 6 благодаря «тщательной оптимизации».

Однако продолжим.

Следующая статья в некоторой степени раскрывает нам внутреннее устройство библиотеки.

Основное отличие от всех остальных фреймворков — автоматическая генерация вычислительных ядер (в нотации Tensorflow «ядро» — это полный процесс выполнения определенной операции в графе).

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

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

Если посмотреть на Tensorflow, то при создании новых операций нам необходимо реализовать как ядро для них — так и реализации.

сильно различаются для однопоточных, многопоточных или CUDA-совместимых ядер.

Те.

PlaidML явно обладает большей гибкостью.

Давайте двигаться дальше.

Реализация написана на самописном языке.

Плитка .

У этого языка есть следующие основные преимущества — синтаксис близок к математическим обозначениям (это безумие!):

Почему не стоит выбрасывать Radeon, если вы интересуетесь машинным обучением?

И автоматическая дифференциация всех заявленных операций.

Например, в TensorFlow при создании новой пользовательской операции настоятельно рекомендуется написать функцию для расчета градиентов.

Таким образом, при создании собственных операций на языке Tile нам достаточно сказать: ЧТО мы хотим считать, не думая об этом КАК Это рассматривается применительно к аппаратным устройствам.

Дополнительно оптимизирована работа с DRAM и аналогом кэша L1 в графическом процессоре.

Давайте вспомним схематическое устройство:

Почему не стоит выбрасывать Radeon, если вы интересуетесь машинным обучением?

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

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

Почему не стоит выбрасывать Radeon, если вы интересуетесь машинным обучением?

Кроме того, стоит отметить, что эта основа основана на OpenCL .

Основное преимущество OpenCL заключается в том, что он стандарт для гетерогенных систем и ничто не мешает запускать ядро на ЦП .

Да, именно здесь кроется один из главных секретов кроссплатформенности PlaidML.

Заключение

Конечно, обучение на RX 460 все равно происходит в 5-6 раз медленнее, чем на 1060, но вы же сравните ценовые категории видеокарт! Потом я приобрел RX 580 8 ГБ (мне его одолжили!), и время прогона эпохи сократилось до 20 секунд, что почти сопоставимо.

В блоге vertex.ai есть честные графики (чем больше, тем лучше):

Почему не стоит выбрасывать Radeon, если вы интересуетесь машинным обучением?

Видно, что PlaidML конкурирует с Tensorflow+CUDA, но явно не быстрее текущих версий.

Но разработчики PlaidML, вероятно, не планируют вступать в столь открытый бой.

Их цель — универсальность и кроссплатформенность.

Оставлю здесь не очень сравнительную таблицу с моими измерениями производительности:

вычислительное устройство Время выполнения эпохи (батч - 16), с
AMD FX-8320 тс 200
RX 460 2ГБ плед 35
RX 580 8 ГБ плед 20
1060 6ГБ TF 8
1060 6Гб плед 10
Интел i7-2600 тс 185
Intel i7-2600 Плед 240
GT 640 Плед 46
Последняя статья в блоге vertex.ai и последние правки в репозитории датированы маем 2018 года.

Думается, если разработчики этого инструмента не перестанут выпускать новые версии и с PlaidML будет знакомиться все больше обиженных Nvidia людей, то скоро о vertex.ai будут говорить гораздо чаще.

Раскройте свои Radeon! Теги: #Машинное обучение #gpu #nvidia #python #Intel #AMD #Исследования и прогнозы в ИТ #Высокая производительность #искусственный интеллект #машинное обучение #Radeon #Keras #cuda #opencl #оптимизация #нейронные сети #архитектура gpu #вычисления на графическом процессоре

Вместе с данным постом часто просматривают: