Типичная история: два человека с картами Radeon одного поколения ставят одну и ту же программу. У одного модель летит на видеокарте, у второго ползёт со скоростью два токена в секунду, потому что молча считается на процессоре. Оба уверены, что «AMD не поддерживается», хотя первый только что доказал обратное.
Разница почти всегда в том, какой из трёх возможных бэкендов реально подхватился. Их действительно три, они выбираются автоматически и без предупреждения, и первое, что нужно уметь, — определять, какой из них работает у вас.
#Что понадобится
- Свежие драйверы. На Linux — актуальное ядро и стек
amdgpu; на Windows — драйвер последней версии. - Кодовое имя своей карты. Не маркетинговое («RX 6700 XT»), а архитектурное (
gfx1031). Именно по нему принимаются решения о поддержке. - Готовность собрать llama.cpp, если готовые сборки не подойдут. Шаг не обязательный, но именно он чаще всего спасает ситуацию.
Поддержка AMD в инструментах локального запуска меняется быстрее, чем любая другая часть этой темы. Всё ниже верно на момент написания; матрицу официально поддерживаемых карт обязательно сверяйте с текущей документацией ROCm, она пересматривается с каждым релизом.
#Шаг 1. Понять, какие бэкенды вообще есть
ROCm — вычислительный стек AMD, аналог CUDA. Самая высокая производительность, самый узкий список официально поддерживаемых карт и самая капризная установка. Основная платформа — Linux; поддержка Windows появилась позже и охватывает меньше моделей карт.
Vulkan — графический API, для которого в llama.cpp есть отдельный вычислительный бэкенд. Работает практически на любой карте со свежим драйвером, включая встроенную графику и старые поколения. Обычно медленнее ROCm, но разрыв меньше, чем принято думать, а завести его на порядок проще.
Откат на процессор — то, что происходит, когда не сработали первые два. Модель запускается, отвечает, но медленно. Никакой ошибки при этом не показывается, и именно поэтому проблему часто не замечают неделями.
#Шаг 2. Найти свою карту в таблице
Таблица показывает, на что рассчитывать по поколениям. Смотреть в ней надо не на «поддерживается или нет», а на то, какой столбец у вас непустой: если ROCm недоступен, это не приговор.
| Поколение | Примеры | ROCm (Linux) | ROCm (Windows) | Vulkan |
|---|---|---|---|---|
| Polaris (RX 400/500) | RX 580 | ✗ | ✗ | ✓ |
| Vega, Radeon VII | Vega 56/64 | только старые версии | ✗ | ✓ |
| RDNA1 (RX 5000) | RX 5700 XT | ✗ | ✗ | ✓ |
| RDNA2 старшие (gfx1030) | RX 6800, 6900 | ✓ | частично | ✓ |
| RDNA2 младшие (gfx1031/1032) | RX 6600, 6700 | через подмену версии | частично | ✓ |
| RDNA3 старшие (gfx1100) | RX 7900 XT/XTX | ✓ | ✓ | ✓ |
| RDNA3 младшие (gfx1101/1102) | RX 7700, 7800 | через подмену версии | частично | ✓ |
| Instinct (CDNA) | MI210, MI300 | ✓ | ✗ | не применимо |
| Встроенная графика APU | Radeon 780M | частично | ✗ | ✓ |
Вывод из таблицы: столбец Vulkan заполнен почти целиком. Если ваша задача — «чтобы работало на видеокарте», а не «выжать максимум», начинать стоит именно с него, а не с многочасовой установки вычислительного стека.
#Шаг 3. Диагностика: какой бэкенд работает прямо сейчас
Четыре проверки. Каждая следующая имеет смысл, только если предыдущая дала отрицательный ответ.
Проверка 1. Видит ли система карту как вычислительное устройство:
rocminfo | grep -i gfx
Строка вида gfx1030 или gfx1100 означает, что ROCm карту нашёл. Пустой вывод или отсутствие команды — стек не установлен либо карту не поддерживает.
Проверка 2. Что выбрал сам инструмент. В Ollama:
ollama ps
Колонка PROCESSOR показывает распределение. 100% GPU — всё хорошо. 100% CPU — карта не задействована, и это ваша проблема. Подробности выбора видны в журнале сервиса:
journalctl -u ollama -n 200 --no-pager | grep -iE "rocm|vulkan|cpu|gfx"
Проверка 3. Доступен ли Vulkan:
vulkaninfo --summary
Ваша карта должна быть в списке устройств. Если её нет — проблема в драйвере, а не в инструментах запуска моделей.
Проверка 4. Замер. Ощущение «медленно» ненадёжно, нужны числа:
llama-bench -m models/qwen2.5-7b-instruct-q4_k_m.gguf -ngl 99 -p 512 -n 128
Скорость генерации в единицах токенов в секунду на карте с 12–16 ГБ памяти означает, что модель почти наверняка считается процессором.
#Шаг 4. Заставить карту работать
Если карта архитектурно близка к поддерживаемой, ROCm можно убедить считать её таковой. Переменная окружения подменяет заявленную версию архитектуры:
HSA_OVERRIDE_GFX_VERSION=10.3.0 ollama serve
Значение 10.3.0 соответствует gfx1030 и годится для младших карт RDNA2; для младших RDNA3 используется 11.0.0. Способ неофициальный, работает не всегда — но именно он объясняет большинство историй «у соседа завелось». Для системного сервиса переменная задаётся через systemctl edit ollama строкой Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0".
Если ROCm не вариант — соберите llama.cpp с бэкендом Vulkan:
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config Release -j
./build/bin/llama-cli -m models/model-q4_k_m.gguf -ngl 99 -c 8192
Это работает на поколениях, о которых ROCm вообще не слышал.
Если карт несколько или есть встроенная графика, движок может выбрать не ту. Ограничьте видимость:
HIP_VISIBLE_DEVICES=0 ollama serve
GGML_VK_VISIBLE_DEVICES=0 ./build/bin/llama-cli -m model.gguf -ngl 99
#Проверка результата
Три критерия, все обязательны. Первый: в логе запуска модели указан ожидаемый бэкенд — ROCm или Vulkan, но не CPU. Второй: во время генерации загрузка видеокарты, видимая в rocm-smi, отлична от нуля. Третий: замеренная скорость на модели класса 7B в Q4_K_M на дискретной карте среднего уровня измеряется десятками токенов в секунду, а не единицами.
Если все три сходятся, настройка закончена. Если скорость всё равно кажется низкой, дальше идёт общая диагностика, описанная в материале о том, почему локальная модель тормозит.
#Что может пойти не так
rocminfo работает, а инструмент всё равно на процессоре. Инструмент собран без поддержки ROCm либо использует встроенную копию библиотек, не совпадающую с системной. Проверьте, что установлена сборка именно с ROCm.
После обновления драйвера всё сломалось. Версии вычислительного стека и драйвера ядра должны быть согласованы. Обновлять их стоит вместе, а не по отдельности.
Карта определяется, но модель падает с ошибкой памяти. Заявленный объём памяти карты и объём, доступный вычислениям, различаются — часть занята выводом изображения. Порядок сокращения расхода — в материале о том, что делать, если модель не влезает в память.
Встроенная графика APU видна, но работает медленнее процессора. Ожидаемо: она использует ту же оперативную память, а объём, который ей разрешено занять, ограничен настройкой в BIOS. Выигрыш от неё бывает в обработке запроса, но не в генерации.
Vulkan работает, но с зависаниями драйвера. Проверьте версию драйвера и уменьшите размер батча обработки промпта. Бэкенд развивается быстро, и конкретные проблемы часто закрываются очередным обновлением.
#Частые вопросы
#Стоит ли покупать AMD под локальные модели?
Если вы готовы разбираться и работаете на Linux — карты Radeon дают больше памяти за те же деньги, и это существенно. Если хочется «поставил и работает» — экосистема NVIDIA пока заметно спокойнее. Сравнение по критерию цены за гигабайт памяти — в разборе того, какую видеокарту взять под локальные LLM.
#Работает ли ROCm на Windows?
Работает, но список поддерживаемых карт там уже, а инструменты подтягивают поддержку с задержкой. Практичная альтернатива на Windows — бэкенд Vulkan: он заводится почти везде и не требует установки вычислительного стека.
#Насколько Vulkan медленнее ROCm?
Зависит от карты, модели и версии. Разрыв обычно есть, но он не кратный, а на младших картах бывает почти незаметным. Единственный корректный ответ — замерить оба варианта на своей связке и сравнить числа, а не мнения.
#Что означает HSA_OVERRIDE_GFX_VERSION?
Эта переменная заставляет ROCm считать вашу карту другой, архитектурно близкой и официально поддерживаемой. Приём неофициальный: он может работать идеально, а может давать неверные результаты вычислений. Если после включения модель начала выдавать бессвязный текст — дело именно в этом.
#Почему модель запустилась, но работает как на процессоре?
Потому что она и работает на процессоре: при недоступности бэкенда откат происходит молча, без сообщения об ошибке. Проверяется командой ollama ps или строкой о числе выгруженных слоёв в логе llama.cpp. Общая последовательность запуска описана в руководстве по запуску LLM локально.
#У меня Intel, а не AMD — эти советы подойдут?
Логика диагностики та же, но стек другой: у Intel своя линия инструментов и свой бэкенд. Порядок установки и ожидаемые скорости — в материале о запуске LLM на Intel Arc и встроенной графике.