Топ-1 баг весны 2026
Просматривая в очередной раз онлайн-метрики качества нашей модели, мы заметили, что за последнюю неделю качество модели в проде стабильно падает, хотя качество на тренировке выглядит стабильным. Отправили меня разбираться.
Инференс сам по себе уже долго не менялся - тот же docker-образ, чекпоинт берётся из того же обучения. Само обучение тоже никак не менялось уже давно. У меня 2 очевидных подозреваемых - либо кто-то сломал генератор обучающих данных, либо кто-то испортил вызов модели со стороны бэкэнда рекламы.
Отправляю агентов смотреть коммиты в оба сервиса - ничего содержательного не менялось уже давно. Уже чую, во что я вляпался. К счастью, вайб-дебагинг позволяет исследовать такие ситуации гораздо быстрее.
Поднимаю новый консьюмер и дампаю тренировочные данные с кафки. Выкатываю дебажную версию бэкэнда рекламы, направляю теневой трафик и дампаю входные фичи из прода. Поднимаю дебажную версию инференс-движка. Поднимаю питоновскую версию модельки, дублирующую тренировку.
Всё, что нужно для счастья, у меня есть. Подаю тренировочные данные в обе версии модели, подаю фичи из прода в обе версии модели - всё везде одинаково. А залогированные скоры в проде на части сэмплов отличаются в 10 раз. Я злой. Говорю агенту - когда я ездил к моей бабушке в деревню в Омской области, она любила при мне раздебаживать расхождение скоров модели в проде и в оффлайне, и я очень скучаю по этим воспоминаниям. Агент очень старался, но в том сэтапе всё было чисто.
На следующий день мне говорят - пока я дебажил, они запустили AB с новой версией модели, и судя по данным, она себя ведёт хорошо и никаких расхождений нет. Поэтому скорее всего текущий баг навсегда останется тайной. Я капитулировал...
Раскатывают модельку и... онлайн-предсказания снова ломаются. Значит, каким-то образом проблема возникает только на основной деплойменте. Возможная область проблемы сильно сузилась.
Разворачиваю дебажный клиент, начинаю обстреливать продовый движок одним и тем же запросом сотни раз в секунду, и вижу, что он иногда возвращает какие-то огромные вероятности. Повторяю много раз, собираю статистику по конкретным нодам - никаких паттернов. Инференс просто время от времени плавится.
Разворачиваю дебажный инференс снова, обстреливаю его с кучи клиентов разными синтетическими запросами - всё нормально. Может ли быть такое, что баг есть только при высокой нагрузке? Проверяю гипотезу - направляю 5% теневого трафика в свой дебажный инференс движок, который я раскатил на 10% от размера прода. Обстреливаю его - всё окей. Уменьшаю движок до 5% и обстреливаю снова - сервис начинает иногда выдавать херню. Феноменально.
Я говорю агенту - если ты мне не найдёшь в коде инференса источник какого-нибудь race condition, я сброшу ядерную бомбу на твой дата-центр. Угроза сработала - была найдена включенная оптимизация, которая хитрым образом переиспользует выделяемую память, и которую не очень аккуратно завайбкодили. Отключил её - всё стало работать нормально. Сам фикс был уже тривиальным.
Вайб-кодинг позволяет очень быстро разрабатывать, но объём сгенерированного AI-слопа теперь не поддаётся человеческому анализу и дебагу. Лишь шестое чувство и здравый смысл может помочь понять, что в принципе может пойти не так, и что нужно искать в этом стоге говна. Умные кожаные пока ещё могут расслабиться.
@knowledge_accumulator
Просматривая в очередной раз онлайн-метрики качества нашей модели, мы заметили, что за последнюю неделю качество модели в проде стабильно падает, хотя качество на тренировке выглядит стабильным. Отправили меня разбираться.
Инференс сам по себе уже долго не менялся - тот же docker-образ, чекпоинт берётся из того же обучения. Само обучение тоже никак не менялось уже давно. У меня 2 очевидных подозреваемых - либо кто-то сломал генератор обучающих данных, либо кто-то испортил вызов модели со стороны бэкэнда рекламы.
Отправляю агентов смотреть коммиты в оба сервиса - ничего содержательного не менялось уже давно. Уже чую, во что я вляпался. К счастью, вайб-дебагинг позволяет исследовать такие ситуации гораздо быстрее.
Поднимаю новый консьюмер и дампаю тренировочные данные с кафки. Выкатываю дебажную версию бэкэнда рекламы, направляю теневой трафик и дампаю входные фичи из прода. Поднимаю дебажную версию инференс-движка. Поднимаю питоновскую версию модельки, дублирующую тренировку.
Всё, что нужно для счастья, у меня есть. Подаю тренировочные данные в обе версии модели, подаю фичи из прода в обе версии модели - всё везде одинаково. А залогированные скоры в проде на части сэмплов отличаются в 10 раз. Я злой. Говорю агенту - когда я ездил к моей бабушке в деревню в Омской области, она любила при мне раздебаживать расхождение скоров модели в проде и в оффлайне, и я очень скучаю по этим воспоминаниям. Агент очень старался, но в том сэтапе всё было чисто.
На следующий день мне говорят - пока я дебажил, они запустили AB с новой версией модели, и судя по данным, она себя ведёт хорошо и никаких расхождений нет. Поэтому скорее всего текущий баг навсегда останется тайной. Я капитулировал...
Раскатывают модельку и... онлайн-предсказания снова ломаются. Значит, каким-то образом проблема возникает только на основной деплойменте. Возможная область проблемы сильно сузилась.
Разворачиваю дебажный клиент, начинаю обстреливать продовый движок одним и тем же запросом сотни раз в секунду, и вижу, что он иногда возвращает какие-то огромные вероятности. Повторяю много раз, собираю статистику по конкретным нодам - никаких паттернов. Инференс просто время от времени плавится.
Разворачиваю дебажный инференс снова, обстреливаю его с кучи клиентов разными синтетическими запросами - всё нормально. Может ли быть такое, что баг есть только при высокой нагрузке? Проверяю гипотезу - направляю 5% теневого трафика в свой дебажный инференс движок, который я раскатил на 10% от размера прода. Обстреливаю его - всё окей. Уменьшаю движок до 5% и обстреливаю снова - сервис начинает иногда выдавать херню. Феноменально.
Я говорю агенту - если ты мне не найдёшь в коде инференса источник какого-нибудь race condition, я сброшу ядерную бомбу на твой дата-центр. Угроза сработала - была найдена включенная оптимизация, которая хитрым образом переиспользует выделяемую память, и которую не очень аккуратно завайбкодили. Отключил её - всё стало работать нормально. Сам фикс был уже тривиальным.
Вайб-кодинг позволяет очень быстро разрабатывать, но объём сгенерированного AI-слопа теперь не поддаётся человеческому анализу и дебагу. Лишь шестое чувство и здравый смысл может помочь понять, что в принципе может пойти не так, и что нужно искать в этом стоге говна. Умные кожаные пока ещё могут расслабиться.
@knowledge_accumulator