- BrainTools - https://www.braintools.ru -
В этой статье я поделюсь опытом [1] сборки еще не вышедшей на момент написания ROCm 7 [2] под свои GPU, даже если их нет в списке официально поддерживаемых архитектур. Затем покажу, как с собранным ROCm 7 собрать PyTorch [3]и запустить ComfyUI [4]. Для примера я буду собирать ROCm под RX 6800 [5] + Radeon 780m [6].
Я предполагаю, что читатель уже знает, что такое 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, но столкнулся с подводными камнями:
Драйверы периодически отваливались при использовании ROCm на встройке. Помогала только перезагрузка.
В 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 и требуется ли их специальная сборка, или можно обойтись готовыми сборками из репозиториев.
Определяем архитектуру (Navi 21, Phoenix …). Идем в GPU-Z или подобный инструмент и смотрим архитектуру.
Идем в исходники открытого драйвера https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/common/amd_family.c [8] и по своей архитектуре находим кодовое название, например для Phoenix это gfx1103, для Navi 21 это gfx1030.
После того как мы определились с кодовым названием наших GPU, идем по ссылкам ниже. Есть несколько источников готовых сборок ROCm:
Я брал отсюда: https://rocm.nightlies.amd.com/v2-staging/ [9]
Если вы нашли готовые сборки rocm_sdk и pytorch под свою архитектуру и версию ОС, то вам повезло: можете скачивать whl-пакеты и переходить к пункту “Установка ComfyUI с поддержкой ROCm“.
Для тех, кому нужен уже собранный дистрибутив ROCm (например, для сборки llama.cpp), а не Python-пакет, его можно найти по этой ссылке [13], дописав к ней имя нужного архива.
Если у вас 2 GPU (например, у меня одна gfx1103, а вторая gfx1030) и они из разных поколений, то готовых сборок с поддержкой обоих поколений вы на данный момент не найдете и остается только собирать все самим из исходников.
Есть ряд требований к системе, в которой осуществляется сборка:
Необходимо установить следующие компоненты:
chocolatey [14] – популярный менеджер пакетов. После него установите следующие пакеты.
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
У меня в добавок установлена 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)
Но я не уверен что это необходимо.
Для скачивания источников и сборки необходима поддержка symlink. По умолчанию создавать ссылки в Windows может только администратор. Можно включить эту возможность для непривилегированных пользователей в secpol.msc. Однако я собирал всё из-под админа.
Для 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
Проверьте интернет-соединение:
https://sqlite.org [17]
Если один из этих сайтов у вас не открывается, CMake завершится с ошибкой [18].
[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, затем включить его и запустить сборку заново — она продолжится с того места, где остановилась.
Как я понял изначально сборка затачивалась под 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
Обратите внимание [19], мы берем определенный коммит, именно на нем я проверял работоспособность и именно в нем исправили ошибку с определением моей GPU. Так как проект в разработке, то в нем что-то отваливается с определенной периодичностью — это нормально.
На данный момент ведется активная разработка, поэтому постоянно что-то отваливается и появляется новое. Например, в данной статье я использую коммит от 2024-11-06 (коммиты с 2024-11-06 вообще не определяли одну из моих карточек). В 2024-11-16 это пофиксили и добавили поддержку rocWMMA, который нужен для AOTriton и новой sageattention. Однако после сборки я обнаружил, что в ComfyUI на выходе я стал получать изображение шума. Так что тут только методом проб и ошибок.
Я сначала думал сделать форк, чтобы упростить вам жизнь, но потом понял, что могу что-то сломать. Быстрее так объяснить, что изменить и зачем, — так как патчить файлы мы будем уже после скачивания всех подпроектов и т.д.
Необходимо найти файлы:
TheRockrocm-librariesprojectsrocsparsecmakeClientMatrices.cmake
TheRockrocm-librariesprojectshipsparsecmakeClientMatrices.cmake
И закомментировать в них все строки. Тогда не будут скачиваться файлы тестов с сайта http://sparse-files.engr.tamu.edu [20].
Важно: Если сборка завершается ошибками, о которых я тут не упоминал, лучше выполнить сборку на проверенной конфигурации (gfx110X-dgpu) с минимальным набором компонентов и под учетной записью с правами администратора.
Во время сборки CPU будет загружен на максимум, длиться это будет часа 4, так что если у вас мини-ПК или ноутбук, советую отключить TurboBoost, чтобы избежать перегрева и троттлинга. При данной нагрузке TurboBoost только замедлит сборку.
В официальном репозитории довольно хорошо задокументирована сборка и различные тонкости. Основные статьи которые нам понадобятся:
Сборка в Windows [21]
README.md [22]
Сборка PyTorch [23] Главный параметр конфигурации это -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.
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
Деактивируем venv, переходим в external_build/pytorch и создаем новый venv
deactivate
cd external_build/pytorch
python -m venv .venv
..venvScriptsActivate
# укажите свой путь к 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 2.9, хотя с 2.10 у мня тоже получилось.
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 и создаем окружение:
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.

Работа над ROCm 7 все еще продолжается, и пока совершенно не ясно, какие архитектуры и в какой комбинации будут поддерживаться в релизной версии. Также не совсем ясно, когда этот релиз случится, поэтому надеюсь, что тем, кому нетерпится поработать с ROCm 7 в Windows, эта статья будет полезна.
Ниже я приведу ряд фич, реализовать которые у меня получилось частично, а так же опишу проблемы которые мне показались не очевидными.
Позже я выложу свои сборки на GitHub. Если кого интересуют какие либо экзотические сборки, например для нескольких поколений архитектур, пишите об этом в комментарии.
В следующей статье я расскажу, как собрать llama.cpp с поддержкой ROCm 7 и Vulkan в Windows.
Всем спасибо за прочтение!
Если процесс сборки зависает на сообщении вроде [hipBLAS SUCCEEDED in 185 seconds] или [10/22] Populate artifact miopen это может быть связано с тем, что во время сборки могут возникать ошибки при скачивании файлов для тестов. Если это произошло:
Дождитесь завершения всех процессов clang.
Нажмите CTRL+C.
Завершите все висящие процессы cmake и python.
Проверьте интернет-соединение с sparse-files.engr.tamu.edu [20] и sqlite.org [24].
Запустите сборку снова. Она должна продолжиться с места остановки.
Переходим в директорию с 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 пока нет, но есть открытый PR, где она инициализирована.
Скачайте архив с этим PR и замените файлы в директории TheRockrocm-librariesprojectsrocwmmalibraryincluderocwmma на новые.
В файле 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 [25]
Собрать под 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, не в списке, то при сборке будет ошибка.
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, которые приведены в пример в этой статье, вы можете скачать по этой ссылке. [26]
Автор: guinmoon
Источник [27]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/22153
URLs in this post:
[1] опытом: http://www.braintools.ru/article/6952
[2] ROCm 7: https://www.amd.com/en/products/software/rocm/whats-new.html
[3] PyTorch : https://pytorch.org/
[4] ComfyUI: https://github.com/comfyanonymous/ComfyUI
[5] RX 6800: https://www.techpowerup.com/gpu-specs/radeon-rx-6800.c3713
[6] 780m: https://www.techpowerup.com/gpu-specs/radeon-780m.c4020
[7] Мотивация: http://www.braintools.ru/article/9537
[8] https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/common/amd_family.c: https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/amd/common/amd_family.c
[9] https://rocm.nightlies.amd.com/v2-staging/: https://rocm.nightlies.amd.com/v2-staging/
[10] https://rocm.nightlies.amd.com/v2/: https://rocm.nightlies.amd.com/v2/
[11] https://rocm.devreleases.amd.com/v2: https://rocm.devreleases.amd.com/v2
[12] https://rocm.devreleases.amd.com/v2-staging: https://rocm.devreleases.amd.com/v2-staging
[13] его можно найти по этой ссылке: https://therock-nightly-tarball.s3.amazonaws.com/
[14] chocolatey: https://chocolatey.org/
[15] http://sparse-files.engr.tamu.edu: http://sparse-files.engr.tamu.edu/MM/SNAP/amazon0312.tar.gz
[16] https://files.pythonhosted.org: https://files.pythonhosted.org/
[17] https://sqlite.org: https://sqlite.org/
[18] ошибкой: http://www.braintools.ru/article/4192
[19] внимание: http://www.braintools.ru/article/7595
[20] http://sparse-files.engr.tamu.edu: http://sparse-files.engr.tamu.edu
[21] Сборка в Windows: https://github.com/ROCm/TheRock/blob/main/docs/development/windows_support.md
[22] README.md: http://README.md
[23] Сборка PyTorch: https://github.com/ROCm/TheRock/blob/main/external-builds/pytorch/README.md
[24] sqlite.org: http://sqlite.org
[25] https://github.com/ROCm/rocm-libraries/pull/2301: https://github.com/ROCm/rocm-libraries/pull/2301
[26] PyTorch пакеты для GPU, которые приведены в пример в этой статье, вы можете скачать по этой ссылке.: https://github.com/guinmoon/rocm7_builds
[27] Источник: https://habr.com/ru/articles/967998/?utm_source=habrahabr&utm_medium=rss&utm_campaign=967998
Нажмите здесь для печати.