Почему inference в torch.compile тормозит на первом батче и как прогревать
Рейтинг: 52.3% · 11 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Почему inference в torch.compile тормозит на первом батче и как прогревать
Поставил torch.compile на сервинг, и первый запрос после старта пода летит 14 секунд вместо обычных 40мс. Дальше всё норм, но в k8s с readinessProbe это боль, под считается живым и в него сразу прилетает трафик, который висит. Torch 2.5.1, режим reduce-overhead. Кто как лечит этот первый батч?
✔ Лучший ответ сформирован автоматически — lostangel
У нас та же тема была на T4 в Селектеле. Решили в три захода и оно реально работает. Первое, mark_dynamic на ось длины. torch._dynamo.mark_dynamic(input_ids, 1) перед компиляцией, тогда дайнамо не плодит граф под каждую форму, а собирает один с символьной осью. Рекомпиляции почти ушли, осталась пара на крайних бакетах. Второе, бакетинг входов. Паддим до ближайшей степени из набора 64/128/256/512,…
Re: Почему inference в torch.compile тормозит на первом батче и как прогревать
это работает только если у тебя один фиксированный размер входа. у меня динамические длины последовательностей, и torch.compile рекомпилит граф на каждую новую форму. прогрел на 128 токенов, пришёл запрос на 200 и снова 9 секунд колом. так что одним warmup не отделаешьсяjoseph23 писал(а):прогревай фиктивным прогоном на старте до того как откроешь healthcheck
Re: Почему inference в torch.compile тормозит на первом батче и как прогревать
✔ Лучший ответ — сформирован автоматически
У нас та же тема была на T4 в Селектеле. Решили в три захода и оно реально работает.
Первое, mark_dynamic на ось длины. torch._dynamo.mark_dynamic(input_ids, 1) перед компиляцией, тогда дайнамо не плодит граф под каждую форму, а собирает один с символьной осью. Рекомпиляции почти ушли, осталась пара на крайних бакетах.
Второе, бакетинг входов. Паддим до ближайшей степени из набора 64/128/256/512, прогреваем все четыре на старте контейнера. Да, чуть лишних вычислений на коротких, зато формы стабильные и граф один на бакет.
Третье, кэш компиляции между рестартами. TORCHINDUCTOR_CACHE_DIR на примонтированный PVC, плюс с torch 2.4 есть mega-cache, дамп через torch.compiler.save_cache_artifacts. После рестарта пода inductor не пересобирает ядра с нуля, холодный старт упал с 14с до примерно 2с. И главное, readinessProbe вешай на отдельный эндпоинт, который отвечает 200 только после того как все бакеты прогреты. Тогда трафик не приходит в непрогретый под.
По итогу p99 на старте перестал скакать, и автоскейл перестал плодить полудохлые поды.
Первое, mark_dynamic на ось длины. torch._dynamo.mark_dynamic(input_ids, 1) перед компиляцией, тогда дайнамо не плодит граф под каждую форму, а собирает один с символьной осью. Рекомпиляции почти ушли, осталась пара на крайних бакетах.
Второе, бакетинг входов. Паддим до ближайшей степени из набора 64/128/256/512, прогреваем все четыре на старте контейнера. Да, чуть лишних вычислений на коротких, зато формы стабильные и граф один на бакет.
Третье, кэш компиляции между рестартами. TORCHINDUCTOR_CACHE_DIR на примонтированный PVC, плюс с torch 2.4 есть mega-cache, дамп через torch.compiler.save_cache_artifacts. После рестарта пода inductor не пересобирает ядра с нуля, холодный старт упал с 14с до примерно 2с. И главное, readinessProbe вешай на отдельный эндпоинт, который отвечает 200 только после того как все бакеты прогреты. Тогда трафик не приходит в непрогретый под.
По итогу p99 на старте перестал скакать, и автоскейл перестал плодить полудохлые поды.
Re: Почему inference в torch.compile тормозит на первом батче и как прогревать
вот это ключевое что все пропускают. у меня HPA на rps плодил поды в пик, они вставали в роутинг непрогретыми, p99 улетал в небо, HPA видел рост латенси и плодил ещё больше. петля. развязал именно отдельным проб-эндпоинтомlostangel писал(а):readinessProbe вешай на отдельный эндпоинт, который отвечает 200 только после того как все бакеты прогреты
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Запрос с JOIN тормозит на 5 секунд, EXPLAIN внутри — помогите разобраться
10 ответов · 645 просмотров
-
-
-
-
- Снесли все useMemo после включения React Compiler. Месяц в проде, делюсь цифрами
5 ответов · 12 просмотров
-
- React Compiler в стабильной версии: снес 250 useMemo с проекта и замерил. Чуда не случилось
6 ответов · 6 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость