Есть ли жизнь без Nvidia? Запускаем TensorFlow на Radeon RX 580 / Хабр

 

Есть ли жизнь без Nvidia? Запускаем TensorFlow на Radeon RX 580

Предыстория

На новом рабочем месте меня посадили за ПК, оборудованный процессором Ryzen 2600 и видеокартой Radeon RX 580. Попробовав обучать нейронные сети на процессоре, я понял, что это не дело: уж слишком медленным был процесс. После недолгих поисков я узнал, что существует как минимум 2 способа запуска современных библиотек машинного обучения на видеокартах Radeon: PlaidML и ROCm. Я попробовал оба и хочу поделиться результатами.

PlaidML: кроссплатформенность во главе угла

TensorFlow служит бэкэндом для Keras, интерпретируя его синтаксис и преобразуя его в инструкции, которые могут выполняться на процессоре или GPU. К сожалению, он поддерживает только видеокарты с технологией Nvidia CUDA.

PlaidML – альтернативный бэкэнд для Keras с поддержкой OpenCL. Его можно использовать для обучения моделей Keras на встроенной графике процессора, дискретном или даже внешнем графическом процессоре AMD. Он работает на Windows, Linux и Mac.

UPD: В своём комментарии пользователь MikeLP указал, что:

Keras задумывался как высокоуровневый интерфейс. Соответственно остальные бекенды, как PlaidML могли обеспечить работу с другими видеоускорителями без закрытой технологии CUDA. И так было до тех пор, пока авторы не заявили, что Keras будет развиваться только в рамках Tensorflow. Все — «накрылась медным тазом ваша качалка». И получается что PlaidML может работать только с Keras, a не с tf.Keras — API разбежалось. Cоответственно смысл юзать PlaidML, когда он не совместим с последней версией Keras API в Tensorflow. Пацаны из PlaidML (они часть Intel) были вынуждены поменять roadmap и идти в другом направлении.

По моему мнению, PlaidML ещё актуален, т.к. включение Keras в Tensorflow произошло недавно и API не успел существено поменяться. Однако дальшейшие перспективы Keras+PlaidML выглядят туманно.

Установка PlaidML очень проста. Нужно поставить Python-пакет и выбрать устройство в пошаговом конфигураторе:

В коде нужно прописать использование PlaidML как бэкэнда:

После этого все вычисления будут выполняться на видеокарте. Запустим бенчмарк:

Сравним результаты нашего видеоадаптера с некоторыми другими. RX 580 и Ryzen 2600 я тестировал локально, результаты остальных устройств взяты от других пользователей:

Radeon Vega Frontier Edition

GeForce GTX 1080 TI

Intel HD Graphics 5500

AMD Ryzen 2600 (CPU)

Видеоадаптеры AMD показывают себя ощутимо медленнее видеокарт Nvidia. Впрочем, разрыв между видеокартами на порядок меньше пропасти между видеокартами и процессорами. Исключением выступает Intel HD Graphics: PlaidML совершенно не оптимизирован для видеокарт Intel и их использование не имеет особого смысла.

ROCm: Старший брат

Со своей платформой Radeon Open Compute Platform (ROCm), AMD обеспечивает интерфейс для выполнения кода на GPU и процессорах. ROCm конкурирует с платформой NVIDIA CUDA. Он работает только на UNIX-системах.

На использовании ROCm я в итоге и остановился. По моим ощущениям, он работает в

2 раза быстрее, чем PlaidML, и позволяет загружать в память более сложные модели, когда PlaidML выбрасывает Out Of Memory.

Я установил свежую Ubuntu 20.04 LTS. Для установки и настройки ROCm я предпринял следующие шаги: (они немного отличаются от официальной документации, т.к. она успела несколько устареть)

Откатил ядро с версии 5.8 до 5.6. Для этого я зашел на http://kernel.ubuntu.com/

Далее скопировал их в отдельную папку, в которой выполнил:

Перезагрузил ПК с ядром 5.6, выбрав его в GRUB. После этого удалил ядро 5.8:

Для проверки успешности установки запустил эти команды. Если установка прошла успешно, обе из них выведут название GPU:

Добавил ROCm в PATH:

После этого установил пакеты для машинного обучения:

Установил Pip и TensorFlow:

Готово! После этого TensorFlow автоматически стал использовать мой GPU:

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

RX 580 я тестировал локально, результаты остальных устройств взяты от других пользователей:

Изображений/сек (ResNet 50)

