Есть ли жизнь без 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.

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

 pip install plaidml-keras && plaidml-setup

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

os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

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

plaidbench keras mobilenet

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

Устройство

Время компиляции

Время исполнения

Radeon RX 580

6.14s

6.51s

Radeon Vega Frontier Edition

4.56s

5.50s

GeForce GTX 1080 TI

2.52s

4.83s

Intel HD Graphics 5500

36.64s

755.23s

AMD Ryzen 2600 (CPU)

5.04s

254.70s

Видеоадаптеры 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 я предпринял следующие шаги: (они немного отличаются от официальной документации, т.к. она успела несколько устареть)

  1. Обновил пакеты:

    sudo apt update && sudo apt dist-upgrade && sudo apt install libnuma-dev && sudo reboot
  2. Откатил ядро с версии 5.8 до 5.6. Для этого я зашел на http://kernel.ubuntu.com/~kernel-ppa/mainline/ и скачал файлы:

    linux-headers-VERSION-NUMBER_all.deb
    linux-headers-VERSION-NUMBER_amd64.deb
    linux-image-VERSION-NUMBER_amd64.deb
    linux-modules-VERSION-NUMBER_amd64.deb
  3. Далее скопировал их в отдельную папку, в которой выполнил:

    sudo dpkg -i *.deb
  4. Перезагрузил ПК с ядром 5.6, выбрав его в GRUB. После этого удалил ядро 5.8:

    sudo apt-get purge *5.8.0*
  5. Перезагрузил ПК.

  6. Добавил репозиторий:

    wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -
    echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list
  7. Установил ROCm:

    sudo apt update && sudo apt install rocm-dkms && sudo reboot
  8. Настроил права:

    sudo usermod -a -G video $LOGNAME
    sudo usermod -a -G render $LOGNAME
  9. Для проверки успешности установки запустил эти команды. Если установка прошла успешно, обе из них выведут название GPU:

    /opt/rocm/bin/rocminfo
    /opt/rocm/opencl/bin/clinfo
  10. Добавил ROCm в PATH:

    echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/rocprofiler/bin:/opt/rocm/opencl/bin' | sudo tee -a /etc/profile.d/rocm.sh
  11. После этого установил пакеты для машинного обучения:

    sudo apt install rocm-libs miopen-hip rccl
  12. Установил Pip и TensorFlow:

    sudo apt install python3-pip
    pip3 install --user tensorflow-rocm

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

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

python3 ./tf_cnn_benchmarks.py --num_gpus=1 --batch_size=64 --model=resnet50

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

Устройство

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

AMD Radeon VII

284

AMD Radeon RX Vega 56

131

AMD Radeon RX 580

92

Nvidia GeForce 2080 Ti

293

Nvidia GeForce GTX 1070

126

Nvidia GeForce RTX 3080 10GB

396

Выводы

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

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

Let’s block ads! (Why?)

Read More

Recent Posts

VK купила 40% билетной платформы Intickets.ru

VK объявляет о приобретении 40% компании Intickets.ru (Интикетс). Это облачный сервис для контроля и управления продажей билетов на мероприятия. Сумма…

11 часов ago

OpenAI готовится запустить поисковую систему на базе ChatGPT

OpenAI готовится запустить собственную поисковую систему на базе ChatGPT. Информацию об этом публикуют западные издания. Ожидается, что новый поисковик может…

20 часов ago

Роскомнадзор рекомендовал хостинг-провайдерам ограничить сбор данных с сайтов для иностранных ботов

Центр управления связью общего пользования (ЦМУ ССОП) Роскомнадзора рекомендовал компаниям из реестра провайдеров ограничить доступ поисковых ботов к информации на российских сайтах.…

2 дня ago

Apple возобновила переговоры с OpenAI и Google для интеграции ИИ в iPhone

Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…

7 дней ago

Российская «дочка» Google подготовила 23 иска к крупнейшим игрокам рекламного рынка

Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…

7 дней ago

Google завершил обновление основного алгоритма March 2024 Core Update

Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…

7 дней ago