Как AMD выкрутилась и научилась воспроизводить операции ядер CUDA на своих видеокартах. История ROCm

от автора


Как AMD смогла обойти монополию NVIDIA в мире ИИ? История о том, как команда AMD создала ROCm — технологию, позволяющую запускать CUDA-приложения на своих видеокартах. Как компании удалось совершить этот технологический прорыв? Разберём путь от первых экспериментов с HSA до современных версий ROCm, поддерживающих самые популярные фреймворки для машинного обучения. А главное — в конце расскажу, как установить ROCm на Windows и Linux, избежав всех подводных камней.

Первое явление CUDA

У всего есть своё начало. Так, в ноябре 2006 года Nvidia представила GeForce 8800 — первую коммерческую видеокарту с ядрами CUDA. В первой же рекламе новинку позиционировали как high-end устройство, хотя современные маркетологи Nvidia, вероятно, поступили бы так же, как с RTX 3090, назвав профессиональное решение игровым.

Однако CUDA в 2006 году значительно отличалась от того, что мы видим сегодня. До этого времени видеокарты в основном использовались для обработки графики, а вычисления на них были редкостью. Новые CUDA-ядра позволяли выполнять множество операций параллельно, используя тысячи потоков, что значительно повышало вычислительные возможности по сравнению с традиционными методами на ЦПУ. А новый набор инструментов дал возможность применять GPU для широкого круга задач, таких как научные вычисления и обработка данных. Но о нейросетях тогда говорить было ещё рано.

Оглушительный успех Pascal и незаметные ростки ИИ

Выход Nvidia GeForce 1000-й серии ознаменовался большим успехом как у игроков, так и у профессионалов, включая Nvidia TITAN X. Однако на этом фоне менее заметна другая значимая деталь, касающаяся изменений в инструментарии CUDA, PyTorch и TensorFlow. В новинке спустя год была интегрирована поддержка новейших, и до сих пор актуальных фреймворков машинного обучения на основе глубоких нейросетей. Именно в тот момент OpenAI обучала свою первую GPT-1 на мощностях новых Pascal и Tesla. А сервис pix2pix, который вы наверняка тогда видели, также был обучен на этих фреймворках.

Скриншот сайта pix2pix

С чего началось развитие ROCm

В 2013 году AMD выступила с новой инициативой HSA (Heterogeneous System Architecture), направленной на улучшение взаимодействия между процессором, ГПУ и другими вычислительными устройствами, включая оперативную память. Впоследствии на базе данной архитектуры начала строиться платформа ROCm Runtime(Radeon Open Compute).

Выпуск платформы ROCm в 2016 году

Путём долгого и кропотливого реверс-инжиниринга, изучения документации и многочисленных исследований инженерам компании AMD удалось создать почти полную бинарную совместимость кода, предназначенного для CUDA, на устройствах, поддерживаемых платформой ROCm. Для воспроизведения кода CUDA его необходимо было преобразовать через утилиту HIPIFY в код ROCm (HIP). Первоначальная поддержка была ограниченной — всего две линейки графических ускорителей: AMD Radeon R9 Series и AMD FirePro Series. Сама платформа работает только на Linux.

Дальнейшее развитие ROCm в 2017 году

Семья поддерживаемых линеек видеокарт пополнилась: Radeon RX Vega и Radeon Instinct. Впервые была достигнута бинарная совместимость кода CUDA с платформой. Такой подход даёт значительное преимущество перед виртуализацией, так как код аппаратно воспроизводится/преобразуется на устройстве, а не происходит имитация работы другого оборудования. Теоретически, эффективность не достигает 100%. Здесь уместна аналогия: «как если бы двигатель от Формулы-1 установили в спорткар Mercedes. Да, Mercedes будет мчаться впечатляюще быстро, почти не уступая оригинальной Формуле-1, но всё же не сможет полностью раскрыть потенциал двигателя — ведь шасси, трансмиссия и электроника изначально проектировались под другую силовую установку». В сравнении с аналогичными по мощности видеокартами Nvidia, производительность составляет 70-90%.

Успешная стабильность

В течение 2018–2023 годов разработчики ROCm улучшали и оптимизировали платформу, добавляя поддержку новых линеек видеокарт: RDNA, RDNA 2 и RDNA 3. Обновление существующих библиотек и улучшение интеграции с фреймворками за этот период значительно повысили стабильность и эффективность работы платформы. Однако с каждой новой версией прекращалась поддержка более старых видеокарт.

ROCm 1.x ROCm 2.x ROCm 3.x ROCm 4.x ROCm 5.x ROCm 6.x
RDNA 3 нет нет нет нет да да
RDNA 2 нет нет нет да да да
RDNA нет нет да да да нет
Radeon PRO нет нет нет нет да да
Vega да да да да да нет
Instinct да да да да да да
Polaris нет да да да нет нет
FIJI да нет нет нет нет нет