AMD Radeon RX Vega 56

AMD Radeon RX 580

Nvidia GeForce 2080 Ti

Nvidia GeForce GTX 1070

Nvidia GeForce RTX 3080 10GB

Выводы

В 2021 году в сфере машинного обучения становится всё менее и менее важно, какая у вас видеокарта. Видеокарты AMD всё ещё ощутимо отстают в производительности от собратьев из Nvidia, однако при этом и стоят дешевле. Тем не менее, поддержка видеокарт Radeon далека от идеальной, и необходимая настройка для них сложнее и дольше.

Если у вас уже есть видеокарта от AMD, то возможно для целей разработки вам не понадобится менять её на видеокарту Nvidia. Оптимальным выбором для машинного обучения на видеокартах Radeon я считаю фреймворк ROCm. Он обеспечивает приличную производительность, и позволяет запустить TensorFlow 2.2.0 и Keras.

UPD: В комментариях выяснили, что последняя версия связки ROCm+TensorFlow не всегда корректно работает на чипе Polaris 10 (Radeon RX 580). Написал туториал, как поставить ROCm 3.5.1 + TF 2.2: https://github.com/boriswinner/RX580-rocM-tensorflow-ubuntu20.4-guide

Ой, у вас баннер убежал!

Читают сейчас

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

  • Скопировать ссылку
  • Facebook
  • Twitter
  • ВКонтакте
  • Telegram
  • Pocket

Похожие публикации

  • 13 марта 2020 в 13:54

AMD выпустила в Китае RX 590 GME; карту назвали «разогнанной RX 580»

Keras Functional API в TensorFlow

Intel NUC Hades Canyon с графикой AMD Vega — VR или не VR?

Заказы

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Минуточку внимания

Комментарии 38

«Видеокарты AMD всё ещё ощутимо отстают в производительности от собратьев из Nvidia, однако при этом и стоят дешевле.»

— а можно сравнение с ценами? цена единицы производительности? я не удивлюсь если окажется что более дешевые карты дают куда лучше коэффициент. Занимаясь рендером я не раз видел что цена просчёта ниже на домашних картах нежели на титанах. Всё дело в том что цена видеокарт растет быстрее производительности. Проблема лишь в том если хочешь собрать ферму — там получается что одну и ту же производительности получаешь либо в 1м серверном шкафу либо уже в 8ми на более медленных картах. Но вот для домашних пользователей с одним компьютером и одной картой это может быть актуально — сразу поймешь что потратив дополнительно X денег получишь Y% прибавки скорости

При учёте, насколько сейчас отличаются цены от рекомендованных, скачки и разницу между странами даже СНГ — смысла мало, через месяц это станет неактуально

Проблема в том, что AMD не спешит добавлять поддержку ROCm в новые GPU.

Зато спешит дропнуть поддержку существующих чипов

GCN2/GFX7 BONAIRE, KABINI, MULLINS, KAVERI, HAWAII
GCN3,4/GFX8 TONGA, ICELAND/TOPAZ, CARRIZO, FIJI, STONEY, POLARIS10, POLARIS11, POLARIS12, VEGAM
Т.е. включает и упомянутую тут RX580 (POLARIS)

 

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

$ dkms status
amdgpu, 4.0-23, 5.6.0-050600-generic, x86_64: installed

$ apt show rocm-libs -a
Package: rocm-libs
Version: 4.0.0.40000-23

$ pip3 show tensorflow-rocm
Name: tensorflow-rocm
Version: 2.4.0

Видеокарта:
Radeon RX 580 Series (POLARIS10, DRM 3.40.0)

ROCm, насколько я знаю, официально поддерживает RX580 (Polaris). Я как-то пытался запустить на RX5700XT (Navi), где ROCm официально не поддерживается, но, как говорили на гитзхабе, в терории, это возможно. Не осилил.

Давно ждал пока выйдет такая статья! Руки никак не доходили поиграться самому, да и брать AMD не хотелось “просто так”.

Да, раз уж затронули эту тему, по-хорошему в будущем в сравнении неплохо бы привести:

Хотя бы референcные цены (можно и какую-то цену среднюю с авито) и характеристики карт (и может архитектуру / поколение) на FP32 хотя бы;

Пара разных сеток (CNN, RNN, Transformer) и какая-то самописная экзотика;

Хотя бы поресерчить поддержку разных модулей и PyTorch;

