Cost, Billing, and Ops14 октября 2026 г.Flatkey Team

Постройте совместимый с OpenAI inference-сервер на своих GPU: руководство по vLLM Inference Server OpenAI Compatible API

Разверните на своих GPU inference-сервер vLLM с совместимым с OpenAI API, а затем укрепите его миграцией SDK, edge-контролями, тестами, метриками и резервным маршрутизированием.

Постройте совместимый с OpenAI inference-сервер на своих GPU: руководство по vLLM Inference Server OpenAI Compatible API

Если у вас уже есть доступная GPU-мощность, совместимый с OpenAI inference-сервер позволяет вашему приложению сохранить тот же клиентский формат, пока вы переключаете backend с hosted API модели на собственную инфраструктуру. Обычный путь концептуально прост: запустите vLLM или LocalAI на GPU-узле, откройте API /v1, укажите base_url вашего SDK на этот endpoint, затем укрепите сервис с точки зрения аутентификации, маршрутизации, мониторинга и емкости.

Это руководство сосредоточено на практической сборке: как поднять vllm inference server openai compatible api, что проверить перед тем, как пустить его в production traffic, и когда разумнее оставить self-hosting в качестве бенчмарка, а основной поток рабочих нагрузок направлять через managed model API, например Flatkey.

Краткий ответ

Для большинства текстовых LLM-задач начинайте с vLLM. Он предоставляет HTTP-сервер, совместимый с OpenAI, поддерживает распространенные OpenAI-стиль endpoints, такие как chat completions, completions, embeddings и model listing, в зависимости от загруженного типа модели, а также поставляется с официальными Docker-образами для развертывания.

Минимальный self-hosted стек выглядит так:

Слой Production choice Почему это важно
GPU host H100, H200, B200, A100, L40S или другой поддерживаемый accelerator Определяет размер модели, concurrency, длину контекста и верхнюю границу задержки.
Container runtime Драйвер NVIDIA плюс NVIDIA Container Toolkit Позволяет контейнерам Docker видеть GPU через --gpus all.
Inference engine vLLM для высокопроизводительного text serving; LocalAI для более широких локальных use cases, совместимых с OpenAI vLLM — отправная точка по умолчанию для serving transformer LLM на GPU.
API surface /v1/chat/completions, /v1/completions, /v1/models и только те дополнительные endpoints, которые поддерживает ваша модель Сокращает объем миграции клиента и предотвращает ложные предположения о совместимости.
Edge Nginx, Envoy, Caddy или облачный load balancer Обрабатывает TLS, auth, ограничения запросов и routing.
Ops Метрики, логи, GPU telemetry, canary и fallback routing Не дает серверу стать незаметным источником простоя.

Используйте vllm inference server openai compatible api, когда вам нужен прямой контроль над оборудованием, локальность данных, собственные веса модели или предсказуемая экономика высоконагруженного serving. Используйте базовый вариант gateway/model API, когда вам в первую очередь нужны надежные ответы и вы не хотите самостоятельно управлять утилизацией GPU, дрейфом драйверов, загрузкой модели и failover.

Прежде чем строить: решите, стоит ли self-hosting

Запуск собственного inference-сервера, совместимого с OpenAI, не обязательно дешевле. Он может быть отличным решением, когда ваши GPU постоянно заняты и рабочая нагрузка хорошо подходит под размещенную вами модель. Но он может оказаться дорогим, если загрузка скачкообразная, промпты сильно различаются, качество модели часто меняется или команда тратит больше времени на отладку инфраструктуры, чем на выпуск продукта.

Используйте эту таблицу решений перед арендой или покупкой оборудования:

Вопрос Self-host, если ответ «да» Предпочтите managed API или gateway, если ответ «да»
Есть ли у вас стабильный трафик? GPU могут оставаться warm и использоваться с высокой эффективностью. Трафик носит всплесковый, сезонный или экспериментальный характер.
Нужны ли вам собственные веса? Вы обслуживаете fine-tuned, quantized или private model. Достаточно публичных frontier- или open-weight-hosted models.
Требуется ли локальность данных? Запросы должны оставаться внутри вашего VPC или on-prem сети. Стандартных API-контролей безопасности достаточно.
Можете ли вы эксплуатировать GPU-инфраструктуру? Вы уже отслеживаете драйверы, CUDA, контейнеры, память, очереди и риски rollout. Вы не хотите, чтобы операции с GPU стали частью roadmap продукта.
Стабильно ли качество вывода? Одного семейства моделей достаточно для workflow. Вам нужно сравнивать, маршрутизировать или переключаться между многими моделями при отказах.

