Image

Собираем ROCm 7.1 + PyTorch в Windows под свои GPU

Введение

В этой статье я поделюсь опытом сборки еще не вышедшей на момент написания ROCm 7 под свои GPU, даже если их нет в списке официально поддерживаемых архитектур. Затем покажу, как с собранным ROCm 7 собрать PyTorch и запустить ComfyUI. Для примера я буду собирать ROCm под RX 6800 + Radeon 780m.
Я предполагаю, что читатель уже знает, что такое ROCm и зачем он нужен.

Мотивация

У меня мини-ПК на Ryzen 8745HS со встроенной Radeon 780M (без NPU) и внешней видеокартой RX 6800. Мне давно наскучил полноценный ATX-корпус в интерьере, да и нужен он был только для того, чтобы было куда воткнуть GPU. А так как я GPU в основном использую для ML-задач, то все 16 линий PCIe мне не нужны — 4x от eGPU вполне достаточно.

До этого у меня была RTX 3060, но 12 ГБ VRAM банально не хватало — буквально 1–2 ГБ — для запуска некоторых моделей. На 24 ГБ RTX 3090 или 16 ГБ более свежих RTX 5060 Ti денег было жалко, поэтому я взял RX 6800: цена на б/у рынке почти такая же, как у 3060.

Но вот незадача: вместо CUDA у нас ROCm. Он вроде хочет быть как «красная CUDA», и сейчас, возможно, с выходом ROCm 7 что-то изменится в лучшую сторону, но пока это сплошные костыли. Однако будем работать с тем, что имеем, и попробуем выжать из этого максимум.

Свой путь я начал с Arch Linux и ROCm 7, но столкнулся с подводными камнями:

  1. Драйверы периодически отваливались при использовании ROCm на встройке. Помогала только перезагрузка.

  2. В Linux нет поддержки горячего отключения eGPU. Скрипты, которые мне удалось найти, не помогают для ROCm: Vulkan-ускорение работает нормально, а ROCm-драйвер падает до перезагрузки.

Под Windows другая история: тут горячее отключение работает нормально, но официальной версии ROCm для моей встройки нет, HSA_OVERRIDE_GFX_VERSION в Windows не работает, а для RX 6800 последняя доступная ROCm — 6.4.2, при том что на Linux все давно во всю крутят ROCm 7.

Я решил исправить ситуацию и собрать свой ROCm 7 + PyTorch с поддержкой обеих GPU под Windows. Ниже я расскажу, как у меня это получилось, а также запущу FLUX в ComfyUI на обеих карточках по очереди.

Проверка на совместимость

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

  1. Определяем архитектуру (Navi 21, Phoenix …). Идем в GPU-Z или подобный инструмент и смотрим архитектуру.

  2. Идем в исходники открытого драйвера и по своей архитектуре находим кодовое название, например для Phoenix это gfx1103, для Navi 21 это gfx1030.

Готовые сборки

После того как мы определились с кодовым названием наших GPU, идем по ссылкам ниже. Есть несколько источников готовых сборок ROCm:

  • Я брал отсюда: https://rocm.nightlies.amd.com/v2-staging/

  • https://rocm.nightlies.amd.com/v2/

  • https://rocm.devreleases.amd.com/v2

  • https://rocm.devreleases.amd.com/v2-staging

Если вы нашли готовые сборки rocm_sdk и pytorch под свою архитектуру и версию ОС, то вам повезло: можете скачивать whl-пакеты и переходить к пункту «Установка ComfyUI с поддержкой ROCm«.
Для тех, кому нужен уже собранный дистрибутив ROCm (например, для сборки llama.cpp), а не Python-пакет, его можно найти по этой ссылке, дописав к ней имя нужного архива.

Если у вас 2 GPU (например, у меня одна gfx1103, а вторая gfx1030) и они из разных поколений, то готовых сборок с поддержкой обоих поколений вы на данный момент не найдете и остается только собирать все самим из исходников.

Подготовка к сборке

