Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

03. Перенос ACT на ROCm и диагностика DAgger

Эта задача посвящена ACT. Снижение loss на обучающей выборке ещё не означает, что стратегия стабильно успешна в замкнутом цикле. Особенно при воспроизведении на устройстве ROCm сначала нужно доказать, что сбой не вызван средой, данными, видеопамятью или критерием успеха, и только потом обсуждать структуру модели и стратегию работы с данными.

Практический Notebook к этой задаче: 03_act_dagger_diagnostics.ipynb.

Краткий итог

Для начала запомните три строки; различать много групп оценки пока не нужно:

МодельПроверенный результатУчебная роль
SmolVLA57/60 (красная кружка 27/30, синяя 30/30)Основной пример: сначала смотрим успешные повторы, затем изучаем обучение и оценку
Pi012/14; из них нерассмотренная позиция 9/10, сложная группа 6/8Продвинутый пример: права доступа к большой модели, выравнивание действий и диагностика сбоев
ACTТекущий защищённый кандидат 15/30; историческая ссылка из учебника 17/30Пример диагностики: смещение распределения в замкнутом цикле, DAgger и строгое определение успеха

Результат 15/30 получен на AMD395 и относится к уже выполненному защищённому кандидату. В Notebook записан тот же нативный рецепт обучения, но чтобы назвать эту цифру «воспроизведением из Notebook», его нужно полностью выполнить заново с нуля в среде с ядром Jupyter. Поэтому учебник показывает рабочий рецепт и проверяемый результат отдельно и не смешивает их.

Маршрут диагностики ACT

Проверяйте в таком порядке:

flowchart LR
  A["Воспроизведение действий из данных"] --> B["Обучение ACT"]
  B --> C["teacher-forced / open-loop"]
  C --> D["closed-loop rollout"]
  D --> E["Видео неудачного seed"]
  E --> F["DAgger / коррекция оракулом"]

Каждый шаг отвечает на свой вопрос:

ШагВопрос
Воспроизведение действий из данныхМожет ли собранный набор данных сам по себе выполнить задачу
Обучение ACTМожет ли модель выучить распределение действий по офлайн-данным
open-loopМожет ли модель воспроизвести траекторию на состояниях из данных
closed-loopСтабильна ли стратегия, когда действует сама
Видео неудачиНа каком этапе произошёл сбой: подход, захват, перенос или освобождение
DAggerКак добавить состояния, которые возникают после ухода в замкнутом цикле

Типичные сбои ACT

Тип сбояПризнакВозможная причина
Не касается кружкиЗахват остановился рядом с кружкойНедостаточно условий по изображению, начальная поза вне распределения, сдвиг в замкнутом цикле
Поднимает, но не отпускаетКружка висит над тарелкой или уноситсяМетки захвата, слишком короткий финальный участок release
Ставит на край тарелки, но опрокидываетПоложение почти верное, поза невернаяНедостаточно демонстраций конечной фазы, нестабильная высота укладки
open-loop успешен, closed-loop нетНа данных работает, самостоятельно — нетСмещение распределения в замкнутом цикле

Как собирать данные DAgger

Понятная для обучения схема DAgger:

  1. Обучите базовую модель на старте из reset.
  2. Зафиксируйте набор seed и выполните замкнутые rollout.
  3. Найдите неудачные seed.
  4. Пусть текущая стратегия выполнит первые несколько шагов, например 40 управляющих тактов.
  5. Переключитесь на оракул или скриптовую стратегию из состояния рядом с неудачей.
  6. Сохраните суффикс коррекции.
  7. При объединении данных записывайте источник, смещение временной метки и вес выборки.
  8. Переобучите модель и оцените её на том же наборе seed.

Важно: данных коррекции не должно быть как можно больше. Если добавить данные неудач из полного reset с высоким весом в основное обучение, можно разрушить уже выученное поведение из старта reset.

