Игорь Градов
Игорь Градов
7 мин
ai

Radeon для инференса нейросетей: почему TFLOPS без пропускной способности памяти не работают

Запускать большие языковые модели на видеокартах AMD Radeon можно не хуже, чем на Nvidia, если понимать, как устроен инференс (применение уже обученной модели для генерации ответов) и где именно возникают узкие места по памяти, вычислениям и задержке.

Radeon для инференса нейросетей: почему TFLOPS без пропускной способности памяти не работают
Почему это важно

Карты Radeon с высокими показателями TFLOPS (терафлопс, триллионов операций в секунду) всё чаще рассматривают для продакшен-инференса нейросетей, но без понимания двух режимов работы трансформера и роли KV-кэша даже мощное железо простаивает.

Инференс LLM (большой языковой модели) принципиально отличается от её обучения. При обучении главное, чтобы GPU считал быстро. При инференсе добавляется латентность, то есть задержка между отправкой промпта и появлением ответа. Именно латентность определяет, будет ли пользователь ждать пять минут или получит первый токен (минимальную единицу текста, слово или часть слова) за доли секунды. Ниже разберём по шагам, как настроить инференс на Radeon и не упереться в потолок производительности.

Что понадобится

  • Видеокарта AMD Radeon с достаточным объёмом видеопамяти (HBM или GDDR) под веса модели и KV-кэш
  • Установленный ROCm (открытый стек AMD для вычислений на GPU, аналог CUDA у Nvidia)
  • Фреймворк для инференса с поддержкой ROCm: vLLM, llama.cpp или аналог
  • Модель в формате, совместимом с выбранным фреймворком (GGUF, Safetensors)
  • Базовое понимание терминала Linux
  • Примерное время: от 30 минут на первый запуск до нескольких часов на тонкую настройку латентности

Как работает инференс и почему TFLOPS это ещё не всё

Прежде чем переходить к командам, нужно понять два режима, в которых трансформер (декодерная часть архитектуры, генерирующая текст) обрабатывает запрос. Без этого понимания оптимизировать нечего.

Режим Prefill. Модель берёт весь входной промпт (включая системный промпт) и обрабатывает все токены параллельно за один проход. Результат записывается в KV-кэш. По вычислительной нагрузке это похоже на обучение: GPU загружен плотно, и высокие TFLOPS карты Radeon здесь играют напрямую.

Режим Generation (Decode). После Prefill модель генерирует токены по одному. Берёт KV-кэш, сэмплирует (выбирает) следующий токен из распределения вероятностей, добавляет его в кэш, и так по кругу, пока не встретит токен конца последовательности или не достигнет лимита длины. Здесь GPU большую часть времени ждёт данные из памяти, а не считает. Именно поэтому «голые» TFLOPS обманчивы: карта с огромной пиковой производительностью может генерировать медленно, если пропускная способность памяти (memory bandwidth) низкая.

Что такое KV-кэш и почему он критичен?

Без кэширования модель при генерации каждого нового токена пересчитывала бы внимание (attention) для всех предыдущих токенов заново. Это даёт сложность O(n³) на блоке внимания при генерации n токенов.

KV-кэш решает проблему: модель сохраняет векторы Key и Value для каждого уже обработанного токена. Для нового токена достаточно вычислить его вектор Query и перемножить с сохранёнными Key и Value. Сложность падает до квадратичной.

На практике это значит: чем длиннее контекст, тем больше памяти съедает KV-кэш. На Radeon с 16 ГБ видеопамяти модель на 7 миллиардов параметров при контексте 8 тысяч токенов может упереться в память именно из-за кэша, а не из-за весов.

Пошаговая инструкция запуска инференса на Radeon

  1. Установите ROCm по официальной документации AMD для вашей версии Linux. Убедитесь, что команда rocminfo отображает вашу карту.
rocminfo | grep "Name:"
  1. Установите фреймворк для инференса. Для vLLM с поддержкой ROCm:
pip install vllm

Для llama.cpp с бэкендом ROCm соберите из исходников:

