Запуск локальных LLM на видеокартах AMD долгое время считался «темной материей» экосистемы. В то время как NVIDIA предлагает стандартизированный путь через CUDA, владельцы Radeon вынуждены ориентироваться на более сложные бэкенды: ROCm (HIP), Vulkan или OpenCL. Проект llama.cpp остается золотым стандартом для инференса, позволяя запускать модели на любом доступном железе, но требует внимательности при сборке. Разберем, как правильно собрать бинарник, какие флаги использовать и чего ждать от производительности.
01Базовая сборка и структура проекта
Основой является библиотека llama с C-style интерфейсом, но для пользователя важнее примеры и инструменты, включая HTTP-сервер, совместимый с OpenAI. Начать нужно с клонирования репозитория:
git clone https://github.com/ggml-org/llama.cpp
cd llama.cppДля компиляции используется CMake. Базовая сборка под CPU выглядит так:
cmake -B build
cmake --build build --config ReleaseДля ускорения компиляции рекомендуется использовать параллельные Jobs (например, -j 8) или генератор Ninja. Также полезно установить ccache для кэширования промежуточных файлов.
02GPU-бэкенды: ROCm, Vulkan и CUDA
Ключевой вопрос для владельцев AMD — как задействовать GPU. В документации llama.cpp поддерживаются несколько путей:
- CUDA: Нативная поддержка NVIDIA. Флаг
-DGGML_CUDA=ON. Требует установленного CUDA Toolkit. - HIP (ROCm): Аналог CUDA для AMD. В документации упоминается как
HIP. Позволяет использовать видеокарты AMD серии Radeon RX и профессиональные Instinct. - Vulkan: Кроссплатформенный графический API, работающий на AMD, NVIDIA и Intel. Хорошая альтернатива, если ROCm не установлен или работает нестабильно.
- Metal: Только для Apple Silicon (M1/M2/M3). Включен по умолчанию на macOS.
Для сборки с поддержкой GPU (на примере CUDA, как эталона производительности) используется команда:
cmake -B build -DGGML_CUDA=ON
cmake --build build --config ReleaseПри сборке для AMD (HIP/Vulkan) логика аналогична, но требуется настройка окружения ROCm или драйверов Vulkan. Важно отметить: по умолчанию llama.cpp собирает бинарник под конкретное железо. Для создания универсального бинарника, работающего на разных GPU, нужно отключить нативную оптимизацию:
cmake -B build -DGGML_CUDA=ON -DGGML_NATIVE=OFF03Производительность и VRAM: реалии инференса
В отличие от обучения, инференс в llama.cpp сильно зависит от размера VRAM и скорости памяти. Производительность варьируется в зависимости от бэкенда и архитектуры железа, но в целом GPU-решения обеспечивают заметно более высокую скорость по сравнению с CPU. Использование моделей различных размеров в квантовании Q4_K_M позволяет подобрать конфигурацию под доступные ресурсы:
| Железо (VRAM) | Модель (пример) | Ожидаемая скорость | Примечание |
|---|---|---|---|
| Высокопроизводительные GPU (24GB) | Модель среднего размера (Q4) | Высокая | Полностью в VRAM, макс. скорость |
| AMD Radeon (24GB) | Модель среднего размера (Q4) | Хорошая* | *Зависит от бэкенда (Vulkan/ROCm) |
| Apple M2/M3 Max (Unified Memory) | Модель большого размера (Q4) | Средняя | Unified Memory, медленно, но возможно |
| GPU (24GB) + CPU | Модель большого размера (Q4) | Низкая | Часть слоев на CPU, узкое место PCIe |
Обратите внимание: использование BLAS (OpenBLAS, Intel oneMKL) ускоряет обработку промпта (batch size > 32), но не влияет на скорость генерации токенов. Генерация — это узкое место, зависящее от пропускной способности памяти GPU.
04Типичные ошибки и настройки
Одна из частых проблем — некорректное определение вычислительной способности GPU или отсутствие прав доступа к устройствам. Если nvcc (или аналог для AMD) не видит карту, проверьте переменные окружения.
Для отладки и тестирования полезно использовать режим Debug:
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build buildТакже не забывайте про флаги отключения GPU, если нужно протестировать CPU-бэкенд: --n-gpu-layers 0.
05Какое железо кому подойдёт
Бюджетный сегмент (до 30-40 тыс. руб.)
Вариант: Б/у NVIDIA RTX 2080 Ti (22GB) или новая AMD RX 6700 XT (12GB).
Реальность: 12GB VRAM у AMD хватит только на модели малого размера в Q4/Q5. Для моделей среднего размера придется использовать CPU-слои, что резко снизит скорость. NVIDIA 22GB позволяет запускать модели среднего размера целиком в памяти, что дает более плавный опыт.
Средний сегмент
Источник: источник (тест/офиц. документация) ↗
