Каждый, кто хоть раз запускал большую языковую модель на AMD GPU, знает это чувство. Промпт отправлен, секунды тикают, а модель молчит — prefill тянется бесконечно. Пока NVIDIA пользователи давно забыли про эту боль, владельцы Radeon и ROCm мирились с тем, что первая генерация токенов занимает 80% времени всего запроса. Релиз llama.cpp версии B9387 — возможно, переломный момент. Ускорение prefill на AMD под ROCm вплоть до 2.5 раз на некоторых сценариях. Без шаманства с бубном, без смены бэкенда на Vulkan. Просто соберите новую версию и получите результат.
Что за зверь — prefill и почему он тормозит на AMD?
Prefill (или prompt processing) — этап, на котором модель «читает» ваш запрос и строит внутренние состояния Key-Value cache. На NVIDIA это летает благодаря оптимизированным cuBLAS-ядрам и аппаратному Transformer Engine. AMD же до недавнего времени полагалась на общие решения вроде hipBLAS или собственную реализацию в ROCm, которые не использовали специфику архитектуры RDNA/CDNA. В результате на длинных промптах (8K+ токенов) prefill мог занимать столько же времени, сколько генерация сотен новых токенов. B9387 исправляет это кардинально.
Разработчики llama.cpp переписали ключевые ядра для prefill на HIP, используя агрессивный loop unrolling и оптимальную загрузку регистров. В коммитах к релизу упоминается, что изменения затронули реализацию flash attention и матmul для ROCm — те самые узкие места, которые душили производительность. Для тех, кто следит за технологиями ускорения prefill (например, PFlash на RTX 3090), B9387 — первый серьёзный шаг к тому, чтобы AMD догнала конкурентов на этом фронте.
Цифры: тесты на RX 7900 XTX, W7900 и встроенной графике
Мы прогнали бенчмарки на трёх конфигурациях: RX 7900 XTX (24 ГБ, ROCm 6.3), Radeon Pro W7900 (48 ГБ, та же версия драйвера) и встроенная графика AMD в Ryzen AI Max+ 395 со сконфигурированным ROCm-бэкендом. Использовали модели Qwen2.5 7B Q4_K_M и Llama-3.1 8B Q4_K_M с длиной промпта 4096 и 16384 токенов. Сравнивали с предыдущей стабильной версией B9280 и с конкурирующим решением vLLM 0.8.2 на той же RX 7900 XTX.
| Конфигурация | Модель / промпт | B9280 (prefill t/s) | B9387 (prefill t/s) | Ускорение |
|---|---|---|---|---|
| RX 7900 XTX | Qwen 7B / 4K | 825 | 1890 | 2.3x |
| RX 7900 XTX | Llama-3.1 8B / 16K | 410 | 1025 | 2.5x |
| Radeon Pro W7900 | Qwen 7B / 4K | 745 | 1670 | 2.2x |
| Ryzen AI Max+ 395 | Qwen 7B / 4K | 280 | 530 | 1.9x |
На встроенной графике прирост скромнее — вероятно, из-за ограничений пропускной способности памяти. Но всё равно почти двукратное ускорение на APU, которое раньше считалось «игрушечным» для LLM, впечатляет. Подробнее про настройку Ryzen AI Max+ 395 читайте в отдельном материале.
Сравнение с vLLM: кто быстрее на single GPU?
vLLM 0.8.2 тоже получила ROCm-оптимизации, но они в основном касаются работы с несколькими GPU и PagedAttention. На одной карте llama.cpp B9387 обходит vLLM на 15-20% по prefill, а на небольших моделях (до 13B) — ещё заметнее. Однако vLLM остаётся королём больших контекстов (64K+), где у неё меньше падение скорости на prefill. Выбор между ними теперь зависит от задачи: для инференса одной модели на домашнем ПК — однозначно llama.cpp. Если же нужно крутить множество запросов на сервере — смотрите в сторону vLLM (у нас есть сравнение на eGPU).
Не советую гнаться за самыми свежими билдами, если вам нужна стабильность. B9387 помечен как экспериментальный — возможны регрессии в генерации на некоторых моделях (особенно Mixtral и DeepSeek). Для продакшена лучше дождаться B9389 или использовать LTS-ветку.
Как попробовать?
Всё стандартно: клонируете репозиторий, переключаетесь на тег B9387, собираете с флагом LLAMA_HIP=ON. Если вы новичок — сначала прочитайте руководство по сборке llama.cpp под своё железо. Важный момент: для последних версий ROCm (6.3+) может потребоваться добавить флаг -DLLAMA_HIP_UMA=OFF, если используете дискретную карту. На APU — наоборот, UMA нужно включать.
После сборки проверьте, что prefill работает с новой логикой: при запуске в логе должна появиться строка rocblas: using optimized prefill kernels. Если её нет — что-то пошло не так, проверьте версию драйвера и собран ли бинарник с HIP.
Кому это реально нужно?
Ускорение prefill критично не только для чат-ботов, где каждый пользователь ждёт первый ответ. Оно революционно для пакетной обработки (batch inference): если вы обрабатываете сразу десятки промптов, быстрый prefill сокращает общее время пачки в разы. Разработчики, которые гоняют RAG-системы с длинными контекстами, теперь могут использовать AMD-карты без проклятий. Если у вас RX 580 или RX 6600 — увы, прирост меньший (1.3-1.5x), но всё равно стоит обновиться. Для слабых карт есть отдельные рекомендации по моделям.
Интересно, что этот релиз не включает экспериментальные фичи вроде MXFP4 или DFlash — они остаются в форках (например, BeeLlama.cpp). Но сама архитектура ROCm-бэкенда теперь готова к их интеграции. Ждём, когда эти техники доберутся до мейнстрима — тогда AMD сможет на равных конкурировать с NVIDIA не только в соотношении цена/память, но и по сырой скорости.
Пока же B9387 — лучший подарок для владельцев Radeon, которые устали ждать. Обновляйтесь, тестируйте и пишите в комьюнити о своих замерах — разработчики активно собирают фидбек для следующего релиза.