Есть ряд требований к системе, в которой осуществляется сборка:

  1. Необходимо установить следующие компоненты:

    1. chocolatey — популярный менеджер пакетов. После него установите следующие пакеты.

      choco install visualstudio2022buildtools -y —params «—add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 —add Microsoft.VisualStudio.Component.VC.CMake.Project —add Microsoft.VisualStudio.Component.VC.ATL —add» choco install git.install -y —params «‘/GitAndUnixToolsOnPath'» choco install cmake —version=3.31.0 -y 6. choco install ninja -y choco install ccache -y choco install strawberryperl -y choco install python —version=3.12.

      Возможно, подойдет и другая версия Python, но я не проверял. Если у вас в системе уже установлен Python 3.12, удалите его и установите через choco, иначе python установится в качестве зависимости к dvc и будет каша в PATH.

      choco install dvc -y

    2. У меня в добавок установлена Visual Studio 2022 Community со следующим набором компонентов:

      • Workload: Desktop development with C++

      • Components: C++ CMake Tools for Windows, Git for Windows, C++ Clang Compiler for Windows, MSBuild Support for LLVM Toolset (clang)

        Но я не уверен что это необходимо.

  2. Для скачивания источников и сборки необходима поддержка symlink. По умолчанию создавать ссылки в Windows может только администратор. Можно включить эту возможность для непривилегированных пользователей в secpol.msc. Однако я собирал всё из-под админа.

  3. Для Git нужно выполнить следующие настройки:

    git config —global core.symlinks true git config —global core.longpaths true git config —global user.email «mail@mail.m» #ваш email, любой git config —global user.name «superduperuser» #имя пользователя для комита # user.email и user.name — понадобится для сборки PyTorch

  4. Проверьте интернет-соединение:

  • http://sparse-files.engr.tamu.edu

  • https://files.pythonhosted.org

  • https://sqlite.org

    Если один из этих сайтов у вас не открывается, CMake завершится с ошибкой.

Пример ошибки:[rocSPARSE configure] — Downloading and extracting test matrix SNAP/amazon0312.tar.gz [rocSPARSE configure] — Timeout has been reached, trying mirror … [rocSPARSE configure] CMake Error at cmake/ClientMatrices.cmake:162 (message): [rocSPARSE configure] «Timeout was reached»

Можно собирать без прокси и пр., ровно до момента сборки rocSPARSE, hipSPARSE и rocThrust, затем включить его и запустить сборку заново — она продолжится с того места, где остановилась.

  1. Как я понял изначально сборка затачивалась под linux и только потом адаптировалась под Windows поэтому некоторые вещи остались, например CMake будет пытаться найти python3. Для того чтобы избежать ошибок «Python was not found», создаем ссылку python3.exe:

    # замените на ваш путь, если отличается cd C:Python312 New-Item -ItemType SymbolicLink -Name «python3.exe» -Target «C:Python312python.exe»

Клонирование репозитория и подпроектов

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

git clone https://github.com/ROCm/TheRock.git cd TheRock # у меня заработал этот комит, все что после с моей gfx1030 работало плохо git checkout -q —detach e060adb724b23da94b6913296f828fb56c28e196 python -m venv .venv ..venvScriptsactivate pip install -r requirements.txt # скачивает подмодули и применяем патчи python ./build_tools/fetch_sources.py

Обратите внимание, мы берем определенный коммит, именно на нем я проверял работоспособность и именно в нем исправили ошибку с определением моей GPU. Так как проект в разработке, то в нем что-то отваливается с определенной периодичностью — это нормально.

Про выбор комитов

На данный момент ведется активная разработка, поэтому постоянно что-то отваливается и появляется новое. Например, в данной статье я использую коммит от 2024-11-06 (коммиты с 2024-11-06 вообще не определяли одну из моих карточек). В 2024-11-16 это пофиксили и добавили поддержку rocWMMA, который нужен для AOTriton и новой sageattention. Однако после сборки я обнаружил, что в ComfyUI на выходе я стал получать изображение шума. Так что тут только методом проб и ошибок.

Патчим файлы для ускорения сборки

Я сначала думал сделать форк, чтобы упростить вам жизнь, но потом понял, что могу что-то сломать. Быстрее так объяснить, что изменить и зачем, — так как патчить файлы мы будем уже после скачивания всех подпроектов и т.д.

