Валера Ковальский

@neuraldeep · ai · Russian · active

Subscribers 17K tracking since 24 Oct
Reach per post (ERR) 43.8%7.4K avg views
Posting 1.1/day last 13 hours ago
Reactions per 1K views 13.9 🔥 ⭐ ❤
edited

Ваша локальная LLM 495 раз подряд написала "I will not use any tool, I will just reply"? Тогда мы с вами по весне можем спокойно отъехать в дурку) Потому что вопрос циклов парит меня последние пол года очень сильно Но теперь о главном Каждый десятый токен на GPU в хабе был мусором Как нашёл и как додумался во сне до решения, ну а где ещё Больше всего меня беспокоило, что хочу детектить циклы не трогая сам движок, vllm или sglang Проблема На длинном лейне в 256к токенов отказы шли ровно по таймауту, а железо живое, хелс говорит всё ок И тут как раз зашёл разговор про такой же вопрос с Серегой И я склеил то что приснилось, то что беспокоило и что теперь с этим делать Полез в логи, модель уходит в цикл и молотит одно и то же до max_tokens За сутки 250 генераций длиннее 20 тысяч токенов, в среднем по 37 тысяч токенов и 9 минут на запрос Вы на хабе всё равно получали мусор, просто через 10 минут =) Эксперимент Семплерный loop guard уже пробовали, он принял восемь одинаковых JSON за цикл и сломал клиенту ответ Копать глубже можно, но для такой задачи это как-то не идеально Поэтому в движок не лезем Поставили маленький гейт на Go между шлюзом и vLLM Первым шагом все запросы без стрима гейт шлёт в движок со stream=true и склеивает клиенту обычный ответ Так проще склеивать и отдавать, если человек решил что ему нужен stream=false Тут есть дыра, скажете вы, можно сломать тулколы тем кто шлёт stream=false И будете правы Но по моей арифметике поломка в таком режиме это 0.002% от 238к запросов в сутки Дальше считаем повторы кусков по 32 слова, включаемся только после 3000 слов Полтора дня гейт только смотрел и ничего не трогал, это было начало месяца Данные За сутки циклы держали слоты 25 часов После поимки цикла модель догенерировала бы ещё 5.8 млн токенов в сутки, это около 10% всей генерации лейна 482 из 587 пойманных циклов дошли до max_tokens У живых ответов 32-словный кусок почти не повторяется, у циклов 16 раз и больше Порог поставили ровно в эту пустую полосу Результат Поймали цикл, рвём и тихо запускаем заново с другим seed и presence_penalty, до 3 попыток За 16 дней мусора после поимки десятки тысяч токенов в сутки вместо 5.8 млн 3094 запроса вылечились перезапуском, 92% с первой попытки, 202 получили обрезок Отдельно прочитали 510 ответов по JSON-схеме которые гейт оборвал, ложных срабатываний не нашли Компромиссы 1. Обрезанный ответ приходит как length, хотя лимит клиента не достигнут, тут ещё думаю как не поломать всем 2. В стриме в рассуждениях остаётся кусок мусора от первой попытки 3. Seed и presence_penalty подменяем, воспроизводимость по seed пропадает 4. Цикл ловим в среднем на 30-й секунде, ответ приходит позже, можно раньше но есть риск промахнуться И серая зона, длинные ревью которые ходят по кругу Это тоже деградация, но начало у них полезное, сейчас учим гейт отдавать его без зацикленного хвоста Без гейта было хуже по всем пунктам сразу, поэтому оставили Если у вас свои модели или вы llmops и не придумали что делать с циклами, скорее всего у вас то же самое, просто вы не считали Можно встроить в свой прокси или поставить перед LiteLLM Собрал скилл для Claude Code и Codex, агент сам запрогает гейт и подберёт порог по вашим логам В neuraldeep.ru механизм встроен на все лейны qwen https://github.com/vakovalskii/loop-gate-skill

Views over time

02K4K23 Oct 00:3824 Oct 07:044.3K23 Oct 00:38: 0 views24 Oct 02:06: 4,120 views24 Oct 07:04: 4,270 views
Snapshots we took after posting.
WhenViews
23 Oct 2026, 00:380
24 Oct 2026, 02:064.1K
24 Oct 2026, 07:044.3K

Who shared this post

Posts in other channels we index that link to this one. (Forwards with a hidden source can't be traced.)

Nobody yet.