Гайд по запуску llama.cpp и VLLM в консоли, и тест-сравнение на AI PRO R9700 и AMD Instinct MI100 32GB
llama.cpp и vLLM: два движка для разных задач
llama.cpp и vLLM решают единую задачу – запуск больших языковых моделей, но подходят к ней с противоположных сторон. Понимание этой разницы поможет не тратить время на инструмент, который не подходит под ваш сценарий.
Философия и архитектура
llama.cpp – это движок на C/C++, изначально созданный для запуска моделей на обычном железе: ноутбуках, десктопах, даже телефонах. Его главная идея – максимальная портативность и эффективность на ограниченных ресурсах. Модели загружаются в формате GGUF, который поддерживает агрессивное квантование от 2 до 8 бит и работает через memory mapping: файл модели отображается в память напрямую, без лишних копирований. llama.cpp умеет распределять слои между CPU и GPU, что позволяет запускать модели, которые не влезают в видеопамять целиком.
vLLM – это Python-фреймворк, спроектированный для серверного инференса с высокой нагрузкой. В его основе лежит PagedAttention – механизм, который управляет KV-кешем по аналогии с виртуальной памятью в операционных системах. Вместо того чтобы резервировать большие непрерывные куски видеопамяти под каждый запрос, vLLM выделяет её небольшими страницами и переиспользует их. Это сокращает потери памяти с 60-80% до менее чем 4% и позволяет обслуживать в разы больше запросов одновременно.
Установка и запуск llama.cpp
Пошаговая инструкция по установке Docker CE, загрузке ROCm-образа llama.cpp, скачиванию GGUF-моделей, запуску в CLI и серверном режиме, а также работе с локальным HTTP API.
llama.cpp + ROCm + Docker
В инструкции используется Docker-образ llama.cpp с ROCm-бэкендом, публикация которого доступна через Docker Hub. Такой вариант удобен для быстрого запуска на AMD GPU без ручной сборки.
Шаг 1. Установка Docker CE
llama.cpp ROCm Docker
Сначала нужно добавить репозиторий Docker, установить Docker CE и включить автозапуск сервиса.
# Добавить репозиторий Docker (если ещё не добавлен)sudo apt update sudo apt install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Установить Docker CEsudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Запуск и автозагрузкаsudo systemctl enable --now docker # Добавить текущего пользователя в группу docker sudo usermod -aG docker "$LOGNAME"
Проверка
docker --version
Шаг 2. Скачивание Docker-образа llama.cpp с ROCm
AMD публикует готовые Docker-образы llama.cpp с ROCm-бэкендом. Ниже пример загрузки подходящего образа.
docker pull rocm/llama.cpp:llama.cpp-b6652.amd0_rocm7.0.0_ubuntu24.04_full
Доступные теги можно смотреть на странице Docker Hub для образа rocm/llama.cpp.
| Суффикс тега | Содержимое | Когда использовать |
|---|---|---|
| _full | CLI + сервер + конвертер + квантизатор | Универсальный вариант |
| _server | Только HTTP-сервер | Если нужен только API |
| _light | Только CLI (main) | Минимальный размер |
Шаг 3. Скачивание GGUF-модели
GGUF — это формат моделей, оптимизированный для llama.cpp. Такие модели обычно ищут на Hugging Face с фильтром library=gguf.
3.1. Где искать модели
Популярные провайдеры GGUF: unsloth, bartowski, ggml-org, Qwen, meta-llama.
3.2. Какой квант выбрать
| Квант | Размер (7B) | Качество | Рекомендация |
|---|---|---|---|
| Q4_K_S | ~3.56 ГБ | Хороший баланс | Лучший компромисс размер/качество |
| Q4_K_M | ~3.80 ГБ | Чуть лучше Q4_K_S | Рекомендуется как дефолт |
| Q5_K_M | ~4.45 ГБ | Очень близко к FP16 | Если VRAM позволяет |
| Q6_K | ~5.15 ГБ | Почти без потерь | Для максимального качества |
| Q8_0 | ~6.70 ГБ | Практически FP16 | Если места не жалко |
3.3. Общий пример скачивания
# Создать папку под модельmkdir -p ~/models/<имя_модели> cd ~/models/<имя_модели>
# Скачать GGUF (замените URL на нужную модель)wget https://huggingface.co/<автор>/<модель>-GGUF/resolve/main/<файл>.gguf
3.4. Конкретные примеры
# gpt-oss-20b (Q4_K_M)mkdir -p ~/models/gpt-oss-20b && cd ~/models/gpt-oss-20b wget https://huggingface.co/unsloth/gpt-oss-20b-GGUF/resolve/main/gpt-oss-20b-Q4_K_M.gguf
# Qwen2.5-14B-Instruct (Q4_K_M)mkdir -p ~/models/qwen2.5-14b && cd ~/models/qwen2.5-14b wget https://huggingface.co/bartowski/Qwen2.5-14B-Instruct-GGUF/resolve/main/Qwen2.5-14B-Instruct-Q4_K_M.gguf
# Llama 3.2 3B Instruct (Q8_0)mkdir -p ~/models/llama-3.2-3b && cd ~/models/llama-3.2-3b wget https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q8_0.gguf
Шаг 4. Запуск модели
4.1. Переменные окружения
Перед запуском задайте путь к папке модели и имя GGUF-файла.
MODEL_PATH="$HOME/models/<папка_модели>" MODEL_FILE="<имя_файла>.gguf"
4.2. Одноразовый запуск (CLI)
Этот режим отправляет один промпт, выводит ответ модели и затем завершает контейнер.
docker run --rm --privileged--network=host--device=/dev/kfd--device=/dev/dri--group-add video--cap-add=SYS_PTRACE--security-opt seccomp=unconfined--ipc=host--shm-size 16G-v "$MODEL_PATH":/datarocm/llama.cpp:llama.cpp-b6652.amd0_rocm7.0.0_ubuntu24.04_full--run -m "/data/$MODEL_FILE" -p "Ваш промпт здесь" -n 256 --n-gpu-layers 999
4.3. HTTP-сервер (OpenAI-совместимый API)
Если нужен локальный сервер для запросов по HTTP, используйте серверный режим.
docker run --rm --privileged--network=host--device=/dev/kfd--device=/dev/dri--group-add video--cap-add=SYS_PTRACE--security-opt seccomp=unconfined--ipc=host--shm-size 16G-v "$MODEL_PATH":/data rocm/llama.cpp:llama.cpp-b6652.amd0_rocm7.0.0_ubuntu24.04_full --server -m "/data/$MODEL_FILE" --host 0.0.0.0 --port 8000 --n-gpu-layers 999 -c 8192
После запуска сервер будет слушать на http://localhost:8000.
4.4. Ключевые параметры запуска
| Параметр | Описание | Рекомендация |
|---|---|---|
| –n-gpu-layers 999 | Количество слоёв, выгружаемых на GPU | 999 = все слои на GPU |
| -c 8192 | Размер контекстного окна | 4096–32768 в зависимости от VRAM |
| -n 256 | Максимум токенов в ответе | Увеличить для длинных ответов |
| –shm-size 16G | Общая память для контейнера | 16G обычно достаточно |
Шаг 5. Отправка запросов к серверу
5.1. Консольный чат на Python
Для простого клиента сначала установите зависимость requests.
sudo apt install -y python3-requests
Далее создайте файл ~/llm_chat.py и вставьте в него код клиента из документа.
Что умеет llm_chat.py
5.2. Сделать исполняемым и запустить
chmod +x ~/llm_chat.py ~/llm_chat.py
Ввод you> — это ваш вопрос, ai> — ответ модели, ниже выводятся метрики производительности, например TTFT и токены в секунду.
Шаг 6. Переключение между моделями
Чтобы переключиться на другую модель, нужно остановить текущий сервер, изменить переменные MODEL_PATH и MODEL_FILE, а затем снова выполнить стандартную команду запуска.
# Переключиться на gpt-oss-20bMODEL_PATH="$HOME/models/gpt-oss-20b" MODEL_FILE="gpt-oss-20b-Q4_K_M.gguf"# Переключиться на Qwen2.5-14BMODEL_PATH="$HOME/models/qwen2.5-14b" MODEL_FILE="qwen2.5-14b-instruct-Q4_K_M.gguf"
Установка и запуск vLLM
Пошаговая инструкция по запуску vLLM через готовый ROCm Docker-образ, подключению моделей из Hugging Face, проверке OpenAI-compatible API и запуску CLI-чата.
vLLM + ROCm + Docker
В инструкции используется готовый образ vllm/vllm-openai-rocm:v0.17.1 с Docker Hub. Это рекомендуемый способ запуска vLLM на AMD GPU, без сборки из исходников.
Шаг 1. Подготовка кэша моделей
vLLM ROCm Docker
Модели скачиваются из Hugging Face при первом запуске. Чтобы не загружать их заново после перезапуска, в инструкции используется отдельный кэш-каталог.
mkdir -p ~/.cache/huggingface
Этот каталог пробрасывается в контейнер через -v ~/.cache/huggingface:/root/.cache/huggingface.
Шаг 2. Базовый шаблон запуска vLLM
Для всех моделей используется общая структура команды Docker с доступом к ROCm-устройствам, сетевым режимом host и примонтированным кэшем Hugging Face.
docker run --rm -it --name ИМЯ_КОНТЕЙНЕРА --network=host --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --device /dev/kfd --device /dev/dri --group-add video --group-add render -e HUGGINGFACE_HUB_CACHE=/root/.cache/huggingface -v ~/.cache/huggingface:/root/.cache/huggingface vllm/vllm-openai-rocm:v0.17.1 --model МОДЕЛЬ --host 0.0.0.0 --port 8001 --dtype auto --generation-config vllm
Контейнер автоматически удаляется после остановки благодаря флагу –rm.
| Docker-флаг | Назначение |
|---|---|
| –device /dev/kfd и –device /dev/dri | Доступ контейнера к GPU через ROCm |
| –group-add video и –group-add render | Разрешения на GPU-устройства |
| –ipc=host | Общая разделяемая память для PyTorch |
| –cap-add=SYS_PTRACE и –security-opt seccomp=unconfined | Отладочные разрешения для ROCm |
| -v ~/.cache/huggingface:… | Персистентный кэш моделей между перезапусками |
| –rm | Автоматическое удаление контейнера после остановки |
| –name ИМЯ | Удобное именование для docker stop ИМЯ |
| Аргумент vLLM | Назначение |
|---|---|
| –model | HF-репозиторий или путь к модели |
| –host 0.0.0.0 | Слушать на всех интерфейсах |
| –port 8001 | Порт для OpenAI-compatible API |
| –dtype auto | Автоматический выбор типа данных |
| –generation-config vllm | Не применять generation_config.json модели |
| –quantization | Метод квантования, например awq или gptq |
| –max-model-len | Ограничить длину контекста для экономии VRAM |
| –served-model-name | Кастомное имя модели для API |
Шаг 3. Примеры запуска моделей
3.1. gpt-oss-20b (MXFP4)
docker run --rm -it --name gptoss20b --network=host --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --device /dev/kfd --device /dev/dri --group-add video --group-add render -e HUGGINGFACE_HUB_CACHE=/root/.cache/huggingface -v ~/.cache/huggingface:/root/.cache/huggingface vllm/vllm-openai-rocm:v0.17.1 --model openai/gpt-oss-20b --host 0.0.0.0 --port 8001 --dtype auto --generation-config vllm
Для этой модели квантование MXFP4 уже встроено в веса, поэтому отдельный флаг –quantization не требуется.
3.2. Qwen2.5-14B-Instruct-AWQ (AWQ 4-bit)
docker run --rm -it --name qwen14b-awq --network=host --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --device /dev/kfd --device /dev/dri --group-add video --group-add render -e HUGGINGFACE_HUB_CACHE=/root/.cache/huggingface -v ~/.cache/huggingface:/root/.cache/huggingface vllm/vllm-openai-rocm:v0.17.1 --model Qwen/Qwen2.5-14B-Instruct-AWQ --quantization awq --host 0.0.0.0 --port 8001 --dtype auto --generation-config vllm
Для корректной загрузки AWQ-модели в vLLM нужен флаг –quantization awq.
3.3. Llama 3.2 3B Instruct
docker run --rm -it --name llama32-3b --network=host --ipc=host --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --device /dev/kfd --device /dev/dri --group-add video --group-add render -e HUGGINGFACE_HUB_CACHE=/root/.cache/huggingface -e HF_TOKEN=hf_ваш_токен -v ~/.cache/huggingface:/root/.cache/huggingface vllm/vllm-openai-rocm:v0.17.1 --model meta-llama/Llama-3.2-3B-Instruct --host 0.0.0.0 --port 8001 --dtype auto --generation-config vllm
Шаг 4. Проверка работы сервера
После запуска контейнера в другом терминале можно проверить список моделей через локальный OpenAI-compatible API.
curl http://localhost:8001/v1/models
В ответе поле id должно содержать имя загруженной модели — именно его нужно использовать в API-запросах.
Шаг 5. CLI-чат для работы с сервером
5.1. Установка окружения
sudo apt install -y python3.12-venv python3 -m venv ~/vllm-chat-venv source ~/vllm-chat-venv/bin/activate pip install -U pip openai prompt_toolkit
5.2. Файл клиента ~/vchat.py
В документе приведён полноценный Python-клиент на базе openai и prompt_toolkit, который работает с http://localhost:8001/v1, сохраняет историю, умеет стримить ответ и показывает метрики генерации.
Что умеет vchat.py
5.3. Сделать файл исполняемым
chmod +x ~/vchat.py
5.4. Запуск клиента
source ~/vllm-chat-venv/bin/activate ~/vchat.py
Шаг 6. Команды внутри чата
| Команда | Действие |
|---|---|
| /model ИМЯ | Переключить модель в клиенте |
| /models | Показать модели сервера |
| /system ТЕКСТ | Задать system prompt |
| /temp ЧИСЛО | Задать temperature |
| /tokens ЧИСЛО | Задать max_tokens |
| /reset | Очистить историю |
| /save файл.md | Сохранить диалог |
| /show | Текущие настройки |
| /exit | Выйти |
Эти команды используются для управления текущей сессией и параметрами генерации в CLI-клиенте.
Сравнение производительности AI PRO R9700 и AMD Instinct MI100 32GB в VLLM и llama.cpp
Полную версию сравнения вы можете узреть на нашем ютуб канале, здесь же будут приведены краткие выкладки.
Сравнение AI PRO R9700 и Instinct MI100
AI PRO R9700
| Модель | Движок | Формат / веса | Квантование | Токенов/с | TTFT, ms |
|---|---|---|---|---|---|
| gpt-oss-20b | llama.cpp | GGUF | Q4_K_M | 98.92 | 141.56 |
| gpt-oss-20b | vLLM | safetensors | MXFP4 | 97.75 | 2163.4 |
| Qwen2.5-14B-Instruct | llama.cpp | GGUF | Q4_K_M | 46.65 | 113.31 |
| Qwen2.5-14B-Instruct | vLLM | safetensors | AWQ | 7.46 | 174.1 |
| Llama 3.2 3B Instruct | llama.cpp | GGUF | Q8_K_M | 101.72 | 27.38 |
| Llama 3.2 3B Instruct | vLLM | safetensors | FP8 | 61.26 | 26.3 |
Instinct MI100
| Модель | Движок | Формат / веса | Квантование | Токенов/с | TTFT, ms |
|---|---|---|---|---|---|
| gpt-oss-20b | llama.cpp | GGUF | Q4_K_M | 103.92 | 68.85 |
| gpt-oss-20b | vLLM | safetensors | MXFP4 | — | — |
| Qwen2.5-14B-Instruct | llama.cpp | GGUF | Q4_K_M | 101.07 | 68.55 |
| Qwen2.5-14B-Instruct | vLLM | safetensors | AWQ | — | — |
| Llama 3.2 3B Instruct | llama.cpp | GGUF | Q8_K_M | 100.98 | 105.60 |
| Llama 3.2 3B Instruct | vLLM | safetensors | FP8 | — | — |
vLLM на MI100 официально не поддерживается, поэтому официальных контейнеров и сборок под неё не имеется. А кастомный контейнер не гарантирует как стабильности и скорости, так и релевантных результатов для сравнения. Посему, давайте подведём итоги из уже собранных данных.
Заключение
Можно уверенно подвести что на AMD AI PRO R9700 32GB, что AMD Instinct MI100 32GB можно запускать крупные языковые модели, но каждый из этих инструментов лучше раскрывается в своем сценарии. Собственно, как и движки для инференса.
llama.cpp подкупает простотой: он удобен для быстрого старта, локального запуска GGUF-моделей и понятного инференса без лишней обвязки.
vLLM выглядит более мощным решением для серверного применения, особенно когда важны OpenAI-совместимый API и работа с Hugging Face-моделями.
Итог здесь простой: выбирать стоит не “лучший фреймворк для всего”, а тот инструмент, который точнее соответствует вашему формату моделей, требованиям к скорости и реальному сценарию использования.
С видеокартами параллель идентична: там где AI PRO R9700 дарует универсальность и простоту использования, Instinct MI100 – даёт чистую мощь и плюсы специализированного продукта.
*LLAMA — проект Meta Platforms Inc.**, деятельность которой в России признана экстремистской и запрещена
**Деятельность Meta Platforms Inc. в России признана экстремистской и запрещена
Рекомендуемые товары
- Новое
- Выгодно
- Под заказ
- Б/У
Артикул: SF-00003249
Нет в наличии
Видеокарта AMD Radeon Instinct MI50 32GB HBM2 [100-506194] [Новый]
- Сокет AM4
- Сокет AM4
- Сокет AM4
- Сокет AM4
29 800 ₽
- Цена включает НДС 7%
- Гарантия: 1 год
- Новое
- Выгодно
- Под заказ
- Б/У
Артикул: SF-00001431
Нет в наличии
Видеокарта NVIDIA A100 OEM 40GB HBM2 [900-21001-0000-000] [Новый]
- Сокет AM4
- Сокет AM4
- Сокет AM4
- Сокет AM4
529 800 ₽
- Цена включает НДС 7%
- Гарантия: 1 год
- Новое
- Выгодно
- Под заказ
- Б/У
Артикул: 285
Нет в наличии
SSD-накопитель Intel (HP) S3700 400GB 2.5" 6Gb/s [SSDSC2BA400G3P] [Новый]
- Сокет AM4
- Сокет AM4
- Сокет AM4
- Сокет AM4
13 100 ₽
- Цена включает НДС 7%
- Гарантия: 1 год
- Новое
- Выгодно
- Под заказ
- Б/У
Артикул: 1350
Нет в наличии
HBA адаптер Broadcom 9500-16i (NVMe/SAS/SATA 12GB/s, no cache) [Новый]
- Сокет AM4
- Сокет AM4
- Сокет AM4
- Сокет AM4
53 900 ₽
- Цена включает НДС 7%
- Гарантия: 1 год
- Новое
- Выгодно
- Под заказ
- Б/У
Артикул: 5136
Нет в наличии
Кабель Supermicro SFF8643 (NVMe) - SFF8643 (NVMe) 0.7м [Новый]
- Сокет AM4
- Сокет AM4
- Сокет AM4
- Сокет AM4
3 000 ₽
- Цена включает НДС 7%
- Гарантия: 1 год