cmake -B build -DGGML_HIP=ON
cmake --build build --config Release
  1. Скачайте модель. Например, квантизированную (сжатую с потерей части точности ради экономии памяти) версию Llama 3 8B в формате GGUF:
huggingface-cli download TheBloke/Meta-Llama-3-8B-GGUF --local-dir ./models
  1. Запустите инференс и замерьте базовую латентность:
./build/bin/llama-cli -m ./models/meta-llama-3-8b.Q4_K_M.gguf -p "Объясни, что такое KV-кэш" -n 256 --gpu-layers 99

Параметр --gpu-layers 99 выгружает максимум слоёв на GPU. Если памяти не хватает, уменьшайте число.

  1. Оцените два ключевых показателя в выводе:
  2. prompt eval time (время обработки промпта, это и есть Prefill, влияет на TTFT)
  3. eval time (время генерации, показывает per-token latency, скорость выдачи каждого следующего токена)

  4. Настройте баланс TTFT и per-token latency под ваш сценарий (подробности ниже).

TTFT и per-token latency: какой параметр важнее?

Выбор зависит от сценария, и это напрямую влияет на то, как вы настраиваете инференс на Radeon.

  • Офлайн-генерация (модель создаёт текст, пользователь прочитает позже). Латентность почти не важна. Можно увеличивать размер батча (количество одновременно обрабатываемых запросов), чтобы максимально загрузить TFLOPS карты.

  • Чат-бот (пользователь ждёт ответ в реальном времени). TTFT (Time To First Token, время до первого токена) должен быть минимальным, иначе пользователь уйдёт. Per-token latency должна обеспечивать скорость генерации выше скорости чтения (примерно 4-6 токенов в секунду для комфортного восприятия).

  • Агентный сценарий (ИИ-агент, программа, которая сама принимает решения и выполняет действия). Критичны оба параметра: агент должен начать работу быстро и выполнять цепочку действий с максимальной скоростью.

На Radeon с высокими TFLOPS стадия Prefill обычно проходит быстро. Узкое место чаще всего именно в Generation, где карта упирается в пропускную способность памяти.

Арифметическая интенсивность: почему GPU простаивает при генерации?

В режиме Prefill для механизма внимания нужно:

  • прочитать тензоры Q, K, V из видеопамяти
  • выполнить два матричных умножения (Q на K, затем результат на V), каждое требует 2×B×T×S×D операций (B, размер батча; T, длина последовательности; D, размерность модели)
  • записать результат обратно

Когда батч и длина последовательности велики, вычислений много относительно объёма прочитанных данных. GPU занят расчётами, TFLOPS работают.

В режиме Generation обрабатывается один токен за шаг. Данных для чтения много (весь KV-кэш), а вычислений мало. GPU большую часть времени ждёт, пока данные придут из памяти. Это называют memory-bound состоянием (ограничение по памяти, а не по вычислениям).

Именно поэтому при выборе Radeon для инференса нейросетей TFLOPS важны для Prefill, а для генерации смотрите на пропускную способность памяти (ГБ/с).

Что делать с этим прямо сейчас, по ролям

Разработчику, разворачивающему LLM в продакшене. Замерьте TTFT и per-token latency отдельно. Если TTFT высокий, проблема в Prefill, увеличивайте параллелизм и проверяйте, что Flash Attention (техника эффективного вычисления внимания без записи промежуточных результатов в память) работает на вашей сборке ROCm. Если per-token latency высокий, проблема в memory bandwidth, используйте квантизацию (Q4, Q5) для уменьшения объёма KV-кэша.

Автору Дзена, который хочет запустить локальную модель. Radeon RX 7900 XTX с 24 ГБ памяти тянет квантизированные модели до 13 миллиардов параметров. Начните с llama.cpp и GGUF-моделей, это самый простой вход.

Предпринимателю в РФ. Карты AMD доступны в российской рознице, ROCm бесплатен и открыт. Для задач, где Nvidia недоступна или слишком дорога, Radeon с учётом TFLOPS на рубль может оказаться рациональным выбором. Но экосистема менее зрелая: готовьтесь к тому, что некоторые библиотеки потребуют ручной сборки.