Что изменилось в этом раунде ACT

В прежнем конспекте учебника записан результат 17/30. Текущий защищённый кандидат repair15 при том же строгом протоколе даёт 15/30, но историческое 17/30 пока полностью не восстановлено. Для сравнения: обычный ACT на W7900 даёт 0/30, резервная базовая модель stable61 на AMD395 — 7/30, а старый защищённый артефакт DAgger — 2/30. Исходный замкнутый базовый вариант ACT почти не проходит строгий критерий физического успеха, поэтому последующие диагностические изменения опираются на цепочку воспроизводимых правок.

Первый шаг — ужесточить критерий оценки. Старый success учитывал только геометрические условия среды, и такие случаи, как толчок кружки, её сдавливание или опрокидывание, могли ошибочно считаться успехом. В этой теме используется единый показатель physical_success: кружка должна быть поднята, перенесена на тарелку и в итоге стоять почти вертикально. Без этого шага последующие изменения обучения легко вводят в заблуждение из-за старой метрики.

Второй шаг — разделить неудачи на open-loop и closed-loop. Действия ACT генерируются по наблюдениям из набора данных, затем эти действия воспроизводятся в MuJoCo в режиме open-loop. Такая диагностика позволяет различить два факта: выучило ли модель действия на состояниях из данных и сбивается ли стратегия при самостоятельном выполнении из-за дрейфа состояния. Результаты показывают, что на одиночной демонстрации или чистых данных траектория руки иногда близка к рабочей, но фаза release очень короткая, а смещение в замкнутом цикле заметно; поэтому одной правкой захвата или дальнейшим обучением проблему не решить.

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

Четвёртый шаг — настроить обучение ACT. Итоговая линия использует no-VAE, chunk_size=20, n_action_steps=10, состояние с временной меткой, состояние obj_init, BCE для захвата с весом 0.5 и ранний вес по эпизодам. Каждый пункт связан с конкретным сбоем:

ИзменениеКакую проблему решает
no-VAEПри малом объёме данных уменьшает случайность выборки и делает воспроизведение стабильнее
Состояние с временной меткойЯвно задаёт фазу времени, чтобы стадии не усреднялись
Состояние obj_initСообщает модели начальное геометрическое соотношение кружки и тарелки
BCE захвата 0.5Усиливает порядок открытия и закрытия захвата, не жертвуя слишком сильно траекторией руки
Ранний вес по эпизодамЗащищает начало каждого эпизода от reset, чтобы данные коррекции не перекрывали начальное поведение
n_action_steps=10Сохраняет связность блока действий и снижает дрейф при слишком длинном выполнении одного блока

Пятый шаг — DAgger с префиксом 40. Текущая ACT выполняет 40 управляющих тактов, затем оракул с заданным скриптом перехватывает управление и сохраняет суффикс. Так собираются состояния, в которые стратегия сама уходит, а это ближе к распределению неудач в замкнутом цикле, чем только идеальная демонстрация из старта reset.

Шестой шаг — смещение временной метки для эпизодов коррекции. Суффикс с префиксом 40 — это не полная задача от reset. Если его временная метка начинается с нуля, модель примет «корректирующие действия посреди задачи» за «действия в начале задачи». Поэтому эпизоды коррекции используют timestamp offset = 2.0, чтобы фаза времени отличалась от эпизодов из reset.

Седьмой шаг — понижение веса данных коррекции. Проверены разные веса:

Вес выборки коррекцииСтрогий результатВывод
0.11/15Данных коррекции слишком мало: способности к release и укладке не восстанавливаются
0.50/15Данных коррекции слишком много: основное распределение из reset разрушается
0.2513/30Лучший компромисс на тот момент

