ИнфраструктураAPI / Продукт · В работуХабр: Машинное обучение→ оригинал

Холодный старт LLM в Kubernetes: 200 из 294 секунд уходят не на загрузку весов

Если запросы к LLM приходят пару раз в день, держать GPU-ноду круглосуточно дорого. Можно гасить поды и поднимать их по запросу, но первый пользователь ждёт минуты. В замере Tensorfuse запуск Llama 3.1 8B на L40S занял 294 секунды, и загрузка весов съела лишь 94 из них.

AI-обработка оригинала Хабр: Машинное обучение; редакция Hamidun News
Холодный старт LLM в Kubernetes: 200 из 294 секунд уходят не на загрузку весов
Источник: Хабр: Машинное обучение. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникХабр: Машинное обучение ↗
Главный редактор
Ключевой факт #1Остальные 200 секунд уходят на компиляцию, CUDA graphs и инициализацию
Ключевой факт #2Результаты прогрева можно кэшировать на ноде, а не повторять в каждом поде
Ключевой факт #3KEDA HTTP Add-on держит запрос, пока модель не поднимется

Идея звучит заманчиво: запросы к модели приходят несколько раз в день, а платить за GPU-ноду приходится 24/7. Логичный ход — удалять поды между запросами и поднимать их, когда появляется нагрузка. Для обычного веб-сервиса это работает: задержка в пару секунд никого не смутит. С LLM всё иначе.

Почему LLM стартует так долго

После запуска пода модели нужно скачать образ, загрузить веса в GPU, скомпилировать графы и прогреть движок. В июле команда H Company писала, что новая реплика их крупнейших моделей выходила в готовность до 27 минут. Они используют vLLM на GPU-нодах Kubernetes и добавляют реплики по мере роста нагрузки от агентов. Автоскейлер поднимает число подов быстро, но все эти этапы настройками масштабирования не ускорить.

Автор разбора ожидал, что основное время съедает загрузка весов. Публичные замеры показали другое. У Tensorfuse запуск Llama 3.1 8B на L40S занял 294 секунды. На скачивание модели и перенос весов в GPU ушло только 94. Оставшиеся 200 секунд — компиляция, захват CUDA graphs, инициализация движка и импорты.

Что можно кэшировать

Важная деталь: значительная часть этой работы повторяется при каждом старте пода, хотя её результаты можно сохранить на ноде. Это и есть главный резерв ускорения. Если держать на ноде артефакты компиляции и заранее подтягивать веса, новый под не начинает с нуля.

В полной статье автор обещает разобрать практическую часть:

  • откуда KEDA получает сигнал о нагрузке, когда подов нет вообще;
  • что стоит закэшировать заранее;
  • какие таймауты позволят первому запросу дождаться модели;
  • манифесты KEDA HTTP Add-on, DaemonSet для предзагрузки и настройки vLLM.

Отдельный пункт — сигнал о нагрузке. Когда подов нет, метрики с них взять неоткуда, поэтому нужен компонент перед сервисом. KEDA HTTP Add-on как раз перехватывает запрос, поднимает под и удерживает соединение, пока модель не будет готова. Здесь критичны таймауты: клиент, шлюз и ingress не должны оборвать соединение раньше, чем модель прогреется.

Ограничения и вывод

Даже после всех оптимизаций холодный старт не станет секундным. Если у вас интерактивный чат, где пользователь не готов ждать минуту, scale-to-zero будет плохим выбором. Для фоновых задач, внутренних инструментов, батчей и агентов, которые терпят задержку, схема может сэкономить заметные деньги.

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

И последнее: оцените профиль нагрузки честно. Если запросы редкие и предсказуемые, нулевая реплика окупается. Если пользователи ждут ответа здесь и сейчас, лучше оставить одну тёплую реплику и платить за неё, а не за потерянных клиентов.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: почему LLM стартует так долго?

После запуска пода модели нужно скачать образ, загрузить веса в GPU, скомпилировать графы и прогреть движок. В июле команда H Company писала, что новая реплика их крупнейших моделей выходила в готовность до 27 минут. Они используют vLLM на GPU-нодах Kubernetes и добавляют реплики по мере роста нагрузки от агентов. Автоскейлер поднимает число подов быстро, но все эти этапы настройками масштабирования не ускорить. Автор разбора ожидал, что основное время съедает загрузка весов. Публичные замеры показали другое.

Что известно по теме: что можно кэшировать?

Важная деталь: значительная часть этой работы повторяется при каждом старте пода, хотя её результаты можно сохранить на ноде. Это и есть главный резерв ускорения. Если держать на ноде артефакты компиляции и заранее подтягивать веса, новый под не начинает с нуля.

Что известно по теме: ограничения и вывод?

Даже после всех оптимизаций холодный старт не станет секундным. Если у вас интерактивный чат, где пользователь не готов ждать минуту, scale-to-zero будет плохим выбором. Для фоновых задач, внутренних инструментов, батчей и агентов, которые терпят задержку, схема может сэкономить заметные деньги. Практический вывод для платформенных инженеров: прежде чем оптимизировать скачивание весов, посмотрите, куда реально уходит время.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…