Задача звучала как типовой пилот: в контуре уже работала мультиагентная платформа ИскраБот, и к ней требовалось подключить три локальных вычислительных сервиса. Основную LLM для сложных запросов и более быструю модель для служебных задач разместили на двух NVIDIA DGX Spark, а распознавание речи — на мини-ПК Beelink с AMD Radeon 8060S под WSL2. На всё отводилось два дня.
Для LLM выбрали vLLM — runtime, который поднимает OpenAI-совместимый HTTP-сервер. Это позволило приложению вызывать локальные модели через привычный /v1/chat/completions, не получая отдельную интеграцию под каждый runtime. Стандартизированный контракт отделяет приложение от конкретной реализации инференса: модель, квантизацию или параметры сервера можно менять за API-границей, не переписывая весь агентный слой. Но совместимый endpoint не гарантирует совместимого поведения — особенно в streaming и tool calling.
| Компонент | Модель | Железо | Runtime |
|---|---|---|---|
| Основная LLM | Qwen3.8-27B-FP8 | DGX Spark №1 | vLLM |
| Fast LLM | Qwen3.6-35B-A3B-NVFP4 | DGX Spark №2 | vLLM |
| ASR | Qwen3-ASR-1.7B | Beelink / AMD Radeon 8060S | WSL2 / ROCm |
В качестве основной модели использовалась Qwen3.8-27B-FP8, в качестве fast-модели — Qwen3.6-35B-A3B-NVFP4. Для распознавания речи — Qwen3-ASR-1.7B. На бумаге «развернуть модель» звучит как «скачать и запустить», но модель в репозитории — это набор артефактов: веса и их формат, конфигурация архитектуры, токенизатор, chat template, иногда дополнительный код и метаданные квантизации. Сами по себе они не принимают HTTP-запросы, не ограничивают параллелизм, не проверяют ключи, не пишут метрики и не восстанавливаются после перезагрузки.
ASR-модель Qwen3-ASR-1.7B запущена на Radeon 8060S в WSL2 с ROCm — отдельный стек, отличный от CUDA-контура.
Локальный inference service — больше, чем один вызов generate(). Его минимальный контур: артефакты модели, совместимый runtime, GPU-драйвер и вычислительный стек, HTTP API со streaming и auth, healthcheck, логи и restart policy. Первая инженерная проверка — не «помещается ли число параметров в память», а вся матрица совместимости: архитектура CPU, поколение и возможности GPU, CUDA или ROCm и версия драйвера, поддержка конкретной квантизации, наличие нужных kernels в runtime, формат весов и chat template, архитектура контейнерного образа.
DGX Spark — ARM64-система на Grace Blackwell. По спецификации NVIDIA, у неё 128 ГБ согласованной системной памяти, общей для CPU и GPU. Это позволяет работать с крупными моделями в компактном форм-факторе, но не отменяет конкуренцию за память между весами, KV-кэшем, runtime и остальными процессами. ASR-контур оказался другим стеком: AMD Radeon в WSL2 и ROCm. Одинаковая фраза «запустить модель на GPU» скрывала два разных набора образов и способов диагностики — переносить CUDA-инструкции на такой узел бессмысленно.
В результате были собраны воспроизводимые контейнеры, веса вынесены в постоянное хранилище, серверы получили API-аутентификацию, healthcheck и политику перезапуска. После этого модель перестала быть одноразовым процессом в терминале и стала частью интеграционного контура. Отдельная оговорка по безопасности: встроенный API key в vLLM защищает не все возможные endpoint’ы. В официальной документации прямо рекомендуется учитывать это при публикации сервера и при необходимости ставить его за reverse proxy. «Есть ключ» и «поверхность сервиса закрыта» — не одно и то же.
Главный вывод кейса — разрыв между функциональной проверкой и production-ready. Даже успешный прогон на 256 тысяч токенов не означает, что сервис выдержит реальную нагрузку: остаются очереди, длинный контекст, потоковая выдача, tool calling, наблюдаемость и качество ответа на реальном маршруте. Все данные относятся к пилотному контуру, заказчик обезличен, а результаты отдельных замеров нельзя механически переносить на другое железо, модели и пользовательские сценарии.


