Запуск локальных LLM на видеокартах AMD долгое время считался «темной материей» экосистемы. В то время как NVIDIA предлагает готовый путь через CUDA, владельцы карт Radeon (и процессоров Ryzen с встроенной графикой) вынуждены использовать альтернативные бэкенды. Основной инструмент для этого — llama.cpp с поддержкой ROCm (для дискретных GPU AMD) и Vulkan. Разберем, как собрать проект, какие флаги использовать и чего ждать от производительности.
01Установка и базовая сборка
Первый шаг — получение исходного кода. Проект llama.cpp активно развивается, поэтому актуальная версия всегда доступна в репозитории. Клонирование и переход в директорию проекта выполняются стандартными командами:
git clone https://github.com/ggml-org/llama.cpp
cd llama.cppДля компиляции используется система сборки CMake. Базовая команда для создания директории сборки и запуска процесса выглядит так:
cmake -B build
cmake --build build --config ReleaseОбратите внимание: по умолчанию собирается версия с поддержкой CPU. Для ускорения процесса добавляйте флаг -j (например, для множества потоков) или используйте генератор Ninja. Для кэширования промежуточных результатов настоятельно рекомендуется установить ccache.
02Бэкенды для AMD: ROCm и Vulkan
В отличие от NVIDIA, где CUDA является стандартом де-факто, у AMD есть два основных пути ускорения инференса в llama.cpp:
- HIP (ROCm): Нативный бэкенд для дискретных видеокарт AMD Radeon. Требует установленной среды ROCm. Это наиболее производительный вариант для десктопных и серверных GPU AMD.
- Vulkan: Кроссплатформенный графический API, который также отлично работает с AMD GPU. Часто проще в установке, так как не требует сложной настройки драйверов ROCm на некоторых дистрибутивах Linux, но может уступать HIP в эффективности на тяжелых нагрузках.
03Оптимизация производительности: BLAS и CPU
Даже если вы используете GPU, процессор играет ключевую роль при обработке промптов (prompt processing). В llama.cpp доступна интеграция с библиотеками BLAS (Basic Linear Algebra Subprograms). Использование OpenBLAS или Accelerate Framework может заметно ускорить обработку больших батчей, хотя на скорость генерации (generation) это влияет меньше.
Пример сборки с OpenBLAS:
cmake -B build -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
cmake --build build --config ReleaseДля процессоров также доступна опция GGML_NATIVE=ON, которая включает использование современных инструкций, что критично для скорости CPU-инференса.
GGML_NATIVE=ON и использованием OpenBLAS позволит современным процессорам выдавать вполне приемлемые скорости для моделей среднего размера в квантованном виде.04Память VRAM и выбор моделей
Главный ограничитель при запуске LLM — объем видеопамяти. llama.cpp использует квантование (GGUF формат), что позволяет уместить большие модели в меньший объем VRAM. Примерные требования для инференса (с учетом контекста):
- Малые модели: Требуют минимального объема VRAM. Подойдут даже старые карты или современные решения начального уровня.
- Средние модели: Требуют среднего объема VRAM. Такие карты часто рассматриваются как отличный бюджетный вариант.
- Большие модели: Требуют значительного объема VRAM. Здесь вступают в игру карты с большим объемом памяти или профессиональные решения. Для самых больших моделей часто требуется несколько GPU или использование CPU-оффлоадинга.
Важно помнить: если модель не помещается в VRAM целиком, llama.cpp автоматически перенесет часть слоев на CPU (RAM). Это работает, но скорость падает в разы.
05Типичные ошибки и совместимость
При сборке под AMD часто возникают проблемы с путями к библиотекам ROCm. Убедитесь, что переменные окружения HIP_PATH или ROCM_PATH корректно прописаны, если CMake не находит их автоматически. Также, если вы используете Vulkan, убедитесь, что у вас установлены последние драйверы AMD Adrenalin, так как они включают необходимые компоненты для работы Vulkan API.
-DGGML_CUDA=ON работает только для NVIDIA. Для AMD используйте -DGGML_HIP=ON (для ROCm) или -DGGML_VULKAN=ON. Смешивание флагов приведет к ошибкам компиляции.06Какое железо кому подойдёт
Выбор зависит от бюджета и задач:
- Бюджетный старт: Б/у карты или новые решения начального уровня. Идеально для моделей малого размера. Используйте Vulkan, так как ROCm на старых картах может требовать танцев с бубном.
- Оптимальный баланс: Карты со средним объемом памяти. Отличный выбор для моделей среднего размера.
Источник: источник (тест/офиц. документация) ↗