Flatkey подходит как базовый вариант для последнего столбца: один endpoint, совместимый с OpenAI, один баланс и доступ ко многим официальным моделям. Даже если вы строите vllm inference server openai compatible api, держите базовый model API в бенчмарке, чтобы сравнивать latency, качество и стоимость на принятый результат, а не только стоимость за GPU-hour.

Референсная архитектура

Production inference-сервер, совместимый с OpenAI, не должен напрямую выставлять model engine в публичный интернет. Поместите перед ним тонкий control layer.

flowchart LR
  A[OpenAI SDK / app workers] --> B[API edge: TLS, auth, rate limits]
  B --> C[OpenAI-compatible /v1 route]
  C --> D[vLLM inference server]
  D --> E[GPU node or GPU pool]
  D --> F[Metrics and logs]
  B --> G[Fallback route: Flatkey or another model API]

Важное архитектурное решение — разделить совместимость и operations. vLLM может говорить на API в стиле OpenAI. Ваш edge должен отвечать за аутентификацию, квоты, ограничения размера запросов, TLS, audit logs и поведение при fallback.

Шаг 1: подготовьте GPU-host

Начните с чистой Linux-машины с GPU. Убедитесь, что на host есть:

  • Совместимый драйвер NVIDIA для GPU и стека CUDA, который вы планируете использовать.
  • Docker или другой поддерживаемый container runtime.
  • NVIDIA Container Toolkit, настроенный так, чтобы контейнеры могли получать доступ к GPU.
  • Достаточно локального или сетевого хранилища для весов модели.
  • Сетевой путь, который не раскрывает inference-порт, пока не настроены auth и TLS.

Процесс установки NVIDIA Container Toolkit настраивает Docker с помощью nvidia-ctk runtime configure --runtime=docker, затем перезапускает Docker. После этого контейнер можно запускать с доступом к GPU, используя флаги GPU в Docker.

Выполните эти проверки перед установкой сервера модели:

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

Если любая из команд не выполняется, сначала исправьте слой драйвера/runtime. vllm inference server openai compatible api не может быть стабильным, если базовый GPU runtime нестабилен.

Шаг 2: Запустите vLLM Inference Server OpenAI Compatible API

Официальная документация vLLM по развертыванию в Docker указывает vllm/vllm-openai как образ для запуска сервера, совместимого с OpenAI. Практический первый запуск выглядит так:

docker run --rm --gpus all \
  --ipc=host \
  -p 8000:8000 \
  -e HUGGING_FACE_HUB_TOKEN="$HUGGING_FACE_HUB_TOKEN" \
  vllm/vllm-openai:latest \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --served-model-name llama-3.1-8b-instruct

Для приватной модели замените id модели на свой репозиторий или локальный путь. В production закрепляйте теги образов и ревизии модели, а не разворачивайте latest.

Затем протестируйте список моделей:

curl http://localhost:8000/v1/models

И протестируйте chat completions:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.1-8b-instruct",
    "messages": [
      {"role": "system", "content": "You are a concise assistant."},
      {"role": "user", "content": "Reply with one sentence about self-hosted inference."}
    ],
    "temperature": 0.2
  }'

Это первая рабочая веха: локальный vllm inference server openai compatible api, к которому ваше приложение может обращаться с той же формой запроса, которую оно уже использует для OpenAI-style chat.

Шаг 3: Укажите ваш существующий SDK на локальную конечную точку

Большая часть миграции на OpenAI-compatible должна происходить в конфигурации, а не в логике приложения. В паттерне Python SDK задайте собственные base_url и API key:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="local-dev-key",
)

response = client.chat.completions.create(
    model="llama-3.1-8b-instruct",
    messages=[
        {"role": "user", "content": "Give me a deployment checklist."}
    ],
)

print(response.choices[0].message.content)

В production не направляйте воркеры приложения напрямую на необработанный процесс vLLM. Направляйте их на свой внутренний gateway или load balancer:

OPENAI_BASE_URL=https://inference.example.com/v1
OPENAI_API_KEY=<your-internal-service-token>