Ускоряем сборку rocSPARSE, hipSPARSE

Необходимо найти файлы:
TheRockrocm-librariesprojectsrocsparsecmakeClientMatrices.cmake
TheRockrocm-librariesprojectshipsparsecmakeClientMatrices.cmake

И закомментировать в них все строки. Тогда не будут скачиваться файлы тестов с сайта http://sparse-files.engr.tamu.edu.

Сборка ROCm

Важно: Если сборка завершается ошибками, о которых я тут не упоминал, лучше выполнить сборку на проверенной конфигурации (gfx110X-dgpu) с минимальным набором компонентов и под учетной записью с правами администратора.

Во время сборки CPU будет загружен на максимум, длиться это будет часа 4, так что если у вас мини-ПК или ноутбук, советую отключить TurboBoost, чтобы избежать перегрева и троттлинга. При данной нагрузке TurboBoost только замедлит сборку.

Немного про конфигурацию сборки

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

  • Сборка в Windows

  • README.md

  • Сборка PyTorch Главный параметр конфигурации это -DTHEROCK_AMDGPU_FAMILIES с помощью него мы указываем для каких семейств GPU мы будем выполнять сборку. Есть так же параметр -DTHEROCK_AMDGPU_TARGETS c помощью которого можно указать не семейство а конкретную архитектуру, однако с этим параметром у меня не получилось собрать PyTorch поэтому используем первый.

Запускаем конфигурацию и сборку

Для дальнейшей сборки PyTorch необходимо собрать все компоненты ROCm:

cmake -B build_103X_110X -GNinja . -DTHEROCK_AMDGPU_FAMILIES=»gfx103X-dgpu;gfx110X-igpu» -DTHEROCK_AMDGPU_DIST_BUNDLE_NAME=custom cmake —build build_103X_110X —target therock-dist

В данном примере я собираю сборку которая будет работать на gfx103X-dgpu иgfx110X-igpu что в переводе значит на RX 6800, RX6600XT и Radeon 780m.

Если ROCm нужен вам только для сборки llama.cpp, то можно ускорить сборку, отключив неиспользуемые компоненты:

cmake -B build_103X_110X -GNinja . -DTHEROCK_AMDGPU_FAMILIES=»gfx103X-dgpu;gfx110X-igpu» -DTHEROCK_ENABLE_ALL=OFF -DTHEROCK_ENABLE_MIOPEN=ON -DTHEROCK_ENABLE_BLAS=ON -DTHEROCK_AMDGPU_DIST_BUNDLE_NAME=custom cmake —build build_103X_110X —target therock-dist

После того как сборка завершилась, вы должны увидеть что-то вроде:

[rocThrust] [287/288] Linking CXX executable testunique.hip.exe [rocThrust SUCCEEDED in 1653 seconds] [3/4] Populate artifact prim

И если запустить сборку повторно, то вы увидите:

[0/2] Re-checking globbed directories… ninja: no work to do.

Поздравляю основной дистрибудив ROCm собран, теперь с ним можно компилировать другие приложения, например llama.cpp. Расположен дистрибутив в директории сборки -> папка dist.

После сборки дистрибутива необходимо упаковать его в WHL пакеты для дальнейшей сборки и использования с PyTorch.

Собираем архивы и Python-пакеты ROCm:

cmake —build build_103X_110X —target therock-archives python ./build_tools/build_python_packages.py —artifact-dir=build_103X_110X/artifacts —dest-dir=build_103X_110X/packages —version «7.1.0» —version-suffix «gfx103X_1103»

После выполнения скрипта в директории packages должно появиться 4 пакета:

  • rocm-7.1.0.tar.gz

  • rocm_sdk_core-7.1.0-py3-none-win_amd64.whl

  • rocm_sdk_devel-7.1.0-py3-none-win_amd64.whl

  • rocm_sdk_libraries_custom-7.1.0-py3-none-win_amd64.whl

Сборка PyTorch

Деактивируем venv, переходим в external_build/pytorch и создаем новый venv