Дебют на Windows, 2023-2024 год

В июне 2024 года AMD выпускает новую версию ROCm 5.7 с поддержкой Windows. Но почему так поздно? ROCm изначально разрабатывался для Linux, поскольку эта ОС доминирует в сфере высокопроизводительных вычислений и машинного обучения. Это видно, например, по более длительной поддержке серверных решений по сравнению с потребительскими. Однако взрывной рост интереса к AI в последние годы изменил подход. Теперь на потребительской платформе AMD, которая ориентирована преимущественно на игровые решения, появилась поддержка ROCm на Windows. Но есть нюанс — поддержка реализована через виртуальную среду Linux в WSL 2.

С выпуском ROCm 6.2 и усилением внимания к AI были введены жизненно важные оптимизации. Например, расширена поддержка FP8 и vLLM, что указывает на новый фокус на развитие больших языковых моделей. Примером такой модели является успешная *LLAMA, которую можно запускать локально на домашних ПК.

Планы AMD по развитию ROCm сосредоточены на дальнейшем развитии платформы для конкуренции с Nvidia в области ИИ. Новые ускорители, такие как AMD Instinct MI325X, становятся всё более интересным вариантом на фоне дефицита аналогичных решений от Nvidia. Эти ускорители способны выполнять те же задачи и предлагают такую же долгосрочную поддержку платформы.

AMD Instinct MI325X

Как установить у себя ROCm

Вариант с Docker был уже множество раз рассмотрен на Хабре, но не запуск через прямую установку в систему. С Linux-версией проблем нет. Что же если говорить о Windows, то сначала необходимо свериться с таблицей. Если у вас RDNA 2 или 3, то проблем с установкой на Windows не будет. Нет, как оказалось, AMD мало того что портировала ROCm через пень-колоду, так и ROCm SDK поддерживается в линейке RDNA 2, только на видеокартах старше RX 6800 и всю линейку RDNA 3.

По таблице с официального сайта AMD видно, что даже у RX 6600 есть поддержка ROCm Runtime, но не ROCm SDK. Казалось бы, с чего же кипеш? Однако за этой аббревиатурой скрывается нечто иное. Runtime не означает, что вы можете только запускать приложения, а разрабатывать их не получится (SDK — набор средств разработки программного обеспечения). На деле возможности Runtime по сравнению с SDK пакетом значительно ограничены. Отсутствует функционал важнейших компиляторов HIP и OpenCL, доступен только минимальный набор для выполнения GPGPU вычислений — по сути, просто стек для использования ГПУ в расширенном круге задач, помимо графики. Из полученных ранее знаний можно понять, что HIP является основой, на которой держится почти весь ROCm, и его отсутствие делает невозможным запуск каких-либо нейросетей. Остаётся только запуск через компилятор DirectML.

▍ Установка ROCm на Windows и альтернатива DirectML

Установка версий ROCm 5.5 или 5.7 нецелесообразна, так как полноценная поддержка PyTorch через WSL 2 была реализована только с выходом ROCm 6.1.2. При обращении к официальному сайту ROCm на странице, найденной в поисковике, доступна только версия 5.5 с нерабочей ссылкой для скачивания. Поэтому необходимо найти раздел непосредственно самого проекта, где помимо обширных руководств по установке имеются ссылки на скачивание различных версий.

Если ваша видеокарта, хоть и свежей архитектуры, не поддерживается новыми версиями ROCm, можно воспользоваться компилятором DirectML от Microsoft. Однако у этого способа есть два существенных недостатка: меньшая скорость выполнения и ограниченная совместимость — создатель нейросети должен самостоятельно добавить поддержку DirectML. Примером использования DirectML является Stable Diffusion, где также представлена инструкция по запуску.

▍ Установка ROCm на Linux

Помимо привычного Docker, который недавно рассматривался в другой(не моей) статье на Хабре, ROCm можно запустить напрямую через систему. В его работе можно быть уверенным только на дистрибутивах Linux из официального списка, но практика показала, что популярный Arch Linux также хорошо с ним совместим. Для начала сверимся с таблицей версий. Далее необходимо вписать в консоль набор команд. Казалось бы, уж тут проблем возникнуть не должно, но нет. Просто указать нужную версию ROCm не получится — по неизвестным причинам все старые версии удалены с PyPI. Однако они сохранились в репозиториях проекта на официальном сайте. Ниже приведены рабочие команды для установки каждой доступной версии, написанные мной.

▍ ROCm 6.1, версия python=3.11

python -m venv venv // Если у вас установлено несколько версий Python, используйте команду python3.11 -m venv venv
source venv/bin/activate // потом заходим всегда через эту команду
pip install torch==2.4.1+rocm6.1 torchvision==0.19.1+rocm6.1 torchaudio==2.4.1+rocm6.1 --extra-index-url https://download.pytorch.org/whl/rocm6.1
HSA_OVERRIDE_GFX_VERSION=10.3.0 python3 -c "import torch; print('True! Успех, ваш ROCm работает' if torch.cuda.is_available() else 'False! Данная версия вам не подошла, попробуйте другую')"