Этот gateway может маршрутизировать запросы к vLLM, блокировать неподдерживаемые поля запроса, нормализовать алиасы моделей и переключаться на Flatkey или другой API модели, когда пул self-hosted перегружен.

Шаг 4: Поймите, что не означает "OpenAI-Compatible"

OpenAI-compatible не означает, что каждый endpoint, поведение модели, вызов инструмента, streaming event или параметр, специфичный для провайдера, работает точно так же, как в OpenAI. Это означает, что сервер принимает знакомую структуру для выбранных endpoint'ов.

Перед тем как считать миграцию завершенной, протестируйте:

Область совместимости Что проверить
Chat messages Обработку ролей, system messages, длинный контекст, multimodal payloads, если они используются.
Streaming Формат событий, поведение при разрыве соединения, таймауты клиента, обработку частичного вывода.
Tools/function calling Поддерживает ли загруженная модель и сервер ваш шаблон tool-call.
Embeddings Является ли загруженная модель на самом деле embedding-моделью.
Error codes Поведение 400, 401, 404, 408, 429, 500, 503 на edge и в engine.
Request parameters Temperature, max tokens, top-p, stop sequences, дополнительные параметры провайдера.
Token accounting Подсчет токенов prompt/output и атрибуцию стоимости.

Самый безопасный подход — поддерживать набор тестов на совместимость. Отправляйте фиксированный набор реальных application prompts в OpenAI, Flatkey и ваш vllm inference server openai compatible api. Сравнивайте задержку, корректность схемы, поведение отказов, качество вывода и долю принятых ответов.

Шаг 5: Рассчитайте объем GPU-памяти для модели и трафика

Основной режим отказа при обслуживании — не «сервер запускается медленно». Это «сервер запускается, а затем падает под реальной длиной контекста и конкуренцией».

Планируйте память с учетом:

  • Весов модели.
  • KV cache для контекста и параллельных последовательностей.
  • Накладных расходов runtime.
  • Фрагментации и запаса.
  • Tensor parallelism, если модель не помещается на одной GPU.
  • Компромиссов quantization, если вы используете более низкую точность.

Для более глубокого расчёта используйте руководство Flatkey по требованиям к памяти GPU для LLM. Для планирования на уровне кластера сочетайте это с анализом в духе архитектуры GPU-кластера и TCO GPU-кластера.

Примерное правило приемки:

usable_capacity = model_fit + target_context + target_concurrency + 20-30% headroom

Если вы не можете сохранить запас по мощности, уменьшите длину контекста, снизьте конкуррентность, используйте меньшую модель, распределите нагрузку между GPU или перенаправляйте избыточный трафик из self-hosted пула.

Шаг 6: добавьте API edge перед production

Сырой сервер vLLM — это не весь ваш production control plane. Поставьте перед ним edge и сделайте его ответственным за:

  • завершение TLS;
  • аутентификацию между сервисами;
  • ограничения размера тела запроса;
  • rate limits по командам или приложениям;
  • маппинг alias'ов моделей;
  • структурированные логи запросов;
  • таймауты и бюджеты повторных попыток;
  • canary-маршрутизацию;
  • fallback-маршрутизацию.

Пример конфигурации Nginx:

server {
  listen 443 ssl;
  server_name inference.example.com;

  client_max_body_size 4m;

  location /v1/ {
    proxy_pass http://vllm_backend:8000/v1/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Request-Id $request_id;
    proxy_read_timeout 120s;
  }
}

Это лишь отправная точка. Production-команды должны добавить аутентификацию, mTLS или частную сеть, политики логирования запросов и явные лимиты на размер prompt и длину вывода.

Шаг 7: измеряйте принятый output, а не только tokens per second

Дашборды для GPU-serving часто чрезмерно фокусируются на throughput. Tokens per second важен, но продуктовые команды обычно заботятся о принятых output'ах: ответах, которые достаточно быстрые, достаточно валидные и достаточно хорошие, чтобы отправить их пользователю или в downstream workflow.

Отслеживайте:

