Зачем этот бенчмарк? Потому что все остальные врут
Год назад запустить LLM на AMD было квестом для мазохистов. Сегодня - рутина. Но между "запускается" и "летает" пропасть, которую заполняют маркетинговые обещания и откровенный бред на форумах.
Я взял топовую AMD 7900 XTX, запихнул её в eGPU-бокс с Thunderbolt 3 и устроил ей адскую неделю с восемью разными моделями. Цель простая: понять, на что реально способна эта связка в 2025 году и стоит ли она ваших денег.
Почему это важно? Потому что если вы собираетесь покупать железо для локальных моделей, вам нужны не теоретические FLOPS, а конкретные цифры: сколько токенов в секунду, сколько VRAM съедает контекст, и главное - где упрётся ваш потолок.
Главный миф, который я разрушу сегодня: eGPU через Thunderbolt 3 не "убивает" производительность для LLM. Он её трансформирует. И не всегда в худшую сторону.
Тестовая установка: железо, которое плакало
Прежде чем показывать цифры, раскрою карты. Без этого любой бенчмарк - просто красивые графики.
1 Железный зоопарк
- Видеокарта: AMD Radeon RX 7900 XTX (Navi 31, 24 ГБ GDDR6)
- eGPU корпус: Razer Core X Chroma (Thunderbolt 3, 650W)
- Хост-ноутбук: Dell XPS 15 9520 (i7-12700H, 32 ГБ DDR5)
- Система: Ubuntu 24.04 LTS, ядро 6.8
2 Софтовый стек (где всё и сломалось)
- ROCm: 6.2.0 (да, пришлось собирать из исходников, о чем я писал в гайде по разгону 6700XT)
- llama.cpp: b4068 (самая свежая на момент тестов)
- vLLM: 0.6.2 с патчами для ROCm
- Драйверы: AMDGPU 6.8 с поддержкой SR-IOV (это важно)
--offload-arch=gfx1100 и патчить несколько файлов. Если не готовы к этому - лучше смотрите в сторону NVIDIA.Методология: как мы мучили видеокарту
Я ненавижу синтетические тесты. Поэтому все замеры - на реальных промптах, с реальными контекстами.
| Модель | Размер | Квант | Контекст |
|---|---|---|---|
| Llama 3.1 8B | 8.1B | Q4_K_M | 8192 |
| Qwen 2.5 7B | 7.7B | Q4_K_M | 32768 |
| DeepSeek-V2 16B | 16.4B | Q4_K_M | 128000 |
| Mixtral 8x7B | 46.7B | IQ4_XS | 32768 |
| Llama 3.1 70B | 70.4B | Q3_K_M | 8192 |
Каждый тест - 10 итераций, усреднение результатов. Измеряем:
- Tokens/s при генерации: стабильная скорость после прогрева
- VRAM usage: пиковое потребление памяти
- Prefill time: время обработки промпта (где eGPU болит сильнее всего)
- Первые 10 токенов: задержка до начала генерации
Цифры, которые вас удивят (или разочаруют)
Вот они - результаты, ради которых всё это затевалось.
llama.cpp: старый добрый солдат
Команда для теста выглядела так:
./llama-cli -m models/llama-3.1-8b-Q4_K_M.gguf \
-p "Расскажи подробно о квантовой запутанности" \
-n 512 -c 8192 -ngl 99 -t 8 \
--gpu-layers 100 --no-mmap
| Модель | Tokens/s | VRAM | Prefill |
|---|---|---|---|
| Llama 3.1 8B | 48.7 | 5.2 ГБ | 1.2 с |
| Qwen 2.5 7B | 52.1 | 4.8 ГБ | 3.8 с |
| DeepSeek-V2 16B | 28.3 | 9.1 ГБ | 6.5 с |
| Mixtral 8x7B | 14.2 | 18.7 ГБ | 12.4 с |
| Llama 3.1 70B | 5.8 | 23.1 ГБ | 18.9 с |
Что сразу бросается в глаза? Prefill time для моделей с большим контекстом. Это и есть цена Thunderbolt 3 - загрузка начальных данных в GPU занимает вечность.
vLLM: новый король с оговорками
vLLM на ROCm - это отдельная история. Сначала неделя настройки, зато потом:
python -m vllm.entrypoints.api_server \
--model Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4 \
--gpu-memory-utilization 0.9 \
--max-model-len 32768 \
--port 8000
| Модель | Tokens/s | VRAM | Prefill |
|---|---|---|---|
| Llama 3.1 8B | 62.4 | 6.1 ГБ | 0.9 с |
| Qwen 2.5 7B | 67.8 | 5.7 ГБ | 1.1 с |
| DeepSeek-V2 16B | 31.2 | 10.3 ГБ | 2.4 с |
Важное ограничение: vLLM на ROCm не поддерживает Mixtral и Llama 70B в моей конфигурации. Ошибка HIP_ERROR_OUT_OF_MEMORY даже при 18 ГБ свободной VRAM. Баг известный, фикса нет.
Где собака зарыта: анализ аномалий
Цифры - это хорошо. Но что за ними стоит?
Миф о пропускной способности Thunderbolt
Все говорят: "40 Гбит/с - этого мало!". На практике bottleneck не там.
Считаем: модель 8B в Q4_K_M ~4.5 ГБ. Загрузить её по Thunderbolt 3 (реальные 22 Гбит/с = 2.75 ГБ/с) займет ~1.6 секунд. В моих тестах prefill 1.2 секунды. Значит, загрузка модели - не главная проблема.
Проблема в другом: маленькие пакеты данных. LLM работают с тысячами мелких операций, и каждая требует синхронизации CPU-GPU. Это как везти грузовик песка по шоссе, высыпая по зернышку на каждом километре.
ROCm 6.2: два шага вперед, один назад
Новая версия ROCm принесла поддержку большего количества карт, но:
- Установка через apt сломана для 7900 XTX
- Нет официальных пакетов для Ubuntu 24.04
- Компиляция из исходников занимает 4 часа и требует 32 ГБ ОЗУ
- Работает стабильнее 6.1, но не для всех моделей
Если у вас нет времени на это, посмотрите в сторону Vulkan-бэкенда в llama.cpp. Он проще, но медленнее на 15-20%.
Практические выводы (которые вам пригодятся)
Теперь самое важное - что делать с этой информацией.
3 Если вы покупаете железо прямо сейчас
- 7900 XTX в eGPU: берите, если готовы к танцам с бубном. Для 7B-13B моделей - отлично. Для 70B - мучительно медленно.
- Thunderbolt 3 vs 4: разницы почти нет. Главное - качество кабеля и чипсет в боксе.
- VRAM 24 ГБ: хватает для Mixtral 8x7B в IQ4_XS с контекстом 32K. Это потолок.
4 Настройки, которые реально ускоряют
Для llama.cpp:
# Вот это работает
--gpu-layers 100 --no-mmap --tensor-split 100:0
# А это нет (несмотря на советы в интернетах)
--flash-attn --no-mmap-prefetch --mlock
Для vLLM в ~/.bashrc:
export HCC_AMDGPU_TARGET=gfx1100
export HSA_OVERRIDE_GFX_VERSION=11.0.0
export PYTORCH_HIP_ALLOC_CONF=max_split_size_mb:512
Ошибки, которые вы совершите (я их уже совершил за вас)
Ошибка 1: Пытаться запустить vLLM без патча для HIP. Он упадет с ошибкой hipErrorNoBinaryForGpu. Решение - собрать torch из исходников с флагом USE_ROCM=1.
Ошибка 2: Использовать --tensor-split в llama.cpp для eGPU. Это для нескольких карт. На одной карте вы получите падение производительности на 30%.
Ошибка 3: Доверять rocminfo. Он покажет, что карта поддерживает ROCm, но vLLM всё равно не запустится. Нужно проверять через python -c "import torch; print(torch.cuda.is_available())".
Что будет дальше? (Спойлер: ничего хорошего)
Я общался с разработчиками ROCm. Ситуация с поддержкой потребительских карт не улучшится. AMD фокусируется на инсталляциях для дата-центров, где стоят их MI300X.
Это значит, что через год запускать LLM на 8900 XTX будет так же больно, как сейчас на 7900 XTX. Патчи, костыли, сборки из исходников.
Но есть и хорошая новость: сообщество не спит. Уже есть форки llama.cpp с оптимизациями специально для RDNA 3. И Vulkan-бэкенд развивается быстрее ROCm.
Мой прогноз: к концу 2025 года лучший способ запускать LLM на AMD - это Vulkan через кастомные сборки llama.cpp. ROCm останется удел энтузиастов с железными нервами.
А теперь главный совет, который вы не найдёте в других гайдах: перед покупкой 7900 XTX для LLM, возьмите б/у RTX 3090 за те же деньги. 24 ГБ VRAM, CUDA работает из коробки, и в сборках на несколько карт она масштабируется лучше.
Но если вы, как и я, любите сложные задачи и ненавидите монополию NVIDIA - добро пожаловать в клуб. У нас тут больно, медленно, но очень интересно.