Гайд по запуску llama.cpp и VLLM в консоли, и тест-сравнение на AI PRO R9700 и AMD Instinct MI100 32GB
llama.cpp и vLLM: два движка для разных задач
Философия и архитектура
Установка и запуск 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
Сначала нужно добавить репозиторий 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
| Суффикс тега | Содержимое | Когда использовать |
|---|---|---|
| _full | CLI + сервер + конвертер + квантизатор | Универсальный вариант |
| _server | Только HTTP-сервер | Если нужен только API |
| _light | Только CLI (main) | Минимальный размер |
Шаг 3. Скачивание GGUF-модели
GGUF — это формат моделей, оптимизированный для llama.cpp. Такие модели обычно ищут на Hugging Face с фильтром library=gguf.
| Квант | Размер (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 | Если места не жалко |
# Создать папку под модельmkdir -p ~/models/<имя_модели> cd ~/models/<имя_модели>
# Скачать GGUF (замените URL на нужную модель)wget https://huggingface.co/<автор>/<модель>-GGUF/resolve/main/<файл>.gguf
# 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. Запуск модели
Перед запуском задайте путь к папке модели и имя GGUF-файла.
MODEL_PATH="$HOME/models/<папка_модели>" MODEL_FILE="<имя_файла>.gguf"
Этот режим отправляет один промпт, выводит ответ модели и затем завершает контейнер.
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 \--run -m "/data/$MODEL_FILE" \ -p "Ваш промпт здесь" \ -n 256 --n-gpu-layers 999
Если нужен локальный сервер для запросов по 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
| Параметр | Описание | Рекомендация |
|---|---|---|
| --n-gpu-layers 999 | Количество слоёв, выгружаемых на GPU | 999 = все слои на GPU |
| -c 8192 | Размер контекстного окна | 4096–32768 в зависимости от VRAM |
| -n 256 | Максимум токенов в ответе | Увеличить для длинных ответов |
| --shm-size 16G | Общая память для контейнера | 16G обычно достаточно |
Шаг 5. Отправка запросов к серверу
Для простого клиента сначала установите зависимость requests.
sudo apt install -y python3-requests
Что умеет llm_chat.py
chmod +x ~/llm_chat.py ~/llm_chat.py
Шаг 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. Подготовка кэша моделей
Модели скачиваются из Hugging Face при первом запуске. Чтобы не загружать их заново после перезапуска, в инструкции используется отдельный кэш-каталог.
mkdir -p ~/.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
| 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. Примеры запуска моделей
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
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
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
Шаг 5. CLI-чат для работы с сервером
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
Что умеет vchat.py
chmod +x ~/vchat.py
source ~/vllm-chat-venv/bin/activate ~/vchat.py
Шаг 6. Команды внутри чата
| Команда | Действие |
|---|---|
| /model ИМЯ | Переключить модель в клиенте |
| /models | Показать модели сервера |
| /system ТЕКСТ | Задать system prompt |
| /temp ЧИСЛО | Задать temperature |
| /tokens ЧИСЛО | Задать max_tokens |
| /reset | Очистить историю |
| /save файл.md | Сохранить диалог |
| /show | Текущие настройки |
| /exit | Выйти |
Сравнение производительности 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 | --- | --- |