Метрика Почему это важно
Время до первого токена Задержка, воспринимаемая пользователем в streaming-приложениях.
End-to-end latency Время в очереди плюс время генерации.
Глубина очереди Ранний сигнал, что GPU-пул насыщен.
Использование памяти GPU Насколько реалистичны предположения о контексте и конкуррентности.
Частота ошибок по alias модели Помогает обнаруживать сбои, специфичные для модели.
Процент прохождения schema вывода Критично для агентов, извлечения данных и tool workflows.
Доля принятых output'ов Объединяет качество, latency и валидность.
Частота fallback Показывает, когда self-hosted пул уже недостаточен.

Затем рассчитайте стоимость на один принятый output:

cost_per_accepted_output =
  (gpu_cost + storage + network + ops_time + fallback_api_cost)
  / accepted_outputs

Именно здесь vllm inference server openai compatible api получает честное сравнение с managed API. Если локальный GPU дешевле по сырому токену, но хуже по повторам, сбоям или времени оператора, стоимость на принятый output может оказаться выше ожидаемой.

Шаг 8: добавьте fallback вместо того, чтобы считать GPU-box единой точкой отказа

Вашему приложению не должно быть важно, приходит ли ответ от self-hosted vLLM, Flatkey или другого маршрута модели. Оно должно запрашивать alias модели и получать ответ или контролируемый сбой.

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

Условие Маршрут
Обычный трафик, GPU в норме Self-hosted vLLM.
Очередь GPU выше порога Перелив на Flatkey model API.
Загрузка модели или перезапуск Направлять весь трафик в Flatkey, пока система не прогреется.
Всплеск ошибок schema Переключить canary обратно на managed API.
Экспериментальная оценка prompt'ов Запустить сравнение и на локальной, и на managed модели.

Такая архитектура позволяет команде сохранять экономику и контроль self-hosting, не привязывая доступность продукта к одному inference-серверу.

vLLM против LocalAI для локального inference, совместимого с OpenAI

И vLLM, и LocalAI часто появляются в поиске по запросам о inference-сервере, совместимом с OpenAI, но они подходят для разных задач.

Вариант Лучшее применение На что обратить внимание
vLLM Высокопроизводительное LLM-serving на GPU, особенно для текстовых transformer-моделей. Совместимость зависит от типа модели и endpoint; production-hardening всё равно нужно строить вокруг него.
LocalAI Локальный OpenAI-compatible API для нескольких локальных backend'ов моделей и модальностей. Throughput и поведение GPU сильно зависят от backend'а, модели и железа.
Flatkey Managed OpenAI-compatible model API как базовая линия для многих официальных моделей. Вы отказываетесь от прямого контроля над движком serving, но избавляетесь от эксплуатации GPU.

Для целевой нагрузки этой статьи начните с vllm inference server openai compatible api. Рассматривайте LocalAI, когда ваша цель — более широкие локальные эксперименты или единый локальный API поверх нескольких backend'ов, а не максимальная пропускная способность GPU-serving для одного семейства LLM.

Чеклист для production

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

  • [ ] Драйвер GPU и контейнерная среда выполнения проверены с помощью nvidia-smi внутри контейнера.
  • [ ] Тег образа vLLM и ревизия модели закреплены.
  • [ ] Псевдоним модели стабилен и документирован.
  • [ ] /v1/models и /v1/chat/completions протестированы через конечный edge-URL.
  • [ ] Streaming протестирован с отключениями клиента.
  • [ ] Тесты на длинный контекст и конкурентную нагрузку выполнены в ожидаемом production-профиле.
  • [ ] Аутентификация добавлена на edge; сырой порт vLLM не открыт в публичный доступ.
  • [ ] Ограничены размер тела запроса, максимальное число output-токенов и таймауты.
  • [ ] Логи не содержат чувствительные данные prompt, если это явно не одобрено.
  • [ ] Метрики собирают задержку, очередь, память GPU, частоту ошибок и rate принятых output.
  • [ ] Настроен fallback-маршрут для перегрузки и инцидентов.
  • [ ] Базовый уровень managed API измерен на тех же prompt.
  • [ ] План отката протестирован.

Распространенные ошибки

Самая большая ошибка — считать первый успешный curl завершением работы. Это лишь начало.

Другие распространенные сбои:

  • Использование образов latest в production без закрепления версий.
  • Открытие сырого inference-порта в интернет.
  • Предположение, что поддерживается каждый параметр OpenAI-запроса.
  • Бенчмарк одного короткого prompt и объявление результата «готово для production».
  • Игнорирование роста KV cache при реальной длине контекста.
  • Забывать, что время загрузки модели влияет на деплои и восстановление.
  • Измерение стоимости GPU-часов без учета времени оператора, повторных попыток и сбоев качества.
  • Отказ от fallback, потому что локальная конечная точка «совместима с OpenAI».