deactivate cd external_build/pytorch python -m venv .venv ..venvScriptsActivate

Устанавливаем собранные пакеты ROCm:

# укажите свой путь к packagesdist pip install —find-links C:bTheRockbuild_103X_110Xpackagesdist rocm[libraries,devel] pip install packaging

Вывод успешной установки:

Successfully installed rocm-7.1.0 rocm-sdk-core-7.1.0 rocm-sdk-devel-7.1.0 rocm-sdk-libraries-custom-7.1.0

Клонируем и собираем PyTorch, torchaudio и torchvision:

Клонирование нужной версии PyTorch

В данной статье я рассмотрю возможность сборки Pytorch 2.9, хотя с 2.10 у мня тоже получилось.

Скачиваем исходники PyTorch 2.9

python pytorch_torch_repo.py checkout —repo-hashtag release/2.9 —gitrepo-origin https://github.com/ROCm/pytorch.git —checkout-dir D:/b/2.9/pytorch python pytorch_audio_repo.py checkout —require-related-commit —checkout-dir D:/b/2.9/audio —torch-dir D:/b/2.9/pytorch python pytorch_vision_repo.py checkout —require-related-commit —checkout-dir D:/b/2.9/vision —torch-dir D:/b/2.9/pytorch

Сборка

python build_prod_wheels.py build —pytorch-dir D:/b/2.9/pytorch —pytorch-audio-dir D:/b/2.9/audio —pytorch-vision-dir D:/b/2.9/vision —output-dir C:/dev/PytorchRocm7/out —clean

Если все собралось правильно, вы должны увидеть сообщение похожее на это:

++ Copy D:bvisiondisttorchvision-0.25.0a0+rocmsdk20251118-cp312-cp312-win_amd64.whl -> C:devPytorchRocm7out — Builds all completed

Поздравляю сборка PyTorch завершена. Необходимые пакеты вы найдете в директории —output-dir. Теперь давайте заставим все это работать.

Установка ComfyUI с поддержкой ROCm

Клонируем репозиторий с ComfyUI и создаем окружение:

git clone https://github.com/comfyanonymous/ComfyUI cd ComfyUI python -m venv gfx103X_1103_venv .gfx103X_1103_venvScriptsactivate

Устанавливаем собранные пакеты PyTorch:

# Rocm pip install —find-links D:bTheRockbuild_gfx103X_1103packagesdist rocm[libraries,devel] # Затем PyTorch pip install «C:DevPytorchRocm7gfx1103_103X_torch2.10torch-2.10.0a0+rocmsdk20251118-cp312-cp312-win_amd64.whl» «C:DevPytorchRocm7gfx1103_103X_torch2.10torchaudio-2.10.0a0+rocmsdk20251118-cp312-cp312-win_amd64.whl» «C:DevPytorchRocm7gfx1103_103X_torch2.10torchvision-0.25.0a0+rocmsdk20251118-cp312-cp312-win_amd64.whl»

Обратите внимание, PyTorch нужно устанавливать напрямую, указывая путь к whl-файлам.
Устанавливаем зависимости:

pip install -r .requirements.txt

Запускаем ComfyUI, для начала пробуем ничего не улучшать, только указываем, на какой GPU будем работать:

#Для ускорения первой генерации $env:MIOPEN_FIND_MODE=5 # eGPU $env:HIP_VISIBLE_DEVICES  = «1» python .main.py —normalvram # iGPU $env:HIP_VISIBLE_DEVICES  = «0» python .main.py —normalvram

В SD 1.5 512×512 У меня получилось 7-9 it/s на eGPU и 1.65 it/s на iGPU.
В FLUX-GGUF У меня получилось 4.8 s/it на eGPU и it/s на 22 s/it iGPU.

WAN 2.1 GGUF тоже работает, по скорости ~ 15 минут уходит на генерацию видео: 33 кадра 640х480, с использованием teacache.

6ccbba81c96f1b0d932de95dbb9e2776

Заключение

