Оглавление: болевые точки · матрица · curl и пороги · покупка и аренда · шесть шагов приёмки · FAQ
Командам на Mac mini M4 и сопоставимых узлах нужен один лист: как клиенты переиспользуют соединения, сколько одновременных диалогов допустимо и сколько памяти остаётся под KV после macOS и фоновых демонов. Финансы спрашивают не про токенизатор, а про налог на установку соединения, p95 и давление памяти при параллельных сессиях. Дайте им таблицу с именованными ручками и журнал soak, где пороги держались стабильно. Дополнительно сверьтесь с матрицей LM Studio и llama-server, роутингом OpenClaw и vLLM, мульти-модельным роутингом и стоимостью, а также с llama.cpp и Ollama на M4 и MLX-LM, Transformers и KV, чтобы истории про шлюзы не расходились с реальностью Apple Silicon.
Если Linux держит vLLM, а Mac — только фронт, явно укажите, на каком хопе живёт KV и кто завершает TLS. Иначе сравнение «Mac против vLLM» превращается в разговор о разных продуктах без общей оси измерений.
Болевые точки
- Частая смена соединений: холодный TLS на каждом запросе даёт хвосты, похожие на «медленную модель», хотя декодер простаивает.
- Раздувание слотов: рост числа параллельных чатов без расчёта KV заполняет unified memory, пока tok/s ещё выглядит прилично.
- Смешение брендов и ролей: слово «vLLM» без схемы потока не объясняет, где очередь, где отказ и где резидентность кэша.
Матрица решений
Используйте таблицу как контракт до продакшн-трафика. Строки перекалибруйте под квант, фактический максимум контекста и дефолт стриминга: нестриминговые ответы маскируют провалы decode, но не освобождают от обязательств по памяти. Если Mac проксирует на Linux с GPU, продублируйте транспортный блок для каждого сегмента пути.
| Измерение | llama.cpp server | API класса vLLM | Удалённый Mac |
|---|---|---|---|
| Keep-Alive | Тёплые сокеты помогают; выровняйте idle-timeout прокси и сервера. | Шлюзы мультиплексируют; простаивающие потоки всё равно расходуют бюджет decode. | A/B на том же VPN: с повторным использованием и с заголовком Connection: close. |
| Слоты | Флаги параллелизма отображаются на KV, который можно оценить заранее. | Смотрите задержку очереди и отказы, а не только HTTP 200. | Ограничьте in-flight на шлюзе до контракта по памяти Mac. |
| Бюджет KV | Веса и KV в unified memory на одном кристалле. | На GPU-хосте другая геометрия; фронт на Mac держите «узким». | Сначала зарезервируйте гигабайты под macOS и ваши демоны. |
| Операционная поверхность | Мало движущихся частей, флаги в git. | Больше маршрутов и политик для фиксации в runbook. | Залогируйте, кто на арендованном хосте завершает TLS. |
| Согласование стоимости | Аренда и энергия в одной строке отчёта. | Разделите Mac-шлюз, GPU и egress. | К журналу soak приложите почасовую модель burn rate. |
Curl-пробы и пороги нагрузки
Запускайте пару запросов: сначала с обычным keep-alive, затем с явным закрытием соединения, чтобы изолировать «налог» на установку транспорта. Подставьте хост, токен и идентификатор модели; путь /v1/chat/completions подходит и для llama.cpp server в OpenAI-режиме, и для совместимых шлюзов. В протокол испытаний добавьте код HTTP, время стены и факт возобновления TLS — тогда смена VPN или MTU видна в той же тетради, что и метрики модели.
curl -sS --http1.1 -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"model":"local","messages":[{"role":"user","content":"ping"}],"max_tokens":32}' http://127.0.0.1:8080/v1/chat/completionsЗамените TOKEN, local и URL на значения вашего контура; для холодного пути добавьте -H "Connection: close" ко второму вызову и сравните time_total.
for i in $(seq 1 60); do curl -sS --http1.1 -o /dev/null -w "%{http_code} %{time_total}\n" -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"model":"local","messages":[{"role":"user","content":"ping"}],"max_tokens":16}' http://127.0.0.1:8080/v1/chat/completions; doneПосле «чистых» шестидесяти одноходовых запросов включите смесь стриминга на 600 секунд в профиле, близком к бою. Ниже — операционные пороги относительно зафиксированной базовой линии на том же артефакте весов и бинаря.
| Метрика | Порог «красная зона» | Действие |
|---|---|---|
| TTFT p95 (короткий промпт) | > 1,2 с | Проверить транспорт, затем слоты и prefill. |
| Стриминг: p95 межтокенного интервала | > 120 мс | Снизить параллель или контекст; сверить квант. |
| Ошибки 5xx и таймауты | > 2 % за окно soak | Таймауты прокси, размер буфера, политика retry. |
| Давление памяти (жёлтый/красный) | красный > 45 с подряд под нагрузкой | Уменьшить слоты, контекст или агрессию батча. |
| Удвоение параллельности | p95 TTFT хуже однопоточного более чем на +15 % | Резать очередь на шлюзе до согласованного KV. |
| Свободная RAM к заявленному потолку | < 3 ГБ запаса | Пересмотреть кэп контекста, число сессий, фоновые задачи. |
Одна строка в бюджете: покупка или аренда удалённого Mac
Покупка оправдана, когда нужна многоквартальная работа 24/7, жёстко зафиксированный контур безопасности и вы хотите вынести железо в капекс с предсказуемой амортизацией вместо ежемесячной аренды. Аренда удобнее для прозрачного почасового burn rate, коротких окон soak перед релизом и когда важны однотипные конфигурации M4 без логистики доставки. На выделенном арендованном узле измерения keep-alive и KV обычно чище: нет сна крышки ноутбука, меньше фоновых «фотопайплайнов» и десктопных агентов, проще доказать финансам, что хвосты связаны с моделью, а не с локальной ОС. Покупка не освобождает от тех же curl-пар и шестисотсекундного soak — меняется только класс затрат и ответственность за обслуживание. В обоих случаях приложите к отчёту одинаковые хеши весов, дайджест образа или коммита и повторите пробы на выбранном узле до подписания.
Шесть шагов приёмки
- Закрепить артефакты: контрольная сумма весов, коммит или дайджест сервера, шаблон чата.
- Описать транспорт: версия HTTP, idle-timeout прокси, MTU VPN, пул соединений клиента.
- Слоты и KV: максимальный контекст на сессию умножить на число параллельных потоков и сравнить с запасом памяти.
- Curl A/B: тёплый сокет против
Connection: close, затем стриминговая смесь. - Soak 600 с: TTFT, p95 стрима, RSS, своп, цвет давления памяти.
- Экономика: почасовая аренда или амортизированная покупка плюс краткая оценка риска инцидентов.
- 600 с устойчивого decode перед промоутом конфигурации.
- +15 % к p95 TTFT при удвоении параллельности — верхняя граница без пересмотра контракта.
- ≥ 3 ГБ свободной памяти к заявленному потолку под нагрузкой.
FAQ
Нужен ли ассистентам один пул HTTP-клиентов? Да, если циклы инструментов плодят запросы; верхнюю границу соединений привяжите к той же политике слотов, что и на сервере, чтобы пул не обходил лимиты KV мимо ревью.
Если vLLM только на Linux, можно игнорировать память Mac? Только если Mac не удерживает KV для этих сессий. Если на Mac висит локальная модель, TLS-терминация или липкие сессии, бюджетируйте обе стороны и логируйте request id на каждом хопе.
Самый дешёвый сигнал отказа? Пара curl warm-versus-close, затем два параллельных стриминговых чата на максимальном для runbook контексте: если давление памяти вспыхивает за минуты, режьте слоты раньше, чем трогать ядро ОС.
Публично без входа: тарифы, покупка и аренда, технический блог, главная.
Итог: честно переиспользуйте соединения, ограничивайте слоты расчётом KV, начинайте приёмку с curl до тяжёлых генераторов нагрузки и прикладывайте к журналу soak на 600 секунд и коротким curl-сериям строку бюджета — покупка или аренда — чтобы инженерные пороги и деньги оказались на одной странице.