А то конечно непонятно, что типовые CV сетки чет заведутся, но можно ли реально работать и планировать пока неясно.

Ну юнет это как обычная сетка, только две штуки
Upsampling слои и transposed conv поддерживаются уже давно везде
Это наверное показатель что поддержка есть хотя бы не только 2D конвов

На самом деле не все так однозначно. Просто добавлю свое мнение на эту тему.

Начнем с того что RX580 это даже близко не аналог 1080. Думаю на сегодняшний день топовые модели AMD и NVDIA приблизительно равны по производительности. Вопрос на самом деле в другом. А толку даже от самых мощных видеокарт, если серьезные вычисления и большие датасеты доступны только гигантским и богатым корпорациям. Все остальное лишь «игрушки», либо только для исследований.

А теперь про сам десктопный ML.
Если у вас видеокарта NVDIA — вы автоматом не сможете работать на экосистеме Apple из-за конфликта Apple и Nvidia. Самые популярные фреймворки Tensorflow и PyTorch работают (с ускорением) только c Nvidia CUDA.

Далее Keras. Keras задумывался как высокоуровневый интерфейс. Соответственно остальные бекенды, как PlaidML могли обеспечить работу с другими видео ускорителями без закрытой технологии CUDA. И так было до тех пор, пока авторы не заявили, что Keras будет развиваться только в рамках Tensorflow. Все — «накрылась медным тазом ваша качалка». И получается что PlaidML может работать только с Keras, a не с tf.Keras — API разбежалось. Cоответственно смысл юзать PlaidML, когда он не совместим с последней версией Keras API в Tensorflow. Пацаны из PlaidML (они часть Intel) были вынуждены поменять roadmap и идти в другом направлении.

Как писал автор — есть и другой путь. Это использовать rocm или «cuda для нищих». Дело в том, что весь ML, по сути, это работа грубо говоря с массивчиками, а именно с матрицами и тензорами (векторами чисел). Оказалось, что видеокарты работают с ними очень быстро уже давно (спасибо видеоиграм). Но есть вопрос — а как программисту сообщить видеокарте, что вот эта структура в его любимом языке программирования это тензор или матрица, чтобы она посчитала нам наши замечательные веса в модельке? Оказалось что у каждого производителя видео чипов есть для этого свой формат/язык. Соответсвенно (очень грубо говоря) rocm это попытка транслировать код написанный для CUDA в код, который понимает AMD видеочипы. Но c ROCm не все так просто — он работает только для некоторых линукс ядер и редакций ОС (Ubuntu, Fedora, CentOS).

Вывод — ML на десктоп это боль. По сути доступен только Linux и Nvidia, все остальное это танцы с бубном.
Если где-то ошибся — дайте знать.

Есть ли практическая польза от двух видеокарт в играх

Последнее обновление – 16 мая 2020 в 14:34

Две видеокарты, установленные на одном компьютере и объединенные при помощи SLI (Scalable Link Interface) от NVIDIA или CrossFire от AMD, дают прирост в производительности 15-30%. Очень редко, в зависимости от оптимизации игр, прирост может достигать 50%. Технология AMD CrossFire оптимизирована заметно хуже, чем SLI от NVIDIA. Если интересно, то более подробно читаем далее ⇒

  1. Дальнейшее развитие параллельного соединения GPU
  2. Как установить две видеокарты на ПК
  3. Выводы и умозаключения

Дальнейшее развитие параллельного соединения GPU

С выходом нового поколения видеокарт GeForce RTX, NVIDIA анонсировала и новый интерфейс (мост) NVLink для соединения двух графических процессоров для совместной работы. Соединяются они при помощи NVLink Bridge . Скорость передачи данных по новому интерфейсу по сравнению со SLI выросла в 10 раз. С 10 Гбайт/с до 100 Гбайт/с. NVLink поддерживают только GeForce RTX 2080 и RTX 2080 Ti, модели 2070 и 2060 его лишены.

Судя по моему анализу различных игровых тестов, проведенных с двумя видеокартами последних поколений 2080Ti, новый интерфейс практически во всех современных играх в разрешении 8k (7680 × 4320 точек) дает минимум 40% прирост производительности, по сравнению с работой SLI режима на двух 1080Ti. Ниже на изображении я привел результаты одного из таких тестов.

стов двух видеокарт 2080ti и 1080ti

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

Стоит обратить внимание на результаты тестирования двух RTX 2080. Они значительно хуже его старшего собрата. В игре Rise of the Tomb Raider две 2080Ti в 8k выдают 50fps, а 2080 только 37fps. Это сильное падение производительности.

