Вопрос запуска больших языковых моделей (LLM) на видеокартах AMD долгое время оставался «серой зоной» для энтузиастов. В то время как NVIDIA с CUDA стала стандартом де-факто, владельцы Radeon вынуждены были довольствоваться медленным CPU-инференсом или сложными обходными путями. Однако экосистема llama.cpp активно развивает поддержку AMD через два основных бэкенда: HIP (ROCm) для Linux и Vulkan для кроссплатформенной совместимости. Разберем, что из этого работает «из коробки», как собрать проект и какие ограничения ждут пользователя.
01Подготовка: Клонирование и структура
Все манипуляции начинаются с получения исходного кода проекта llama.cpp. Это единый репозиторий, содержащий библиотеку llama и множество утилит, включая HTTP-сервер, совместимый с OpenAI API.
git clone https://github.com/ggml-org/llama.cpp
cd llama.cppДалее процесс сборки зависит от выбранного бэкенда. Важно понимать, что llama.cpp использует CMake, что позволяет гибко настраивать компиляцию под конкретное железо.
02HIP (ROCm): Нативная поддержка AMD на Linux
Для пользователей Linux, имеющих видеокарты AMD, основным путем является использование HIP — абстракции поверх ROCm. Это позволяет использовать GPU для вычислений с высокой эффективностью, аналогично CUDA на NVIDIA.
Однако, в отличие от CUDA, где драйверы часто устанавливаются «в лоб», ROCm требует внимательной настройки окружения. В документации проекта отмечается, что для некоторых дистрибутивов использование контейнеров может быть необходимым шагом, так как нативные пакеты ROCm могут отсутствовать или конфликтовать с системными библиотеками.
Для сборки с поддержкой HIP (ROCm) используется флаг -DGGML_HIP=ON. Команда сборки выглядит следующим образом:
cmake -B build -DGGML_HIP=ON
cmake --build build --config ReleaseЕсли вы используете кросс-компиляцию или хотите собрать бинарник, который будет работать на разных GPU AMD без перекомпиляции, рекомендуется отключить нативную оптимизацию под текущее железо:
cmake -B build -DGGML_HIP=ON -DGGML_NATIVE=OFF03Vulkan: Кроссплатформенная альтернатива
Если ROCm кажется слишком сложным в настройке или вы используете Windows/macOS/Linux без глубокой интеграции драйверов AMD, бэкенд Vulkan является отличной альтернативой. Vulkan позволяет использовать GPU для инференса LLM на практически любом современном оборудовании, поддерживающем этот графический API.
Сборка с поддержкой Vulkan требует наличия соответствующих заголовочных файлов и библиотек Vulkan SDK. Команда для сборки:
cmake -B build -DGGML_VULKAN=ON
cmake --build build --config ReleaseХотя Vulkan может уступать ROCm в чистой пропускной способности на некоторых сценариях, он обеспечивает стабильность и предсказуемость работы на разных ОС. Для пользователей, которые хотят просто «запустить модель» без глубокой отладки драйверов, это часто более практичный выбор.
04Сравнение с другими бэкендами
Для контекста, давайте посмотрим, как AMD-решения выглядят на фоне других опций:
- CUDA (NVIDIA): Флаг
-DGGML_CUDA=ON. Золотой стандарт. Лучшая производительность, самая широкая поддержка моделей и оптимизаций. Если у вас есть карта NVIDIA, используйте её. - Metal (Apple): Включен по умолчанию на macOS. Использует унифицированную память Apple Silicon (M1/M2/M3). Отличный баланс производительности и энергоэффективности.
- CPU (BLAS): Если GPU нет или не подходит, можно ускорить CPU через BLAS (OpenBLAS, oneMKL). Это не даст скорости GPU, но значительно ускорит обработку промптов (batch size > 32).
05VRAM и выбор моделей
Объем видеопамяти (VRAM) — критический параметр. llama.cpp использует квантование (GGUF формат), что позволяет запускать большие модели на меньшем объеме памяти. Примерные требования для инференса:
- 7B-9B моделей (Q4_K_M): Заметно быстрее работают на картах с небольшим объемом VRAM. Подойдут даже карты начального уровня.
- 13B-14B моделей (Q4_K_M): Требуют среднего объема VRAM. Требуется RX 6700 XT/7700 XT или выше.
- 70B моделей (Q4_K_M): Требуют значительного объема VRAM. Здесь потребуются карты уровня RX 7900 XTX (24 ГБ) с использованием offload на CPU или несколько карт (если драйвер позволяет).
Важно: при нехватке VRAM llama.cpp автоматически перенесет часть слоев на CPU (RAM). Это замедлит инференс, но позволит запустить модель. Полное вытеснение слоев на GPU (--n-gpu-layers -1) дает максимальную скорость.
06Какое железо кому подойдёт
Выбор за
Источник: Официальная документация ↗
