{/ Эта страница автоматически передается из навыков SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Обслуживание Llms Vllm

vLLM: высокопроизводительный LLM-сервинг, OpenAI API, квантизация.

Метаданные навыки

Источник Встроенный (устанавливается по умолчанию)
Путь навыки/млопс/вывод/vllm
Версия 1.0.0
Автор Исследование оркестра
Лицензия Массачусетский технологический институт
Зависимости вллм, факел, трансформеры
Платформы Linux, MacOS
Теги vLLM, Служба вывода, PagedAttention, Непрерывная пакетная обработка, Высокая пропускная способность, Производство, OpenAI API, Квантование, Тензорный параллелизм

Справочник: полный SKILL.md:::информация

Ниже приведено полное описание навыка, который Hermes загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навыки активны.

vLLM - высокопроизводительный LLM-сервис

Когда использовать

Используйте при развёртывании производства LLM API, оптимизации задержки/пропускной способности вывода или поддержки моделей с ограниченной памятью графического процессора. Поддерживает конечные точки, совместимые с OpenAI, квантизацией (GPTQ/AWQ/FP8) и тензорным параллелизмом.

Быстрый старт

vLLM достигает в 24 раза более высокой пропускной способности, чем стандартные преобразователи, благодаря PagedAttention (блочному КВ-кэшу) и непрерывному батчингу (сливамеш запроса предварительного заполнения/декодирования).

Установка:

pip install vllm

Базовый оффлайн-вывод:

from vllm import LLM, SamplingParams

llm = LLM(model="meta-llama/Llama-3-8B-Instruct")
sampling = SamplingParams(temperature=0.7, max_tokens=256)

outputs = llm.generate(["Объясните квантовые вычисления"], sampling)
print(outputs[0].outputs[0].text)

Совместимый с OpenAI сервер:

vllm serve meta-llama/Llama-3-8B-Instruct

# Запрос с помощью OpenAI SDK
python -c "
from openai import OpenAI
client = OpenAI(base_url='http://localhost:8000/v1', api_key='EMPTY')
print(client.chat.completions.create(
    model='meta-llama/Llama-3-8B-Instruct',
    messages=[{'role': 'user', 'content': 'Привет!'}]
).choices[0].message.content)
"

Типовые рабочие процессы

Рабочий процесс 1: Развёртывание производственного API

Скопируйте этот чек-лист и отслеживайте прогресс:

Прогресс развёртывания:
- [ ] Шаг 1: Настройка параметров сервера
- [ ] Шаг 2: Тестирование с ограниченным трафиком
- [ ] Шаг 3: Включение мониторинга
- [ ] Шаг 4: Развёртывание в production
- [ ] Шаг 5: Проверка метрик производительности

Шаг 1: Настройка параметров сервера

Выберите конфигурацию в зависимости от размера модели:

# Для моделей 7B-13B на одном GPU
vllm serve meta-llama/Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192 \
  --port 8000

# Для моделей 30B-70B с тензорным параллелизмом
vllm serve meta-llama/Llama-2-70b-hf \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.9 \
  --quantization awq \
  --port 8000

# Для production с кэшированием и метриками
vllm serve meta-llama/Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching \
  --enable-metrics \
  --metrics-port 9090 \
  --port 8000 \
  --host 0.0.0.0

Шаг 2: Тестирование с ограниченным трафиком

Запустите нагрузочное тестирование перед производством:

# Установка инструмента нагрузочного тестирования
pip install locust

# Создайте test_load.py с примерами запросов
# Запустите: locust -f test_load.py --host http://localhost:8000

Проверьте TTFT (время до первого токена) < 500 мс и пропускная способность > 100 запросов/сек.

Шаг 3: Включение Диптихов

vLLM предоставляет метрики Prometheus на порту 9090:

curl http://localhost:9090/metrics | grep vllm

Ключевые метрики для Диптихов: - vllm:time_to_first_token_секундs - Задержка - vllm:num_requests_running - Активные запросы - vllm:gpu_cache_usage_perc - Использование KV-кэша

Шаг 4: Развёртывание на производстве

Используйте Docker для согласованного развёртывания:

# Запуск vLLM в Docker
docker run --gpus all -p 8000:8000 \
  vllm/vllm-openai:latest \
  --model meta-llama/Llama-3-8B-Instruct \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching

Шаг 5: Проверка показателей производительности

Убедитесь, что развёртывание соответствует требованиям: - ТТФТ < 500 мс (для времени ожидания) - Пропускная способность > целевого значения запроса/сек - Использование графического процессора > 80% - Нет ошибок OOM в логах

Рабочий процесс 2: Офлайн-пакетный инференс

Для обработки больших наборов данных без накладных расходов сервера.

Скопируйте этот чек-лист:

Пакетная обработка:
- [ ] Шаг 1: Подготовка входных данных
- [ ] Шаг 2: Настройка движка LLM
- [ ] Шаг 3: Запуск пакетного инференса
- [ ] Шаг 4: Обработка результатов

Шаг 1: Подготовка входных данных

# Загрузка промптов из файла
prompts = []
with open("prompts.txt") as f:
    prompts = [line.strip() for line in f]

print(f"Загружено {len(prompts)} промптов")

Шаг 2: Настройка движка LLM

from vllm import LLM, SamplingParams

llm = LLM(
    model="meta-llama/Llama-3-8B-Instruct",
    tensor_parallel_size=2,  # Использовать 2 GPU
    gpu_memory_utilization=0.9,
    max_model_len=4096
)

sampling = SamplingParams(
    temperature=0.7,
    top_p=0.95,
    max_tokens=512,
    stop=["</s>", "\n\n"]
)

Шаг 3: Запуск пакетного вывода

Автоматический батчит vLLM для повышения эффективности:

# Обработка всех промптов одним вызовом
outputs = llm.generate(prompts, sampling)

# vLLM обрабатывает батчинг внутри
# Нет необходимости вручную разбивать промпты на части

Шаг 4: Обработка результатов

# Извлечение сгенерированного текста
results = []
for output in outputs:
    prompt = output.prompt
    generated = output.outputs[0].text
    results.append({
        "prompt": prompt,
        "generated": generated,
        "tokens": len(output.outputs[0].token_ids)
    })

# Сохранение в файл
import json
with open("results.jsonl", "w") as f:
    for result in results:
        f.write(json.dumps(result) + "\n")

print(f"Обработано {len(results)} промптов")

Рабочий процесс 3: Обслуживание квантизованных моделей

Размещение больших моделей в ограниченной памяти GPU.

Настройка квантизации:
- [ ] Шаг 1: Выбор метода квантизации
- [ ] Шаг 2: Поиск или создание квантизованной модели
- [ ] Шаг 3: Запуск с флагом квантизации
- [ ] Шаг 4: Проверка точности

Шаг 1: Выбор метода квантизации

Шаг 2: Поиск или создание квантизованной модели

Используйте предварительно квантованные модели HuggingFace:

# Поиск моделей AWQ
# Пример: TheBloke/Llama-2-70B-AWQ

Шаг 3: Запуск с флагом квантизации

# Использование предварительно квантизованной модели
vllm serve TheBloke/Llama-2-70B-AWQ \
  --quantization awq \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.95

# Результат: модель 70B в ~40 ГБ VRAM

Шаг 4: Проверка точности

Убедитесь, что данные выходного дня соответствуют ожидаемому качеству:

# Сравнение ответов квантизованной и неквантизованной модели
# Проверьте, что производительность на конкретной задаче не изменилась

Когда использовать против альтернатив

Используйте vLLM когда: - Развёртывает производство LLM API (100+ запросов/сек) - Обеспечивает конечные точки, совместимые с OpenAI. - Ограниченная память графического процессора, но нужны большие модели. - Многопользовательские приложения (чат-боты, ассистенты) - Необходимо продемонстрировать задержку с высокой пропускной способностью.

Используйте альтернативы вместо: - llama.cpp: запросы на ЦП/границу, однопользовательские. - Трансформеры HuggingFace: Исследования, прототипирование, разовая генерация - TensorRT-LLM: Только NVIDIA, нужна абсолютно максимальная производительность. - Генерация текста-вывод: Уже в экосистеме HuggingFace

Типичные проблемы

Проблема: Нехватка памяти при включении модели

Уменьшите использование памяти:

vllm serve MODEL \
  --gpu-memory-utilization 0.7 \
  --max-model-len 4096

Или воспользуйтесь квантизацией:

vllm serve MODEL --quantization awq

Проблема: Медленный первый токен (TTFT > 1 секунды)

Включите кэширование префиксов для повторяющихся промптов:

vllm serve MODEL --enable-prefix-caching

Для дополнительных приглашений к заполнению чанком:

vllm serve MODEL --enable-chunked-prefill

Проблема: Ошибка «модель не найдена»

Используйте --trust-remote-code для отслеживания моделей:

vllm serve MODEL --trust-remote-code

Проблема: Низкая пропускная способность (<50 запросов/сек)

Увеличьте количество одновременных постоянностей:

vllm serve MODEL --max-num-seqs 512

Проверьте использование графического процессора с помощью nvidia-smi — должно быть >80%.

Проблема: Инференс ниже ожидаемого

Убедитесь, что тензорный параллелизм использует количество графических процессоров, кратное 2:

vllm serve MODEL --tensor-parallel-size 4  # Не 3

Включите спекулятивное декодирование для более искусственной генерации:

vllm serve MODEL --speculative-model DRAFT_MODEL

Продвинутые темы

Паттерны развёртывания сервера: См. references/server-deployment.md для конфигураций Docker, Kubernetes и балансировки нагрузки.

Оптимизация производительности: См. references/optimization.md для PagedAttention, деталей непрерывного батчинга и результатов бенчмарков.

Руководство по квантизации: См. references/quantization.md для настройки AWQ/GPTQ/FP8, подготовки моделей и эталонных измерений.

Устранение неполадок: См. references/troubleshooting.md для подробных сообщений об ошибках, шагах отладки и определения производительности.

Требования к оборудованию

Поддерживаемые платформы: NVIDIA (основная), AMD ROCm, Intel GPU, TPU.

Ресурсы