Работа над ROCm 7 все еще продолжается, и пока совершенно не ясно, какие архитектуры и в какой комбинации будут поддерживаться в релизной версии. Также не совсем ясно, когда этот релиз случится, поэтому надеюсь, что тем, кому нетерпится поработать с ROCm 7 в Windows, эта статья будет полезна.

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

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

В следующей статье я расскажу, как собрать llama.cpp с поддержкой ROCm 7 и Vulkan в Windows.

Всем спасибо за прочтение!

Решение проблем

Сборка зависает

Если процесс сборки зависает на сообщении вроде [hipBLAS SUCCEEDED in 185 seconds] или [10/22] Populate artifact miopen это может быть связано с тем, что во время сборки могут возникать ошибки при скачивании файлов для тестов. Если это произошло:

  1. Дождитесь завершения всех процессов clang.

  2. Нажмите CTRL+C.

  3. Завершите все висящие процессы cmake и python.

  4. Проверьте интернет-соединение с sparse-files.engr.tamu.edu и sqlite.org.

  5. Запустите сборку снова. Она должна продолжиться с места остановки.

Ошибка Python was not found

Переходим в директорию с TheRock и находим строки:

if (NOT python) set(python «python3») # default for linux endif()

Заменяем их на:

if (NOT python) set(python «python») endif()

Если в Windows будут такие ошибки:

[hipBLAS] Python was not found; run without arguments to install from [hipBLAS] Python was not found; run without arguments to install from the Microsoft Store… the Microsoft Store… Экспериментальные фичи

RocWMMA на gfx1103

Официально поддержки RocWMMA для gfx1103 пока нет, но есть открытый PR, где она инициализирована.

  1. Скачайте архив с этим PR и замените файлы в директории TheRockrocm-librariesprojectsrocwmmalibraryincluderocwmma на новые.

  2. В файле cmaketherock_amdgpu_targets.cmake найдите секцию для gfx1103 и закомментируйте rocWMMA:

    therock_add_amdgpu_target(gfx1103 «AMD Radeon 780M Laptop iGPU» FAMILY igpu-all gfx110X-all gfx110X-igpu EXCLUDE_TARGET_PROJECTS hipSPARSELt # https://github.com/ROCm/TheRock/issues/2042 rccl # https://github.com/ROCm/TheRock/issues/150 # rocWMMA # https://github.com/ROCm/TheRock/issues/1944 )

Подробнее о PR: https://github.com/ROCm/rocm-libraries/pull/2301

Сборка с поддержкой AOTriton

Собрать под windows у меня так и не получилось, но вы можете попытать счасте выполнив следующие шаги:
Для сборки с поддержкой AOTriton берем этот commit TheRock

git checkout -q —detach eb8f187ff47eb6af9cd5aaa0b8d9a04b06b12796

Выполняем все выше описаное в статье, и добавляем аргумент —enable-pytorch-flash-attention-windows к сборке PyTorch

python build_prod_wheels.py build —pytorch-dir D:/b/2.9/pytorch —pytorch-audio-dir D:/b/2.9/audio —pytorch-vision-dir D:/b/2.9/vision —enable-pytorch-flash-attention-windows —output-dir C:/dev/PytorchRocm7/out —clean

Список архитектур с поддержкой AOTriton:
gfx90a_mod0,gfx942_mod0,gfx950_mod0,gfx1100_mod0,gfx1101_mod0,gfx1102_mod0,gfx1151_mod0,gfx1150_mod0,gfx1201_mod0,gfx1200_mod0,gfx1250_mod0
Если ни один из таргетов, для которых собран ROCm, не в списке, то при сборке будет ошибка.

Скачиваем PyTorch 2.10

python pytorch_torch_repo.py checkout —repo-hashtag main —patchset main —checkout-dir D:/b/pytorch python pytorch_audio_repo.py checkout —repo-hashtag main —patchset main —checkout-dir D:/b/audio python pytorch_vision_repo.py checkout —repo-hashtag main —patchset main —checkout-dir D:/b/vision

PyTorch пакеты для GPU, которые приведены в пример в этой статье, вы можете скачать по этой ссылке.

Источник: habr.com

✅ Найденные теги: новости, Собираем

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

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

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых