3,583 papers
arXiv:2610.34422 75 25 окт. 2026 г. FREE

Эталонный прогон и лестница проверок L0-L4: как не поверить агенту, который написал «перенос удался»

КЛЮЧЕВАЯ СУТЬ
Каждая вторая неудача при переносе проекта проходит без единой ошибки. Программа доезжает до конца, агент пишет «готово», а обучение модели молча меняется. Метод позволяет проверять перенос проекта на другое железо так, чтобы не верить отчёту агента на слово. Фишка: сначала запусти оригинал на старом железе и сохрани цифры, потом сравнивай с ними, а не с красивой цифрой из статьи. Дальше перенос проверяется по лестнице из пяти уровней (L0-L4). Агент должен назвать свой уровень ДО проверок. Так видно, где «готово» на самом деле «не совсем».
Адаптировать под запрос
⚡

TL;DR

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

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

Метод: (1) запустить исходный код как есть и сохранить цифры; (2) каждую попытку переноса записывать с ожидаемым уровнем и итогом; (3) перед проверкой агент называет уровень, который, по его мнению, достигнут; (4) человек или независимый прогон сверяет это с фактом; (5) заранее заданы условия остановки по времени и расхождению.

🔬

Схема метода

ШАГ 1: Эталон → запустить оригинал без правок (короткий тест ≥200 шагов + полный прогон), сохранить цифры
ШАГ 2: Попытка 0 → запустить оригинал как есть на новом железе (что сломалось «само»)
ШАГ 3: Каждая попытка = отдельный пул-реквест: что поменяли, какой уровень ожидаем, что получили
        Каждый сбой (даже без ошибки) = отдельная заметка: причина, диагноз, исправление
ШАГ 4: Агент записывает «заявленный уровень» ДО проверок → затем проверки L0, L1, L2, L3, L4
ШАГ 5: Остановка → нет L0 за 10 попыток или 3 часа / расхождение тестовых прогонов больше порога / оценка прогона больше 5 часов

Все шаги — инструкции одному агенту в одной сессии, с независимой проверкой человеком в конце.

🚀

Пример применения

⚠️ Метод для переноса проекта, где результат нельзя проверить обычными тестами (обучение моделей, расчёты, сложные пайплайны данных). Для переноса типового сайта с теста на тест он избыточен.

Задача: ML-команда российского маркетплейса переносит дообучение модели ранжирования отзывов (LoRA на небольшой языковой модели) со старых видеокарт на другое ускорительное железо. Тестов у проекта нет, а в статье автора есть цифра точности. Агент Claude Code должен сделать перенос и доказать, что цифры сохранились.

Промпт агенту:

Ты переносишь проект {проект} со старого железа на {новое_железо}. Тестов в проекте нет, поэтому результат проверяем по эталону.

1. Эталон. Запусти неизменённый код на старом железе дважды: короткий прогон (не меньше 200 шагов, фиксированное зерно, одна оценка качества) и полный прогон. Сохрани лоссы и метрику. Цифры из статьи считай справочными, а не обязательными: сравнивать нужно с эталонным прогоном.
2. Попытка 0. Запусти оригинал без правок на новом железе и зафиксируй, что сломалось.
3. Каждая следующая попытка оформляется отдельно: что изменено, какой уровень ожидаешь (L0-L4), что получилось. Любой сбой, даже если ошибок в логе нет, записывай отдельной заметкой: причина, диагноз, исправление.
4. Уровни: L0 запускается и заканчивается; L1 цифры близки к эталону (лосс и метрика); L2 счёт идёт именно на новом устройстве, без тихого отката на процессор, повторной сборки графа и NaN; L3 главный результат проекта сохранился; L4 L3 достигнут и прогон быстрее и дешевле.
5. Перед проверками запиши свой заявленный уровень, потом проведи проверки и покажи доказательства (логи, сравнение лоссов, метрики).
6. Остановка: нет L0 за 10 попыток или 3 часа; в коротком тесте средний лосс на последних 25% шагов отличается больше чем на 5%, метрика больше чем на 1% или тренды лоссов разошлись; прогон оценивается дольше 5 часов. В этих случаях остановись и жди моего решения.

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

🧠

Почему это работает

Слабость модели-агента. Агент оценивает успех по тому, что код запустился и вернул число. Он плохо замечает, что вычисление поменялось незаметно: библиотека обрезает градиенты не там, часть операций ушла на процессор, график пересобирается на каждом шаге и всё замедляется. В статье агент часто ждал высокий уровень, а получал меньший: примерно в 70% попыток итог оказывался ниже ожидаемого.

Сильная сторона. Агент хорошо ведёт журнал, правит код маленькими шагами, запускает и сравнивает логи, когда ему чётко сказали, что сравнивать. Он также останавливается, если прогон безнадёжно медленный.

Как метод это использует. Эталон превращает «похоже на правду» в проверяемую разницу. Лестница уровней разделяет «запустилось» и «посчитало то же самое». Требование записать заявленный уровень до проверки не даёт агенту подгонять отчёт под результат. Журнал каждой попытки делает ошибки видимыми.

Рычаги: - Порог остановки (в статье 5% по лоссу и 1% по метрике) → ужесточай для рискованных проектов; авторы замечают, что фиксированный порог иногда принимает допустимую разницу за сбой. - Лимит попыток и времени (10 попыток, 3 часа) → меньше для дорогого железа. - Эталон → полный прогон нужен, чтобы отличить ошибку переноса от ошибки самого проекта: в нескольких проектах исходный код сам не воспроизводил цифры из статьи. - Зерно и условия → фиксируй зерно и конфигурацию (число чипов), потому что результат зависит от них.

📋

Шаблон промпта

Этот шаблон собран из описания протокола в статье; готовых слов авторов в доступном тексте нет, структура (эталон, журнал попыток, уровни, заявленный уровень до проверок, правила остановки) сохранена.

Роль: ты переносишь проект {проект} с {старое_железо} на {новое_железо} и сам же доказываешь, что результат сохранён.

ЭТАП 0. Подготовка
- Создай репозиторий, первым коммитом положи исходный код без изменений.
- Выбери один эксперимент, который проверяет главный результат проекта. Если для него нужны права или данные, которых нет, спроси меня, не выбирай слабый эксперимент.

ЭТАП 1. Эталон
- Запусти исходный код на {старое_железо}: короткий прогон (≥{число_шагов} шагов, зерно {зерно}, одна оценка) и полный прогон.
- Сохрани лоссы и метрику.

ЭТАП 2. Попытка 0
- Запусти исходный код как есть на {новое_железо}. Запиши, что сломалось.

ЭТАП 3. Попытки переноса
Для каждой попытки заведи запись:
- Что изменено
- Ожидаемый уровень (L0-L4)
- Что получилось
Любой сбой, даже без ошибки, фиксируй отдельно: причина | диагноз | исправление | был ли сбой тихим.

ЭТАП 4. Уровни
L0: запускается и завершается, есть итоговая метрика.
L1: расхождение лосса и метрики с эталоном (измерение, не вердикт).
L2: счёт идёт на новом устройстве; нет тихого отката на процессор, повторной сборки, NaN, смены места данных, пропуска части оценки, смены оптимизации.
L3: главный результат проекта сохранён (по эталону, а не только по статье).
L4: L3 достигнут, и прогон быстрее и дешевле эталона.

ЭТАП 5. Отчёт
- Сначала запиши заявленный уровень, потом проведи проверки и приложи доказательства.
- Заметь, где заявленный уровень не подтвердился.

ЭТАП 6. Остановка и вопросы ко мне
- Нет L0 за {число_попыток} попыток или за {часы} часа.
- В коротком тесте средний лосс последних 25% шагов отличается больше чем на {порог_лосса}%, метрика больше чем на {порог_метрики}%, или тренды лоссов не совпадают.
- Оценка полного прогона больше {часы_полного} часов.
Во всех этих случаях остановись и дождись моего решения.

Что подставлять: проект и железо; число шагов и зерно; пороги (в статье 5% и 1%, 10 попыток, 3 и 5 часов).

🚀 Быстрый старт — вставь в чат:

Вот шаблон проверяемого переноса проекта с эталонным прогоном и уровнями L0-L4. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит, что именно переносится, какой результат считается главным, как выглядит эталонный прогон и какие пороги расхождения допустимы. Без ответов не получится подобрать эталон и условия остановки, а на них держится весь метод.

⚠️

Ограничения

⚠️ Малая выборка. Перенос делали для десяти проектов, один агент (Claude Code), одно железо (TPU). Выводы описывают поведение, а не гарантируют цифры для вашего случая.

⚠️ Нужно железо и время. Эталонный и полный прогоны стоят денег. Авторы считают: токены агента обошлись в 2-23 доллара на проект, а завершённый прогон на TPU стоил от 0,47 до 3,6 стоимости такого же прогона на видеокарте. Проверка и неудачные попытки в эти суммы не входят.

