Перейти к основному содержимому

Запуск LLM: выбор и установка фреймворка

На этой странице — четыре способа запустить большую языковую модель на машине с GPU: от самого быстрого старта до продакшн-развёртывания. Примеры даны для профиля RTX PRO 6000 Blackwell на 96 ГБ, но подходят и для других карт — меняются только размеры моделей, которые в них помещаются.

Перед началом убедитесь, что драйвер работает и лицензия получена:

nvidia-smi
nvidia-smi -q | grep -i licen

Если что-то из этого не отвечает — см. подготовку виртуальной машины и решение проблем.

Что выбрать

ФреймворкДля чегоСложность запуска
OllamaПопробовать модель, локальная разработка, единичные запросыМинимальная
llama.cppКвантованные модели, экономия видеопамяти, полный контрольСредняя
vLLMПродакшн-инференс, много параллельных запросов, OpenAI-совместимый APIСредняя
NVIDIA TritonНесколько моделей и разных бэкендов в одном сервисе, метрики, масштабированиеВысокая

Практическое правило: начинайте с Ollama, чтобы убедиться, что модель делает то, что нужно. Переходите на vLLM, когда появляются параллельные пользователи — он даёт кратно большую пропускную способность за счёт непрерывной пакетной обработки запросов. llama.cpp берите, когда модель не помещается в видеопамять в исходной точности. Triton — когда моделей несколько и их нужно обслуживать как единый сервис.

Что помещается в 96 ГБ

МодельТочностьПримерно нужно видеопамяти
7–8 млрд параметровFP1616–18 ГБ
32 млрд параметровFP1665–70 ГБ
70 млрд параметровFP16не помещается
70 млрд параметров8 бит70–75 ГБ
70 млрд параметров4 бита40–45 ГБ
120 млрд параметров4 бита65–70 ГБ

Оценка грубая: к весам модели добавляется кэш контекста, который растёт с длиной запроса и числом одновременных сессий. Закладывайте запас в 10–20 % сверх размера весов, а для длинного контекста — больше.

Подготовка: Docker и доступ к GPU из контейнеров

Три из четырёх вариантов удобнее запускать в контейнерах. Чтобы контейнер увидел карту, нужен NVIDIA Container Toolkit.

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt update && apt install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

Проверка — команда должна показать ту же карту, что и на хосте:

docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu22.04 nvidia-smi
warning

Карты Blackwell, включая RTX PRO 6000, требуют сборок под CUDA 12.8 и новее. Образы и колёса PyTorch, собранные под более старые версии CUDA, на них не запустятся — ошибка выглядит как «no kernel image is available for execution on the device». При установке PyTorch вручную берите вариант cu128 или свежее.

Ollama

Самый короткий путь: установка одной командой, модели скачиваются по имени.

curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:70b

Сервис поднимается на порту 11434 и предоставляет HTTP API. Модели хранятся в /usr/share/ollama/.ollama/models — вынесите этот каталог на отдельный диск, если планируете держать несколько крупных моделей.

Проверка, что модель действительно считает на карте:

nvidia-smi

В списке процессов должен быть ollama, а занятая память — соответствовать размеру модели.

llama.cpp

Даёт максимальный контроль над квантизацией и работает с моделями в формате GGUF. Сборка с поддержкой CUDA:

apt install -y build-essential cmake git
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j $(nproc)

Запуск сервера с OpenAI-совместимым API:

./build/bin/llama-server \
-m /models/model-q4_k_m.gguf \
--n-gpu-layers 999 \
--ctx-size 8192 \
--host 0.0.0.0 --port 8080

Ключевые параметры:

  • --n-gpu-layers — сколько слоёв модели выгрузить на карту. Значение с запасом означает «всё, что поместится»; если видеопамяти не хватает, часть слоёв уйдёт на процессор и скорость упадёт кратно;
  • --ctx-size — длина контекста. Прямо влияет на потребление памяти;
  • квантизация выбирается файлом модели: q8_0 ближе к исходному качеству, q4_k_m — разумный компромисс между качеством и объёмом.

vLLM

Рассчитан на поток запросов: непрерывная пакетная обработка и управление кэшем контекста дают кратно большую пропускную способность, чем последовательные вызовы.

Запуск в контейнере:

docker run --gpus all --rm -p 8000:8000 \
-v /models:/models \
vllm/vllm-openai:latest \
--model /models/<модель> \
--gpu-memory-utilization 0.90 \
--max-model-len 8192

Сервис отдаёт OpenAI-совместимый API на порту 8000 — приложения, написанные под такой интерфейс, работают без изменений.

Параметры, на которые стоит обратить внимание:

  • --gpu-memory-utilization — какую долю видеопамяти отдать под модель и кэш. Значение 0.90 разумно для выделенного профиля; снижайте, если на карте работает что-то ещё;
  • --max-model-len — максимальная длина контекста. Завышенное значение съедает память, которой не хватит под параллельные запросы;
  • --tensor-parallel-size — разнесение модели на несколько карт. Имеет смысл, когда карты связаны мостом NVLink: в GPU Cloud это связка из двух карт H200, на выделенном сервере — до восьми. Без моста обмен идёт через PCIe и становится узким местом. Подробнее — объединение карт через NVLink.

Если запуск на Blackwell завершается зависанием, попробуйте --enforce-eager — он отключает граф CUDA ценой части производительности.

NVIDIA Triton Inference Server

Подходит, когда моделей несколько, они разных типов, и всё это нужно обслуживать как один сервис с метриками и управлением версиями.

Модели складываются в репозиторий с фиксированной структурой:

/models
└── my-model
├── config.pbtxt
└── 1
└── model.onnx

Запуск:

docker run --gpus all --rm \
-p 8000:8000 -p 8001:8001 -p 8002:8002 \
-v /models:/models \
nvcr.io/nvidia/tritonserver:<версия>-py3 \
tritonserver --model-repository=/models

Порты: 8000 — HTTP, 8001 — gRPC, 8002 — метрики в формате Prometheus.

Версию образа подбирайте по матрице совместимости NVIDIA: она должна соответствовать версии драйвера и CUDA. Для карт Blackwell берите выпуски, собранные под CUDA 12.8 и новее.

Проверка производительности

Убедиться, что нагрузка действительно легла на карту, помогает наблюдение в реальном времени:

nvidia-smi -l 1

Смотрите на две величины: GPU-Util — насколько загружены вычислительные блоки, и Memory-Usage — сколько видеопамяти занято. Низкая загрузка при высоком потреблении памяти обычно означает, что узкое место не в карте, а в подготовке данных или в сети.

Сравнить профиль с ожидаемым уровнем можно бенчмарком PyTorch.

Что учесть при промышленном использовании

  • Модели занимают много места на диске. Планируйте дисковое пространство заранее: одна модель на 70 млрд параметров в 4-битной квантизации — это порядка 40 ГБ.
  • Первый запуск долгий. Загрузка весов в видеопамять занимает от десятков секунд до нескольких минут. Не перезапускайте сервис без необходимости.
  • Не открывайте API в интернет напрямую. У Ollama, llama.cpp и vLLM аутентификации по умолчанию нет — закрывайте доступ правилами firewall на Edge Gateway или обратным прокси с авторизацией.
  • Обновление ядра ломает драйвер. Перед обновлением системы перечитайте решение проблем.