Затем на контрольной точке best025 выполнен один раунд DAgger v1 с префиксом 40 по неудачным seed. Получено 3 пригодных корректирующих траектории; их объединили с основным обучением при смещении временной метки 2.0 и весе 0.25, так появился старый защищённый checkpoint DAgger. Его точная проверка даёт 2/30. После этого от защищённых весов stable61 выполнено дообучение на 2500 шагов с низкой скоростью обучения без утечки памяти на тех же данных коррекции; так появился текущий защищённый кандидат repair15:

ckpt/act_scripted_reset_oracle_plus_prefix40_dagger_best025_toffset2_downweight025_chunk20_n10_novae_gpu_5000_20260629_031208/step_5000
AMD395 protected/act_stable61_to_dagger_nomemleak_step1500_strict15of30
physical_success = 15/30
fixed_seed_groups = 3 группы по 10 эпизодов

В фиксированной оценке по трём наборам на AMD395 stable61/step2500 даёт 7/30, защищённый DAgger — 2/30, repair15 — 15/30. Сбор экспертного восстановления дал 17/40 пригодных траекторий; это характеристика качества данных. Результаты стратегии везде берутся из последующей замкнутой оценки по physical_success.

Notebook notebooks/16_act_end_to_end.ipynb содержит тот же защищённый рецепт обучения: упаковка данных, взвешенная по траекториям выборка, no-VAE, BCE для захвата, tqdm, checkpoint и строгая оценка. При запуске задайте ACT_RECIPE=repair15; обучение и оценка используют один и тот же выходной каталог.

Что записывать на ROCm

Обучение ACT обычно не требует много видеопамяти, но фиксируйте:

  • размер батча;
  • размер chunk;
  • n_action_steps;
  • использование no-VAE;
  • наличие вспомогательной функции потерь для захвата;
  • температуру во время обучения;
  • использование видеопамяти;
  • наличие сбоев ядра или OOM.

Если обучение падает, сначала по журналам устройства докажите, что причина не в аппаратуре или ROCm. Если обучение стабильно, но стратегия не работает, возвращайтесь к данным и диагностике замкнутого цикла.

Результаты диагностики замкнутого цикла

Базовый чистый closed-loop даёт 0/10. После добавления смещения временной метки, коррекции с пониженным весом и данных DAgger: stable61 — 7/30, защищённый DAgger — 2/30, продолженный repair15 — 15/30. Три фиксированные панели дают 3/10, 4/10 и 8/10.

Рисунок 1: изменение физического успеха ACT в замкнутом цикле по шагам диагностики. Улучшение получено за счёт коррекции данных и состояний замкнутого цикла, а не простым увеличением времени обучения.

ЭтапФизический успехПояснение
Чистый closed-loop0/10Модель в замкнутом цикле не может стабильно касаться и переносить кружку
Смещение временной метки3/15Выравнивание действий улучшило часть траекторий, но результат всё ещё нестабилен
DAgger с пониженным весом13/30Данные коррекции начинают покрывать состояния рядом с неудачами
Резерв stable617/30Прежний базовый вариант
Защищённый артефакт DAgger2/30Точный результат старой защищённой папки
Защищённый кандидат repair1515/30Текущий лучший: три группы фиксированных seed по 10 эпизодов, результаты по группам 3/10 + 4/10 + 8/10

Рисунок 2: успешный rollout ACT DAgger с физическим критерием. Используйте его, чтобы проследить этапы захвата, переноса и освобождения.

Рисунок 3: типичный неудачный rollout лучшего DAgger у ACT. Даже если геометрические условия среды иногда почти выполнены, нужно дополнительно проверять высоту подъёма и итоговое положение.

Checkpoint

После выполнения задачи оформите следующие пункты:

ПунктСодержание
checkpoint ACTПуть записан через переменную
Результат open-loopОбучающая выборка или фиксированные seed
Результат closed-loopПо physical_success
Описание данных DAggerДлина префикса, тип оракула, веса выборки
Видео типичной неудачиНе меньше одного
Следующий шагПродолжить DAgger / исправить захват / добавить демонстрации / изменить chunk