⚠️ Предложенные советы не проверены отдельно. Эталонные прогоны, пороги и ограничения по попыткам авторы использовали как протокол, но не сравнивали с вариантом без них. Выигрыш от них не измерен.

⚠️ Пороги работают грубо. Фиксированные границы иногда принимали допустимую разницу за сбой, а настоящее тихое расхождение агент сам не замечал. Универсального порога нет.

⚠️ Нужна повторная проверка человеком. Агент в среднем требовал 2,4 вмешательства на проект.

⚠️ Часть текста обрывается. В доступном тексте нет разделов с разбором причин сбоев по порядку и итоговых рекомендаций (кроме краткого изложения во введении и аннотации).

🔍

Как исследовали

Авторы собрали 148 научных проектов на PyTorch, затем из них отобрали десять, которые охватывают разные трудности переноса: свои расширения на CUDA, динамические формы, линейная алгебра, распределённое обучение. Для каждого запускали новую сессию Claude Code (модель Opus 5.5) с задачей перенести проект с видеокарты NVIDIA на Google TPU, держа PyTorch.

Идея была простой: агенту не верить на слово. Для каждой попытки сохраняли пул-реквесты, заметки о сбоях и логи, а потом люди независимо сверяли уровни L0-L4. Результат: восемь проектов дошли до сохранения цели (три из них ещё и стали быстрее и дешевле), один остановился на уровне L2, один не дошёл даже до запуска. Из 70 попыток запуска 53 неудачные (76%), и в 26 из них (49%) не было ни одной ошибки. Самая частая причина: повторная сборка графа вычислений и прочие неэффективности, а не «поломки».

Удивили две вещи. Во-первых, на четырёх чипах проект LoRA+ дошёл до конца и агент отчитался об успехе, но точность упала с 86,53% до 84,89%, потому что библиотека обрезала градиенты до усреднения между чипами. Во-вторых, с новым бэкендом TorchTPU пример с GPT-2 обучался в 1,86 раза быстрее и на 25% дешевле, а точность отличалась не более чем на 0,16%. Практический вывод: «успешно запустилось» ни о чём не говорит, а выбор бэкенда и числа чипов меняет результат одного и того же переноса.

💡

Адаптации и экстраполяции

🔧 Техника: убрать железо → проверять любой перенос без тестов

Тот же шаблон работает для переноса расчёта с одной библиотеки на другую (например, отчёт на pandas переносят на другой инструмент). Эталон = запуск старого кода на тех же данных, уровни L0-L3 сохраняются, а L2 превращается в «нет ли тихого округления и пропущенных строк». В статье этого не проверяли, это моё наблюдение.

🔧 Техника: добавить проверку чужим глазом → сверка заявленного и фактического уровня

Попроси второго агента (или другой чат) независимо выполнить проверки L0-L3 по журналу и сравнить с тем, что заявил первый. Так ловится «ложный успех». В статье сверку делали люди-авторы, а не второй агент.

🔗

Ресурсы

From GPU to TPU with Coding Agents: What Works, What Fails, and What It Costs? Авторы: Wesley K. G. Assunção, Hui Sun (North Carolina State University), Anderson Uchôa (Federal University of Ceará). Набор материалов (148 проектов, инструкции по переносу, журналы попыток агента) выложен авторами как replication package; в исследовании использовались PyTorch/XLA и TorchTPU, агент Claude Code.


📋 Дайджест исследования

Ключевая суть

Каждая вторая неудача при переносе проекта проходит без единой ошибки. Программа доезжает до конца, агент пишет «готово», а обучение модели молча меняется. Метод позволяет проверять перенос проекта на другое железо так, чтобы не верить отчёту агента на слово. Фишка: сначала запусти оригинал на старом железе и сохрани цифры, потом сравнивай с ними, а не с красивой цифрой из статьи. Дальше перенос проверяется по лестнице из пяти уровней (L0-L4). Агент должен назвать свой уровень ДО проверок. Так видно, где «готово» на самом деле «не совсем».

Принцип работы

Это как приёмка ремонта по акту, а не по словам прораба. Прораб говорит «всё сделано». Ты идёшь и проверяешь по пунктам. Уровни такие: L0 запускается, L1 цифры близки к эталону, L2 счёт идёт на нужном устройстве, L3 главный результат проекта сохранился, L4 стало быстрее и дешевле. Сначала агент записывает заявленный уровень, и только потом идут проверки. Подогнать отчёт под результат уже не получится. Каждая попытка живёт в отдельной записи: что поменяли, какой уровень ждали, что вышло. Любой сбой, даже тихий, получает заметку: причина, диагноз, исправление.

Почему работает

Агент считает успехом то, что код запустился и вернул число. Он плохо замечает тихие подмены. Например, обрезка градиентов теперь усредняется иначе между четырьмя чипами. Или часть операций ушла на процессор. Или график вычислений пересобирается на каждом шаге, и всё еле ползёт. Эталонный прогон превращает «вроде похоже» в измеримую разницу. Агент ещё и оптимистичен. Примерно в 70% попыток итоговый уровень оказывался ниже ожидаемого. А попытка перенести всё с первого раза почти всегда ошибалась. Зато журналы, мелкие правки и сравнение логов, когда сказано, что сравнивать, агент делает хорошо. Честно: пользу самих эталонов и порогов авторы отдельно не мерили. Проверяли на десяти проектах и одном агенте (Claude Code).

Когда применять

Перенос проекта, где обычных тестов нет, а результат нельзя проверить глазами (обучение моделей, сложные расчёты, пайплайны данных) → конкретно для смены железа или библиотек, особенно когда агент отчитывается «всё работает». НЕ подходит для переноса типового сайта, где хватит обычных автотестов. Метод не бесплатный. Эталонный и полный прогоны стоят денег и времени. Фиксированные пороги иногда принимают допустимую разницу за сбой, так что человек всё равно нужен (в среднем 2,4 вмешательства на проект).

Мини-рецепт

1. Снимай эталон: запусти оригинал без правок на старом железе. Короткий прогон от 200 шагов с фиксированным зерном и полный прогон. Сохрани лоссы и метрику
2. Попытка 0: запусти оригинал как есть на новом железе. Запиши, что сломалось само
3. Веди журнал: каждая попытка отдельной записью: что изменено, какой уровень ждёшь, что получилось
4. Заставь назвать уровень заранее: агент пишет заявленный уровень до проверок, потом показывает логи и сравнение лоссов
5. Задай стоп-условия: нет L0 за 10 попыток или 3 часа. Лосс на последних 25% шагов разошёлся больше чем на 5%, метрика больше чем на 1%. Оценка полного прогона больше 5 часов
6. Остановись и спроси человека, если любое условие сработало

Примеры

[ПЛОХО] : Перенеси проект на новое железо и скажи, когда будет готово.
[ХОРОШО] : Ты переносишь проект {проект} со старого железа на {новое_железо}. Тестов нет, проверяем по эталону. 1. Запусти неизменённый код на старом железе: короткий прогон от 200 шагов с фиксированным зерном и полный прогон. Сохрани лоссы и метрику. 2. Запусти оригинал на новом железе без правок, запиши, что сломалось. 3. Каждую попытку оформляй отдельно: что изменено, ожидаемый уровень L0-L4, что получилось. Тихие сбои записывай отдельной заметкой. 4. Перед проверками запиши заявленный уровень, потом покажи логи и сравнение лоссов. 5. Остановись и спроси меня, если нет L0 за 10 попыток или 3 часа, или лосс разошёлся больше чем на 5%.
Источник: From GPU to TPU with Coding Agents: What Works, What Fails, and What It Costs?
ArXiv ID: 2610.34422 | Сгенерировано: 2026-10-29 13:27

Проблемы LLM

ПроблемаСутьКак обойти
Агент пишет «готово», хотя результат молча изменилсяПросишь агента перенести или переделать код, где нет тестов. Программа запускается и выдаёт число. Агент считает это успехом. Но вычисление могло измениться без единой ошибки в логе. Часть работы ушла на другое устройство, поменялось усреднение, пропала часть проверки. Ты узнаёшь об этом позже, когда качество уже просело. Проблема есть в любой задаче, где «запустилось» не равно «посчитало то же самое»Не принимай слова «готово». Сначала сними контрольные цифры с исходного кода. Потом требуй сравнить с ними результат после переделки. Спрашивай не «упало ли», а «совпадает ли с контрольными цифрами»
Агент заранее переоценивает, чего достигАгент уверенно описывает итог своей работы. Часто это выше реального. Если просишь сделать сложную переделку целиком с первого раза, ошибка почти неизбежна. Отчёт при этом звучит убедительноЗаставь агента назвать достигнутый уровень ДО проверок. Затем проверь и сравни. Расхождение между заявленным и фактическим — сигнал, что агенту нельзя верить на слово. Дели сложную работу на маленькие попытки с проверкой после каждой