Пример: замер латентности на Radeon

Запуск модели Llama 3 8B (квантизация Q4_K_M) на Radeon RX 7900 XTX через llama.cpp:

./llama-cli -m llama-3-8b.Q4_K_M.gguf -p "Напиши план статьи про нейросети" -n 128 --gpu-layers 99

Типичный вывод (значения зависят от конкретной системы):

prompt eval time = 245.12 ms / 12 tokens
eval time = 8420.50 ms / 128 tokens (65.78 ms per token)

Здесь TTFT около 245 мс (Prefill обработал 12 входных токенов), а per-token latency около 66 мс, что даёт примерно 15 токенов в секунду. Для чат-бота это комфортная скорость.

Частые ошибки
  • Путать TFLOPS с реальной скоростью генерации. Высокие терафлопсы ускоряют Prefill, но в режиме Generation узкое место почти всегда пропускная способность памяти. Не покупайте карту только по TFLOPS для инференса нейросетей.
  • Игнорировать размер KV-кэша. На длинных контекстах (32 тысячи токенов и больше) кэш может съесть больше памяти, чем сами веса модели. Считайте заранее: размер KV-кэша растёт линейно с длиной контекста и количеством слоёв.
  • Не проверять совместимость ROCm. Не все карты Radeon поддерживаются одинаково. Перед покупкой сверьтесь со списком поддерживаемых GPU на сайте AMD.
  • Запускать без квантизации. Модель в bf16 (формат хранения с 16-битной точностью) занимает вдвое больше памяти, чем в 8-битной квантизации, и вчетверо больше, чем в 4-битной. Для инференса потеря качества при Q4 на большинстве задач минимальна.
Совет редакции dzen.guru

Инференс на Radeon в 2025 году перестал быть экзотикой, но остаётся чуть более трудоёмким, чем на Nvidia. Главное, на что я обращаю внимание при оптимизации: не гонитесь за пиковыми TFLOPS в спецификациях. Посмотрите на пропускную способность памяти (memory bandwidth) и реальный объём VRAM. Для чат-бота TTFT ниже 500 мс и per-token latency ниже 100 мс обычно достаточно. Для ИИ-агентов, которые вызывают модель десятки раз за цепочку, каждая миллисекунда на токен умножается на количество вызовов.

Честная оговорка: экосистема ROCm развивается, но пока уступает CUDA по количеству готовых оптимизаций. Flash Attention на AMD работает, но не во всех фреймворках из коробки. Закладывайте время на отладку.

Хотите разобраться, как нейросети меняют работу с контентом?

В dzen.guru мы тестируем инструменты на практике и делимся результатами без маркетинговой обёртки.

Узнать больше

Правильная настройка инференса на Radeon начинается не с установки софта, а с ответа на вопрос: что именно вы делаете, чат, офлайн-генерацию или агентный пайплайн. От этого зависит, какой из двух показателей латентности оптимизировать, и только после этого TFLOPS, память и bandwidth встают на свои места.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

CRM без бэкенда: замеры на слабом Android показали цену полной приватности
ai

CRM без бэкенда: замеры на слабом Android показали цену полной приватности

Компания-разработчик (имя автора в источнике не названо) выложила в открытый доступ результаты создания мобильной CRM без бэкенда, которая слушает звонки…

6 мин
GigaChat 2 Max обошёл Claude Opus 5 на 16 п.п.: память на связях важнее «ума» модели
ai

GigaChat 2 Max обошёл Claude Opus 5 на 16 п.п.: память на связях важнее «ума» модели

Компания «Интеграм» опубликовала сравнительный замер семи языковых моделей на задаче технической поддержки и показала, что система памяти на типизированных…

6 мин
LLM-агенты на дешёвых моделях обходятся втрое дороже: почему цена за токен врёт
ai

LLM-агенты на дешёвых моделях обходятся втрое дороже: почему цена за токен врёт

mini или Haiku, тоже начинает с правильного шага. Но на втором шаге она теряет контекст. Она не помнит, что именно нашла на первом шаге, и начинает…

5 мин