Production-vllm inference server openai compatible api — это полезная инфраструктура. Это не магическая совместимость и не замена операционной дисциплине.

Когда использовать Flatkey вместе со своими GPU

Flatkey наиболее полезен в этой архитектуре как управляемая база для модели/API и как путь fallback. Оставьте свое приложение на клиентском формате, совместимом с OpenAI, а затем направляйте часть трафика в локальный пул GPU и часть — в Flatkey.

Это дает вам:

  • Способ сравнивать качество ответов self-hosted решений с hosted-моделями.
  • Запасную емкость, когда локальные GPU перегружены.
  • Маршрут fallback во время инцидентов с драйвером, моделью или развертыванием.
  • Доступ к другим семействам моделей без добавления новых ключей провайдера.
  • Более чистый путь возврата к managed API, если self-hosted модель показывает более низкое качество.

Выбор не сводится к «свои GPU или API». Для многих команд устойчивой является комбинация: владеть GPU-путем там, где это дает контроль или преимущество по стоимости, и сохранять управляемый маршрут для отказоустойчивости и выбора моделей.

FAQ

Что такое OpenAI-совместимый inference-сервер?

OpenAI-совместимый inference-сервер предоставляет HTTP-эндпоинты со схемой запросов и ответов в стиле OpenAI, обычно под /v1. Это позволяет приложениям использовать привычную конфигурацию SDK, например собственный base_url, отправляя трафик на другой backend.

Является ли vLLM OpenAI-совместимым inference-сервером?

Да. vLLM предоставляет сервер, совместимый с OpenAI, и документирует поддержку распространенных OpenAI-стиля эндпоинтов, таких как chat completions, completions, embeddings и список моделей, в зависимости от типа модели и функции.

Могу ли я запустить vLLM OpenAI-совместимый сервер локально?

Да. Вы можете запустить vLLM локально на GPU-рабочей станции или сервере, а затем открыть эндпоинт /v1 для своего приложения. Для production поместите перед ним аутентифицированный edge или внутренний gateway.

Какое оборудование мне нужно?

Это зависит от размера модели, точности, длины контекста и целевой конкуренции запросов. Сначала оцените веса модели плюс KV cache и запас по ресурсам, затем протестируйте на реальных prompt. Небольшая instruct-модель может поместиться на одном GPU; модель 70B или нагрузка с высокой конкуренцией может потребовать GPU с большей памятью или tensor parallelism.

Стоит ли использовать vLLM или LocalAI?

Сначала используйте vLLM, когда задача — высокопроизводительный LLM inference на GPU. Рассмотрите LocalAI, если вам нужен более широкий локальный OpenAI-совместимый сервер для нескольких локальных backend'ов или модальностей.

Означает ли OpenAI-compatible полную взаимозаменяемость?

Нет. Структура endpoint может совпадать, но поведение модели, поддерживаемые параметры, tools, streaming, embeddings, ошибки и учет токенов могут отличаться. Запускайте тесты совместимости перед переключением production-трафика.

Заключение

Построение vllm inference server openai compatible api — самый быстрый практический способ превратить свои GPU в endpoint в стиле OpenAI. Базовая сборка проста: подготовьте GPU runtime, запустите vLLM, укажите SDK на /v1, а затем добавьте edge, мониторинг, тесты совместимости и fallback-маршруты, которые делают решение production-grade.

Лучшие команды не останавливаются на «оно работает». Они сравнивают self-hosted inference с базовым уровнем managed API, измеряют принятые output и держат fallback-маршрут наготове. Именно так вы получаете контроль над своими GPU, не делая каждый product request зависимым от одного хрупкого inference-сервера.

Официальные ссылки

  • Документация vLLM по OpenAI-compatible server: https://docs.vllm.ai/en/latest/serving/online_serving/
  • Документация по развёртыванию vLLM с Docker: https://docs.vllm.ai/en/latest/deployment/docker/
  • Руководство по установке NVIDIA Container Toolkit: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
  • README OpenAI Python SDK: https://github.com/openai/openai-python
  • Документация проекта LocalAI: https://localai.io/