Не думаю, что это связано с недостатком видеопамяти. Скорее всего, драйвера для распараллеливания графических данных лучше оптимизированы под 2080Ti, так как по своим характеристикам она близка к профессиональным решениям NVIDIA для параллельных вычислений, под которые изначально и разрабатывался новый интерфейс. Я надеюсь, что более поздние версии драйверов доведут до ума и они будут оптимизированы значительно лучше.

Кстати, NVLink, в отличие от SLI, поддерживает объединение видеопамяти обоих видеокарт.

Как установить две видеокарты на ПК

В будущем нам придется очень грамотно планировать покупку компьютера. Если разница в потреблении энергии между 2-мя и 4-мя планками оперативной памяти не значительна, то при установке 2 видеокарт или более, нам необходимо будет учитывать их суммарную потребляемую мощность.

На материнской плате должны быть слоты для установки двух видеокарт и с обязательной поддержкой их совместной работы. Чтобы узнать, поддерживает ли материнская плата две видеокарты, перейдите на официальную страницу производителя системной платы и проверьте спецификации. Так же это можно определить по наличию на коробке логотипа Crossfire, SLI или NVLink.

Блок питания также должен обладать достаточной мощностью, чтобы тянуть все железо компа+2 видеокарты. Сейчас для этого необходимо около 900 Вт для 2х топовых видях.

При использовании двух видеокарт, игры становятся процессорозависимыми.

Чем выше разрешение вы используете, и чем больше даете нагрузку на видеокарту(ы), тем меньше это проявляется.

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

Для работы с двумя топовыми видеокартами, вам придется раскошелиться и на максимально мощный процессор, иначе все это не имеет смысла.

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

Связывайте NVLink только видеокарты выполненные на однотипном графическом процессоре. Производитель не важен, но важна частота работы GPU, так как при объединении обе видяхи будут работать на меньшей частоте. Например у нас одна карточка, которая имеет рабочую частоту 1695 Мгц, а другая 1770 Mгц, то в совместном режиме они обе будут работать на 1695 Мгц. Все точно так же, как у оперативной памяти.

Пара графических карт требует вместительного компьютерного корпуса, которого будет достаточно как для их установки, так и дополнительного оборудования.

В панели управления драйвером графического процессора, должна быть включена функция NVLink, SLI или Crossfire.

Выводы и умозаключения

С выходом NVLink, технологию CrossFire от AMD можно смело хоронить. Она и так была хуже по реализации, чем SLI, а теперь вообще не конкурент. AMD срочно нужно что-то новое придумать, так как технологии совместной работы двух и более видеокарт станут намного производительнее, что повлечет за собой их распространение. Это станет еще одним конкурентным преимуществом.

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

Заметьте рост цен на топовые видеокарты. Я помню еще те времена, когда топовый на то время видеоускоритель ATI Radeon 9700pro стоил 16000 руб (около 500 баксов). Сейчас, даже с учетом роста курса, топовая видяха стоит 1500 долларов.

Сделать многоядерным графический процессор скорее всего не получиться, так как он намного сложнее центрального. Да и с отводом тепла что-то придумывать придется. Проще отладить технологию параллельных вычислений и завести ее качественную поддержку во все игры, а не как сейчас. С выходом следующего поколения видеокарт, будет реально видно, куда будет идти развитие.

Уже можно сказать точно, что поддержки работы двух и более видеокарт не будет в тех моделях, которые по общей стоимости будут равны или дороже топового варианта из их же поколения. Смысла в покупке такого тандема просто не будет (как и сейчас нет). Лучше будет взять одну топовую видяху, чем два середнячка, а через год-два взять еще одну (уже дешевле) и увеличить производительность на 100%. Как раз к этому времени лучшую оптимизацию подвезут и игры новые появятся для такой производительности. Сейчас производители обновляют модельный ряд видеокарт примерно каждые 18 месяцев. Скорее всего эти сроки будут увеличены.

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

В общем, пока использование двух видеокарт в компьютере, остается уделом богатеньких буратино. И таким останется ближайшие 2-3 года. При примерном подсчете, стоимость игровой системы с двумя современными топовыми видеокартами ушла за 300 тысяч, вместе с монитором на 8k, и чуть дешевле на 4k.

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

https://habr.com/ru/post/538138/

Есть ли практическая польза от двух видеокарт в играх

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *