LeRobot documentation
Long-WAM
Long-WAM
Статья · Проект и демо · Код
Long-WAM — это модель мира-действия с длинным контекстом: она использует языковую инструкцию, состояние робота и визуальную историю для прогнозирования будущей динамики и генерации действий.
Обзор модели
- Научитесь использовать историю. Авто регрессионное предобучение видео LongLive2.0-Robot изучает зависимости от истории к будущему до адаптации к действиям робота.
- Сначала предсказание, затем действие. IDM формирует действие на основе наблюдаемой истории и предсказанных будущих латентов, без декодирования будущих RGB-изображений.
- Масштабируйте временной контекст. Более длинные окна наблюдений позволяют фиксировать движение и прогресс в задаче; длина истории отделена от горизонта действия.
LeRobot поддерживает как IDM, так и совместное видео/действие-коденузинг (COD), с нативной загрузкой контрольных точек, дообучением и синхронным инференсом чанков действий. Базовые модели Wan поступают из Diffusers, а текстовый энкодер UMT5 — из Transformers.
Результаты
Результаты lerobot-eval для опубликованных нативных для LeRobot чекпоинтов IDM и COD:
| Suite | Уровень успешности IDM | Уровень успешности COD | Эпизоды на модель |
|---|---|---|---|
| libero_spatial | 99.4% | 98.6% | 500 |
| libero_object | 99.8% | 99.6% | 500 |
| libero_goal | 97.8% | 98.2% | 500 |
| libero_10 | 99.0% | 97.4% | 500 |
| Среднее | 99.00% | 98.45% | 2000 |
См. раздел Оценка для примеров команд и ограничений по эпизодам. Команды были протестированы на NVIDIA GB200 с BF16 и синхронным выводом.
Установка
Из исходного кода LeRobot:
pip install -e ".[longwam]"Чекпоинты
Чекпоинты, созданные в LeRobot, содержат полные веса модели и сохранённые препроцессоры и постпроцессоры.
Токенизатор загружается из google/umt5-xxl.
| Режим | Вывод | Чекпоинт |
|---|---|---|
| IDM | Представьте себе будущее видео, а затем выполните удаление шума из действий | LIBERO IDM |
| COD | Совместное шумоподавление видео и действий | LIBERO COD |
Обе используют историю P48 (2,4 с при 20 Гц), два вида камеры 224×224, действия размерности 7 и состояние робота размерности 8. Используйте контрольную точку, соответствующую желаемому режиму денойзинга; исходные пакеты model.pt Long-WAM не могут быть загружены напрямую.
Требования к данным
Используйте набор данных LeRobot с RGB-камерами, observation.state, action и инструкциями к задаче. Ключи камер в выпущенном LIBERO — это observation.images.image и observation.images.image2, в указанном порядке. Передавайте RGB-тензоры в диапазоне [0, 1]; процессор изменяет размер и центрирует обрезку каждого вида, а политика склеивает виды по горизонтали. Убедитесь, что порядок камер и соглашения об действиях/состояниях соответствуют контрольной точке.
Вывод
from lerobot.policies import make_pre_post_processors
from lerobot.policies.longwam.modeling_longwam import LongWAMPolicy
checkpoint = "Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot"
policy = LongWAMPolicy.from_pretrained(checkpoint).to("cuda").eval()
preprocess, postprocess = make_pre_post_processors(
policy.config,
pretrained_path=checkpoint,
preprocessor_overrides={"device_processor": {"device": "cuda"}},
)
policy.reset()
# observation contains both current camera images, observation.state, and task.
# Repeat on every control tick, including ticks that consume queued actions.
action = postprocess(policy.select_action(preprocess(observation)))Вызывайте select_action на каждом такте управления, в том числе во время выполнения блока действий, чтобы история оставалась актуальной. predict_action_chunk возвращает [batch, prediction_steps, action_dim]; каждый вызов фиксирует переданный текущий кадр. reset() и drop_queued_actions() очищают и историю, и очередь действий.
Универсальная асинхронная/RTC-обработка пока не проверена в этой интеграции.
По умолчанию inference_seed=1 перезапускает отдельные генераторы шума для видео/действий с тем же seed для каждого чанка, сохраняя поведение при инференсе, описанное в релизе.
Установите inference_seed=None в Python (--policy.inference_seed=null в CLI),
чтобы использовать глобальный RNG, который продолжает сдвигаться; reset() не пересевает этот поток.
Во время обучения всегда генерируется новый шум.
Оценка
Установите дополнительный пакет для бенчмаркинга и оцените нативную контрольную точку:
pip install -e ".[longwam,libero]"
lerobot-eval --policy.path=Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot \
--policy.device=cuda --policy.dtype=bfloat16 \
--env.type=libero --env.task=libero_spatial \
--env.observation_height=256 --env.observation_width=256 \
--env.episode_length=300 \
--eval.batch_size=1 --eval.n_episodes=50 --seed=1Для других коротких наборов используйте libero_object или libero_goal. Для LIBERO-Long
установите --env.task=libero_10 --env.episode_length=600.
Замените IDM на COD в пути к контрольной точке, чтобы оценить co-denoising.
История и чанкинг действий
| Параметр | Значение | Опубликованное значение LIBERO |
|---|---|---|
past_obs_steps | Сохранённые прошлые контрольные отметки | 48 |
video_stride | Управление тиками между отобранными кадрами видео | 4 |
future_video_steps | Горизонт будущего видеонаблюдения | 32 |
action_horizon | Длина обучающего блока действий | 32 |
inference_action_horizon | Длина предсказанного фрагмента действий | 80 |
n_action_steps | Действия, выполняемые перед новым предсказанием | 10 |
Длительность истории равна past_obs_steps / control_frequency. Ранние данные истории дополняются первым наблюдением. Используйте контрольную точку, обученную для целевой истории; изменение окна при выводе не является обучением с масштабированием контекста.
Доработка
lerobot-train --policy.path=Efficient-Large-Model/Long-WAM-LIBERO-IDM-LeRobot \
--policy.device=cuda --policy.dtype=bfloat16 \
--accelerator.mixed_precision=bf16 \
--dataset.repo_id=YOUR_ORG/YOUR_DATASET \
--output_dir=outputs/longwam --batch_size=1 --steps=30000 \
--policy.push_to_hub=false--policy.dtype определяет тип данных для хранения параметров до загрузки; нативные градиенты и моменты AdamW используют этот тип данных. --accelerator.mixed_precision управляет autocast, а не мастер-весах FP32. В примере для обоих используется BF16, что соответствует исходному типу данных параметров.
Для параметров/градиентов/моментов FP32 с autocast BF16 используйте --policy.dtype=float32 --accelerator.mixed_precision=bf16; замороженные VAE и текстовый энкодер также используют FP32, что увеличивает потребление памяти. Выберите это до загрузки:
преобразование весов, загруженных в BF16, в FP32 не позволяет восстановить утраченную точность.
Выпущенный постпроцессор захвата преобразует последнее измерение действия из [0, 1] в знаковые команды. Используйте --policy.toggle_action_dimensions=[], если данные для дообучения уже используют знаковую конвенцию открытия/закрытия среды.
Активная настройка также применяется к сохранённым процессорам; явные postprocessor_overrides имеют приоритет. Сохранённая статистика нормализации
сохраняется, если не переопределена, поэтому приведите её в соответствие с данными дообучения.
Обучение контролирует будущие фрагменты видео и действий; при инференсе используются только прошлые/текущие наблюдения. Настройте --batch_size под объём памяти GPU и сохраняйте порядок камер в контрольной точке, определения действий/состояний и режим денойзинга.
Цитирование
@misc{huang2026longwamscalingcontextworldaction,
title={Long-WAM: Scaling the Context of World-Action Models},
author={Wei Huang and Bohan Zhang and Chenzhi Liu and Isabella Liu and
Shuai Yang and Weian Mao and Luozhou Wang and Yicheng Xiao and
Weifeng Lin and Qixin Hu and Bryan Chu and Sifei Liu and
Linxi Fan and Xiaojuan Qi and Song Han and Yukang Chen},
year={2026},
eprint={2610.10528},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2610.10528},
}