Гайды

LLM на видеокартах AMD: ROCm Vulkan и реальность

Три разных бэкенда для Radeon — ROCm, Vulkan и молчаливый откат на процессор, — таблица поддержки по поколениям карт и порядок диагностики, объясняющий, почему у соседа заработало.

Типичная история: два человека с картами 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 и встроенной графике.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт