Когда я был студентом, у меня была возможность собрать собственную рабочую станцию.
Вполне логично, что я отдал предпочтение вычислительным решениям 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к (я студент, хоть и работающий).
Пойду погуглить, как использовать 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 явно обладает большей гибкостью.
Давайте двигаться дальше.
Реализация написана на самописном языке.
Плитка .
У этого языка есть следующие основные преимущества — синтаксис близок к математическим обозначениям (это безумие!):
И автоматическая дифференциация всех заявленных операций.
Например, в TensorFlow при создании новой пользовательской операции настоятельно рекомендуется написать функцию для расчета градиентов.
Таким образом, при создании собственных операций на языке Tile нам достаточно сказать: ЧТО мы хотим считать, не думая об этом КАК Это рассматривается применительно к аппаратным устройствам.
Дополнительно оптимизирована работа с DRAM и аналогом кэша L1 в графическом процессоре.
Давайте вспомним схематическое устройство:
Для оптимизации используются все доступные аппаратные данные — размер кэша, ширина строки кэша, пропускная способность DRAM и т. д. Основные методы — обеспечить одновременное чтение достаточно больших блоков из DRAM (стараясь избегать обращения к разным областям) и обеспечение многократного использования данных, загруженных в кэш (стараясь избежать повторной загрузки одних и тех же данных несколько раз).
Все оптимизации происходят в течение первой эпохи обучения, что значительно увеличивает время первого запуска:
Кроме того, стоит отметить, что эта основа основана на OpenCL .
Основное преимущество OpenCL заключается в том, что он стандарт для гетерогенных систем и ничто не мешает запускать ядро на ЦП .
Да, именно здесь кроется один из главных секретов кроссплатформенности PlaidML.
Заключение
Конечно, обучение на RX 460 все равно происходит в 5-6 раз медленнее, чем на 1060, но вы же сравните ценовые категории видеокарт! Потом я приобрел RX 580 8 ГБ (мне его одолжили!), и время прогона эпохи сократилось до 20 секунд, что почти сопоставимо.
В блоге vertex.ai есть честные графики (чем больше, тем лучше):
Видно, что 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 |
Думается, если разработчики этого инструмента не перестанут выпускать новые версии и с PlaidML будет знакомиться все больше обиженных Nvidia людей, то скоро о vertex.ai будут говорить гораздо чаще.
Раскройте свои Radeon! Теги: #Машинное обучение #gpu #nvidia #python #Intel #AMD #Исследования и прогнозы в ИТ #Высокая производительность #искусственный интеллект #машинное обучение #Radeon #Keras #cuda #opencl #оптимизация #нейронные сети #архитектура gpu #вычисления на графическом процессоре
-
Ознакомьтесь С Новой Серией Sony Vaio X
19 Oct, 24 -
Оригинальный Усилитель Звука – Сделай Сам
19 Oct, 24