▍ ROCm 5.6, версия python=3.11

python -m venv venv // Если у вас установлено несколько версий Python, используйте команду python3.11 -m venv venv
source venv/bin/activate // потом заходим всегда через эту команду
pip install torch==2.2.2+rocm5.6 torchvision==0.17.2+rocm5.6 torchaudio==2.2.2+rocm5.6 --extra-index-url https://download.pytorch.org/whl/rocm5.6
HSA_OVERRIDE_GFX_VERSION=10.3.0 python3 -c "import torch; print('True! Успех, ваш ROCm работает' if torch.cuda.is_available() else 'False! Данная версия вам не подошла, попробуйте другую')"

▍ ROCm 5.4.2, версия python=3.10

python -m venv venv // Если у вас установлено несколько версий Python, используйте команду python3.10 -m venv venv
source venv/bin/activate // потом заходим всегда через эту команду
pip install torch==1.13.1+rocm5.2 torchvision==0.14.1+rocm5.2 torchaudio==0.13.1+rocm5.2 --extra-index-url https://download.pytorch.org/whl/rocm5.2
HSA_OVERRIDE_GFX_VERSION=10.3.0 python3 -c "import torch; print('True! Успех, ваш ROCm работает' if torch.cuda.is_available() else 'False! Данная версия вам не подошла, попробуйте другую')"

▍ ROCm 4.5.2, версия python=3.10

python -m venv venv // Если у вас установлено несколько версий Python, используйте команду python3.10 -m venv venv
source venv/bin/activate // потом заходим всегда через эту команду
pip install torch==1.11.0+rocm4.5.2 torchvision==0.12.0+rocm4.5.2 torchaudio==0.11.0+rocm4.5.2 --extra-index-url https://download.pytorch.org/whl/rocm4.5.2
HSA_OVERRIDE_GFX_VERSION=10.3.0 python3 -c "import torch; print('True! Успех, ваш ROCm работает' if torch.cuda.is_available() else 'False! Данная версия вам не подошла, попробуйте другую')"

▍ ROCm 4.1, версия python=3.9

python -m venv venv // Если у вас установлено несколько версий Python, используйте команду python3.9 -m venv venv
source venv/bin/activate // потом заходим всегда через эту команду
pip install torch==1.10.2+rocm4.1 torchvision==0.11.3+rocm4.1 torchaudio==0.10.2+rocm4.1 --extra-index-url https://download.pytorch.org/whl/rocm4.1
HSA_OVERRIDE_GFX_VERSION=10.3.0 python3 -c "import torch; print('True! Успех, ваш ROCm работает' if torch.cuda.is_available() else 'False! Данная версия вам не подошла, попробуйте другую')"

Более ранние версии ROCm не представлены в репозитории, и по сути, в них нет необходимости, так как практически все необходимые архитектуры поддерживаются в более поздних версиях.

Практические советы по использованию ROCm

Перед запуском Python (или программы с PyTorch) необходимо установить переменную окружения HSA_OVERRIDE_GFX_VERSION=10.3.0 для корректной работы среды ROCm. В файлах requirements.txt проектов на GitHub удалите строки «torch», «torchvision», «torchaudio», иначе при установке зависимостей версии обновятся до последних, которые большинство видеокарт не поддерживает. Чтобы проверить установленную версию ROCm, введите в терминал pip list | grep torch. Если программа не запускается, а тест ROCm оказался успешным, сначала поищите решение во вкладке Issues на GitHub проекта или в интернете. В крайнем случае создайте свой вопрос в Issues, но имейте в виду, что на Github никто вам отвечать не обязан. Попытки исправить ситуацию путём модификации кода запускателя, по моему опыту, не приводили к успеху. В целом, большинство популярных проектов запускается с ROCm; единственное исключение было только с RVC.

Заключение

Развитие платформы ROCm не только способствует расширению возможностей использования GPU от AMD в области высокопроизводительных вычислений и машинного обучения, но и подчёркивает важность открытых стандартов для вычислительной экосистемы. В то время как NVIDIA продолжает доминировать на рынке, появление альтернативных решений, таких как ROCm, предоставляет разработчикам больше вариантов для выбора и оптимизации приложений. Это создаёт условия, способствующие инновациям, и позволяет лучше адаптироваться к требованиям быстро меняющегося мира технологий, где искусственный интеллект и глубокое обучение играют ключевую роль в успехе.

*Принадлежит Meta, которая запрещена в России как экстремистская.

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻


ссылка на оригинал статьи https://habr.com/ru/articles/847792/


Комментарии

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

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