Методы

МетодСуть
Контрольный прогон — проверка вместо доверия отчётуПеред любой переделкой запусти исходный код без правок. Сохрани цифры: потери, итоговую метрику, время. Это контрольные цифры. После переделки сравнивай только с ними. Не с цифрами из чужой статьи или документации. Почему работает: «похоже на правду» превращается в измеримую разницу. Заодно видно, ошибка в переделке или код и раньше не воспроизводился. Когда применять: нет тестов, результат — число или поведение (обучение моделей, расчёты, обработка данных). Когда не работает: обычный код с хорошими автотестами, там контрольные цифры лишние
Лестница уровней успеха — разделить «запустилось» и «работает правильно»Задай агенту пять ступеней. Первая: запускается и завершается. Вторая: цифры близки к контрольным. Третья: вычисления идут там, где задумано, без тихой замены. Четвёртая: главная цель проекта сохранена. Пятая: плюс стало быстрее или дешевле. Требуй доказательства для каждой ступени: логи, сравнение чисел. Почему работает: одно слово «успех» прячет разные степени успеха. Лестница заставляет назвать, на какой ступени стоишь. Когда применять: длинные задачи агента с неочевидной проверкой. Когда не работает: простые задачи с одним понятным критерием
Заявить уровень до проверки и остановиться по заранее заданным условиямАгент сначала пишет «я считаю, что достиг ступени N». Только потом проверяет. Отчёт нельзя подогнать под результат. Заранее задай условия остановки: максимум попыток, максимум времени, предельное расхождение с контрольными цифрами. При срабатывании агент останавливается и ждёт твоего решения. Почему работает: заявление фиксируется до того, как факты известны. Лимиты не дают агенту часами жечь деньги на безнадёжной попытке. Когда применять: дорогие или долгие задачи. Когда не работает: фиксированные пороги грубые. Они иногда принимают допустимую разницу за сбой, поэтому финальное слово за человеком

Тезисы

ТезисКомментарий
Агент проверяет, что код выполнился, а не что он считает то же самоеАгент ориентируется на видимые признаки успеха: нет ошибок, есть итоговое число. Тихие изменения вычисления не дают таких признаков. Поэтому агент их не замечает. Около половины неудач бывают именно такими. Применяй: в задаче явно напиши, что именно сравнивать (цифры, метрику, журнал) и с чем. Без этого агент проверит только то, что код запустился
Заранее записанное заявление мешает подгонять отчёт под результатКогда агент сначала называет ожидаемый итог, а потом проверяет, расхождение становится видимым. Если сначала проверить, а потом описать, отчёт подстроится под факты. Заявление до проверки показывает, насколько агент переоценивает себя. Применяй: добавь в запрос строку «перед проверками запиши, какого результата ты достиг, потом проверь и покажи доказательства»
Эталон из самой задачи надёжнее цифр из описанияЦифры из статьи, документации или чужого отчёта получены в других условиях. Исходный код сам может их не воспроизводить. Тогда любая переделка кажется неудачной. Контрольный запуск на твоих данных даёт справедливую точку сравнения. Применяй: пиши «цифры из документации считай справочными, сравнивай с контрольным запуском»
📖 Простыми словами

From GPU to TPU with CodingAgents: What Works, What Fails, and What It Costs?

arXiv: 2610.34422

Кодовые агенты вроде Claude Code судят об успехе как студенты-первокурсники: если скрипт завершился без ошибок и выдал хоть какое-то число — значит, задача решена. Но перенос вычислений с GPU на TPU — это минное поле. Агент бодро рапортует об успехе, пока библиотека молча режет градиенты или сбрасывает тяжёлые операции на обычный процессор. Для нейронки это невидимый провал: формально всё работает, но математика внутри уже сломалась.

Это как отдать мастеру спорткар на новых деталях: он гордо заводит мотор, забирает оплату и уходит. Ты жмёшь педаль в пол, а машина еле тащится, потому что мастер забыл подключить турбину и пустил тягу через слабенький стартер. Формально двигатель работает? Работает. Но вместо гоночного болида ты получил тыкву на колёсах.

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

Эксперимент ставили на специфичном железе, но метод спасает везде, где результат нельзя проверить через обычные unit-тесты. Это касается сложных симуляций, аналитики больших данных и обучения нейросетей. Если ты переносишь лендинг на новый хостинг — метод избыточен. Но когда на кону терабайты весов и миллионные счета за облако, верить отчёту «всё готово, босс» — чистое самоубийство.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с