LeRobot documentation
Cosmos3
Cosmos3
Cosmos3 — это модель действий мира для управления роботами, построенная на базе Cosmos 3, семейства омнимодальных моделей мира от NVIDIA. На основе данных с камер и языковой инструкции политика совместно предсказывает будущие кадры видео и следующий блок действий робота. Реализация в LeRobot адаптирована из нативной политики действий cosmos-framework и работает с опубликованными моделями Cosmos3 Nano и Edge, преобразованными в формат LeRobot.
- 📄 Технический отчёт Cosmos 3 (arXiv:2606.02800)
- 💻 cosmos-framework и Cosmos cookbook
- 🤗 Коллекция моделей Cosmos 3
Обзор модели
Cosmos 3 представляет собой Mixture-of-Transformers (MoT). Каждый слой декодера имеет два пути со своими собственными нормализациями слоев, проекциями внимания и MLP, а эти два пути встречаются только в общем self-attention:
- Путь понимания (разумитель) читает токены текста из запроса и, при необходимости, токены изображений ViT с использованием каузального внимания.
- Путь генерации (генератор) считывает непрерывные токены диффузионного подпоследовательности: латенты VAE Wan2.2 для видео и токены действий. Он обращается двунаправленно к обоим путям и обучается с помощью flow matching.
Архитектура Mixture-of-Transformers (MoT) в Cosmos 3 (рисунок 5 из технического отчёта). Слева: авторегрессионная (AR) подпоследовательность проходит через reasoner, а диффузионная (DM) подпоследовательность — через generator, после чего они объединяются в общем мультимодальном attention. Справа: маска attention, каузальная для AR и полная для диффузии.
В соответствии с политикой, Cosmos3 работает в режиме модели действий в мире для нативных рецептов действий:
- Входные данные: кадры с камер собираются в единое видео-полотно (один кадр — как есть, два — рядом, три — первый сверху, два других под ним). Запрос содержит задачу, частоту кадров, разрешение полотна, описание его компоновки и количество пустых кадров в блоке.
- Обучение: политика кодирует клип текущего кадра и
chunk_sizeбудущих кадров с помощью VAE, добавляет шум к будущим латентам и к чанку действий и обучается их денуайзу. Потери представляют собой взвешенную сумму видео-потерь и потерь действий. - Вывод: кадр условия чистый, будущее видео и действия образуются совместно с помощью решателя UniPC, а политика возвращает блок действий. Предсказанное видео можно сохранить во время оценки (см. Оценка).
- По умолчанию обучаются только генерационный путь, слои вокруг него и модули действий (
train_gen_stream_only=true,freeze_vision_encoder=true), как в нативных рецептах пост-обучения.
LeRobot предоставляет два выпущенных размера в виде двух типов политик:
| Cosmos3 Nano | Cosmos3 Edge | |
|---|---|---|
| Тип политики | cosmos3_nano | cosmos3_edge |
| Параметры (обучаются по умолчанию) | 16.5B (7.0B) | 4.6B (1.4B) |
| Backbone | MoT, инициализированный из Qwen3-VL, 36 слоёв, размер скрытого слоя 4096 | MoT с плотным трансформером 2B, 28 слоями, размером скрытого слоя 2048 |
| Токенизатор | nvidia/Cosmos3-Nano | nvidia/Cosmos3-Edge |
| Базовая контрольная точка | lerobot/Cosmos3-Nano | lerobot/Cosmos3-Edge |
Требования к установке
Установите LeRobot, следуя нашему Руководству по установке.
Установите зависимости Cosmos3:
pip install -e ".[cosmos3]"Если вы установили LeRobot из PyPI:
pip install 'lerobot[cosmos3]'Добавьте дополнительные компоненты вашего рабочего процесса:
trainingдляlerobot-train,liberoдля обучения или оценки на LIBERO иpeftдля LoRA. Например:pip install -e ".[cosmos3,training,libero]"
Cosmos3 по умолчанию использует бэкенд PyTorch для масштабированного внимания на основе скалярного произведения (sdpa). Если в вашей среде установлена совместимая версия flash_attn, вы можете запросить --policy.attn_implementation=flash_attention_2. Не используйте его вместе с --policy.compile_model=true: скомпилированные слои декодера будут перекомпилироваться для каждого слоя с flash attention, что приведёт к ошибке перекомпиляции.
Чекпоинты
| Чекпоинт | Размер | Данные для обучения | Использование |
|---|---|---|---|
| lerobot/Cosmos3-Nano | Nano | Выпуск nvidia/Cosmos3-Nano | База для дообучения |
| lerobot/Cosmos3-Edge | Edge | Выпуск nvidia/Cosmos3-Edge | База для дообучения |
| lerobot/Cosmos3-Nano-Policy-LIBERO | Nano | lerobot/LIBERO-Cosmos3 | Оценка LIBERO |
| lerobot/Cosmos3-Edge-Policy-LIBERO | Edge | lerobot/LIBERO-Cosmos3 | Оценка LIBERO |
| lerobot/Cosmos3-Nano-Policy-LIBERO_10 | Nano | lerobot/LIBERO_10-Cosmos3 | Оценка LIBERO-10 |
| lerobot/Cosmos3-Edge-Policy-LIBERO_10 | Edge | lerobot/LIBERO_10-Cosmos3 | Оценка LIBERO-10 |
- Базовые контрольные точки содержат выпущенные веса в формате LeRobot. Их модули действий (
action2llm,llm2action,action_modality_embed) ещё не обучены для робота, поэтому начните дообучение с--policy.load_action_modules=false(см. Дообучение на LIBERO). - Файл
config.jsonбазовых контрольных точек содержит нативный рецепт пост-обучения DROID, а значения по умолчанию для классов типов политик соответствуют нативному рецепту LIBERO. - Чекпоинты LIBERO содержат веса EMA, полученные в ходе их обучения.
- Веса хранятся в формате bfloat16.
config.jsonнамеренно задаётdtype: float32: обучение с смешанной точностью из этих контрольных точек сохраняет мастер-веса в float32, как и при нативном обучении. Для вывода и оценки передавайте--policy.dtype=bfloat16.
Существует два способа начать с контрольной точки:
--policy.path=<checkpoint>загружает сохранённую конфигурацию, веса и процессоры, а затем применяет параметры командной строки поверх них.--policy.type=cosmos3_nano --policy.pretrained_path=<checkpoint>(илиcosmos3_edge) загружает только веса и процессоры, а конфигурация начинается со значений по умолчанию класса, рецепта LIBERO.
Допобучение на LIBERO
Значения по умолчанию для класса соответствуют рецепту LIBERO из технического отчёта: блоки из 16 действий, воплощение domain_id=5, отсутствие действия состояния, квантильная нормализация действий, UniPC с 30 шагами и без классификаторного свободного руководства при выводе, а также скорость обучения 5e-5 с 500 шагами разгона и линейным затуханием до нуля на шаге 16000. Таким образом, при запуске из базовой контрольной точки с --policy.type достаточно указать --policy.load_action_modules=false.
Рецепт обучается на данных LIBERO, преобразованных в формат Cosmos3:
- lerobot/LIBERO-Cosmos3: четыре набора (Spatial, Object, Goal, 10), 1693 эпизода.
- lerobot/LIBERO_10-Cosmos3: только LIBERO-10, 379 эпизодов.
Обе версии происходят из nvidia/LIBERO_LeRobot_v3, данных нативного рецепта. Действия имеют размерность 10D [delta position (3), rot6d (6), gripper] вместо 7D-действий axis angle в LIBERO, две камеры observation.images.image (вид от третьего лица) и observation.images.image2 (камера на запястье) имеют разрешение 256x256 при 20 FPS, а статистика действий соответствует нативному рецепту. Во время оценки среда LIBERO преобразует действия обратно (см. Evaluation).
Команда обучения
Нативный рецепт LIBERO обучает модель с глобальным размером батча 2048 образцов в течение 2000 итераций на LIBERO-10 (лучший чекпоинт находится около итерации 1500) и в течение 5000 итераций на четырёх наборах (лучший около 4500). Команда ниже воспроизводит этот процесс на одной машине с 8 GPU: FSDP2 на 8 GPU, 32 образца на GPU и 8 шагов накопления градиентов, что даёт 32 x 8 x 8 = 2048 образцов на обновление оптимизатора. Каждое нативное количество итераций умножается на 8 шагов накопления: 2000 итераций становятся --steps=16000, чекпоинт каждые 500 итераций — --save_freq=4000, а warmup 500 и конец затухания 16000 становятся 4000 и 128000 соответственно.
accelerate launch --num_processes=8 $(which lerobot-train) \
--policy.type=cosmos3_nano \
--policy.pretrained_path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-LIBERO_10 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--parallelism.dp_shard=8 \
--accelerator.fsdp.mixed_precision_policy.param_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.reduce_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.cast_forward_inputs=false \
--accelerator.gradient_accumulation.steps=8 \
--accelerator.gradient_accumulation.sync_each_batch=true \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=32 \
--steps=16000 \
--save_freq=4000 \
--policy.scheduler_warmup_steps=4000 \
--policy.scheduler_decay_steps=128000 \
--output_dir=outputs/train/cosmos3_nano_libero_10 \
--job_name=cosmos3_nano_libero_10 \
--trackio.enable=trueДля четырёх наборов используйте --dataset.repo_id=lerobot/LIBERO-Cosmos3 и --steps=40000 (5000 итераций). Для Cosmos3 Edge используйте --policy.type=cosmos3_edge --policy.pretrained_path=lerobot/Cosmos3-Edge.
Ключевые параметры обучения
| Параметр | Описание |
|---|---|
--policy.load_action_modules=false | Запускает модули действий с момента их инициализации, а не загружает их, как это делают нативные рецепты пост-обучения. Устанавливайте этот параметр только при дообучении из базовой контрольной точки (см. примечания ниже). |
--parallelism.dp_shard=8 | FSDP2 на 8 GPU. Политика объявляет свои единицы обёртки FSDP2, поэтому --accelerator.fsdp.wrap_modules не требуется. См. руководство по обучению на нескольких GPU. |
--accelerator.fsdp.mixed_precision_policy.* | Вычисления и редукция градиентов в bfloat16 с мастер-весах float32, как в нативном обучении. Оставьте значение по умолчанию для --policy.dtype (float32): политика bfloat16 обучала бы мастер-веса в bfloat16. |
--accelerator.gradient_accumulation.steps | Глобальный батч равен --batch_size x количество GPU x количество шагов накопления. sync_each_batch=true приводит к синхронизации градиентов после каждого микробатча, благодаря чему они остаются разбитыми на шарды и не требуют дополнительной нераспределённой копии. |
--steps, --save_freq, --policy.scheduler_*_steps | LeRobot считает шаги цикла (микробатчи), а не обновления оптимизатора. Умножьте количество итераций нативного рецепта (2000 или 5000 итераций, warmup 500, decay 16000, контрольные точки каждые 500) на количество шагов накопления. Держите --steps не более --policy.scheduler_decay_steps: после этого значения скорость обучения равна нулю. |
--ema.type=power --ema.sigma_rel=0.1 | EMA для нативного рецепта. Каждая контрольная точка также содержит веса EMA в pretrained_model_ema/, которые используются для оценки и публикации модели. |
--tf32=false | Сохраняет умножения матриц float32 в полной точности, как и при нативном обучении. |
--policy.gradient_checkpointing=true | Повторно вычисляет активации слоёв декодера и блоков визуального модуля в обратном проходе для экономии памяти. |
--policy.compile_model=true | Необязательно: torch.compile для слоёв декодера и кодировщика VAE. |
На одном GPU или при использовании DDP замените флаги FSDP2 (--parallelism.dp_shard и --accelerator.fsdp.mixed_precision_policy.*) на --accelerator.mixed_precision=bf16. Например, Cosmos3 Edge на одном GPU, с 32 образцами на шаг и 64 шагами накопления для того же глобального батча 2048:
lerobot-train \
--policy.type=cosmos3_edge \
--policy.pretrained_path=lerobot/Cosmos3-Edge \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Edge-Policy-LIBERO_10 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--accelerator.mixed_precision=bf16 \
--accelerator.gradient_accumulation.steps=64 \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=32 \
--steps=128000 \
--save_freq=32000 \
--policy.scheduler_warmup_steps=32000 \
--policy.scheduler_decay_steps=1024000 \
--output_dir=outputs/train/cosmos3_edge_libero_10
--policy.load_action_modules=falseсбрасывается вtrueпосле загрузки контрольной точки, поэтому сохранённый запуск снова загружает свои обученные модули действий. В двух случаях модули действий по ошибке остаются в состоянии инициализации:
- Создание политики без
--policy.pretrained_pathили--policy.path: ничего не загружается, поэтому флаг остаётсяfalse, а последующая оценка или возобновление этого запуска пропускает обученные модули действий.- PEFT с модулями действий вне
--peft.full_training_modules: в этом случае модули действий никогда не обучаются.Устанавливайте
--policy.load_action_modules=falseтолько при дообучении из базовой контрольной точки. При использовании PEFT оставляйте модули действий в--peft.full_training_modules(значение по умолчанию).
Требования к оборудованию
Замеры выполнены на GPU A800 80 ГБ с использованием команд, приведённых на этой странице, и с включённым градиентным чекпоинтингом:
| Настройка | GPU | Размер батча на GPU | Пиковая память на GPU |
|---|---|---|---|
| Nano, полная дообучение (FSDP2) | 8 | 32 | 38 ГБ |
| Nano, LoRA | 1 | 4 | 64 ГБ |
| Edge, полная дообучение | 1 | 32 | 47 ГБ |
| Edge, LoRA | 1 | 8 | 21 ГБ |
| Оценка в bfloat16, Nano и Edge | 1 | 10 сред | 39 ГБ и 15 ГБ |
- Cosmos3 Nano требует GPU с 80 ГБ памяти, и для полной дообучения нужно как минимум 4 таких устройства: до того, как FSDP2 разобьёт модель на части, каждый GPU хранит всю модель в float32 (около 66 ГБ).
- Команда LIBERO выше занимает около 45 секунд на одно обновление оптимизатора на 8 GPU A800, поэтому обучение LIBERO-10 занимает около 25 часов.
Допобучение на собственных данных
Cosmos3 получает рецепт обучения из командной строки и набор данных: политика не содержит логики, специфичной для робота. Любой набор данных LeRobot будет работать, если он соответствует приведенным ниже требованиям.
Требования к набору данных
- Камеры: от одного до трёх признаков
observation.images.*в порядке, указанном в файлеinfo.jsonдатасета. Каждый вид масштабируется до размера--policy.view_size(по умолчанию — размер первой камеры) и объединяется в одно видео-полотно: один вид отображается как есть, два — рядом, три — первый сверху, а два других — рядом под ним. Расположите камеры в соответствии с этим расположением, например[third person, wrist]для LIBERO и[wrist, exterior 1, exterior 2]для DROID. - Описание вида:
--policy.view_description— это предложение в промпте, описывающее расположение элементов на холсте. По умолчанию описываются раскладка LIBERO (значения по умолчанию класса) и раскладка DROID (базовыйconfig.json). Напишите предложение, описывающее вашу собственную раскладку: неверное описание не будет обнаружено и лишь ослабит промпт. - Представление действий: политика обучается действиям из набора данных в том виде, в котором они заданы, без этапа преобразования. Преобразуйте действия в нужное вам представление перед обучением, как это делает набор данных LIBERO с вращениями rot6d. Если среда ожидает другое представление, преобразуйте действия обратно в процессорах среды (среда LIBERO делает это для Cosmos3).
- Ширина действия: не более
--policy.max_action_dim(64) каналов. Выходная ширина определяется набором данных. - Частота кадров:
fpsберётся из метаданных набора данных и должна соответствовать реальной частоте управления: она записывается в промпт и задаёт временную ось позиций видео, а также пороги для неактивных кадров. - Статистика: по умолчанию используется нормализация
QUANTILES, для которой требуются статистические данныеq01иq99действия из файлаmeta/stats.json(наборы данных, созданные LeRobot, содержат их). Нативный рецепт DROID использует вместо этогоIDENTITY. - Состояние: при
--policy.use_state=trueтекущее состояние размещается перед действиями в виде чистого действия состояния. Тогдаobservation.stateдолжна иметь ту же ширину и смысл каналов, что и действие. Состояние и действие нормализуются с использованием собственных статистик. - Язык:
taskкаждого кадра — это инструкция из промпта. - Embodiment:
--policy.domain_idвыбирает строку проекций действий, одну из 32. В стандартных рецептах используется значение 5 для LIBERO, 8 для DROID и 30 для RoboCasa. Если модули действий запускаются с начальной инициализацией (--policy.load_action_modules=false), каждая строка начинается в необученном состоянии, и любое значение подходит. - Chunk:
--policy.chunk_sizeдействий на чанк (16 для LIBERO, 32 для DROID) и--policy.n_action_stepsдействий, выполняемых на чанк.
Поля, оставленные равными None (fps, view_size), а также имена каналов действий берутся из набора данных. Все остальные поля берутся из конфигурации, поэтому задайте их в командной строке или в файле --config_path.
Имена каналов действий и состояний. В промпте указано, сколько кадров в чанке являются простоями (робот не двигается), и
Cosmos3IdleFrameProcessorStepподсчитывает их по именам каналов действий вmeta/info.json. Имена вида[<prefix>_]<type>_<index>указывают типы каналов:pos, вращение (rot6d,rot9d,axisangle,euler_xyz,quat_xyzw,quat_wxyz),gripperилиjoint, с префиксом для различения рук (например,left_rot6d_0). Данные LIBERO используютpos_0..2, rot6d_0..5, gripper_0, а раскладка DROID —joint_0..6, gripper_0.Это именование не является обязательным. Без него политика лишь выводит предупреждение, а подсчёт не учитывает бездействующие кадры, что и так соответствует тому, что видит рецепт LIBERO (в его эпизодах нет бездействующих кадров согласно нативному правилу). Используйте это именование только в том случае, если вам нужен подсчёт бездействующих кадров для нативного рецепта DROID.
Рецепт DROID
Файл config.json базовых контрольных точек содержит нативный рецепт пост-обучения DROID: воплощение domain_id=8, чанки из 32 действий, текущее состояние в качестве действия состояния и учёт кадров простоя на его основе (use_state=true, idle_state=true), без нормализации (IDENTITY), UniPC с 4 шагами и масштабом classifier-free guidance, равным 3, на этапе инференса, а также скорость обучения 8e-5 (нативные 2e-4, умноженные на коэффициент 0.4) без warmup и с линейным затуханием до нуля на шаге 100000. Запуск обучения с этого файла с помощью --policy.path использует данный рецепт.
Нативный рецепт обучается на успешных эпизодах nvidia/Cosmos3-DROID. Набор данных DROID в формате Cosmos3 содержит:
- Три камеры
observation.images.wrist_left,observation.images.exterior_1_leftиobservation.images.exterior_2_leftв этом порядке (камера на запястье сверху, два внешних вида под ней), разрешение 360x640 в исходных данных. - 8D действия по позициям суставов с именами
joint_0–joint_6иgripper_0, а такжеobservation.stateс той же структурой. - Частота кадров 15 FPS.
Нативный рецепт обучает модель с глобальной партией из 8192 образцов в течение 10000 итераций, сохраняя контрольную точку каждые 1000 итераций. На одной машине с 8 GPU, 8 образцами на GPU и 128 шагами накопления получается та же глобальная партия (8 x 8 x 128 = 8192), а количество каждой итерации умножается на 128:
accelerate launch --num_processes=8 $(which lerobot-train) \
--policy.path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-DROID \
--dataset.repo_id=${HF_USER}/DROID-Cosmos3 \
--parallelism.dp_shard=8 \
--accelerator.fsdp.mixed_precision_policy.param_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.reduce_dtype=bfloat16 \
--accelerator.fsdp.mixed_precision_policy.cast_forward_inputs=false \
--accelerator.gradient_accumulation.steps=128 \
--accelerator.gradient_accumulation.sync_each_batch=true \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=8 \
--steps=1280000 \
--save_freq=128000 \
--policy.scheduler_decay_steps=12800000 \
--output_dir=outputs/train/cosmos3_nano_droid \
--job_name=cosmos3_nano_droid \
--trackio.enable=trueНативный рецепт DROID выполнялся на 256 GPU. На одном сервере с 8 GPU A800 одно обновление оптимизатора для этой команды занимает около 33 минут, поэтому для полного рецепта требуется несколько серверов. Запустите ту же команду на каждом сервере с флагами для мультинодового режима accelerate launch (или torchrun), разбейте параметры внутри каждого сервера и продублируйте их между серверами с помощью --parallelism.dp_replicate=<number of machines> --parallelism.dp_shard=8, а также разделите --accelerator.gradient_accumulation.steps и количество шагов на число серверов. См. раздел HSDP в руководстве по обучению на нескольких GPU.
Новый робот
Для нового робота начните со значений по умолчанию класса с помощью --policy.type и задайте поля ваших данных в командной строке, например:
lerobot-train \
--policy.type=cosmos3_edge \
--policy.pretrained_path=lerobot/Cosmos3-Edge \
--policy.load_action_modules=false \
--policy.domain_id=0 \
--policy.chunk_size=32 \
--policy.n_action_steps=32 \
--policy.view_description='The left half shows the front camera; the right half shows the wrist-mounted camera.' \
--dataset.repo_id=${HF_USER}/my_dataset \
...Конфигурация базовой модели
Конфигурация базовой модели --policy.mot_backbone представляет собой одно значение командной строки. Передайте YAML-словарь только с полями, которые нужно изменить, например, модель с меньшим количеством слоёв для быстрого теста без предобученных весов:
--policy.type=cosmos3_edge --policy.mot_backbone='{text_config: {num_hidden_layers: 2}, vision_config: {num_hidden_layers: 1}}'Опущенные поля сохраняют значения по умолчанию для размера или значения из загруженной конфигурации с --policy.path. Записывайте числа с плавающей точкой в виде 1.0e-6 (YAML считывает 1e-6 как строку), а поля, значением которых является словарь, например rope_parameters, указывайте полностью. Поля архитектуры должны соответствовать загружаемым весам.
Допобучение с PEFT (LoRA)
Cosmos3 поддерживает LoRA через интеграцию PEFT LeRobot (pip install -e ".[cosmos3,training,peft]"). По умолчанию LoRA адаптирует проекции внимания генерационного пути (q_proj_gen, k_proj_gen, v_proj_gen, o_proj_gen), а модули действий (action2llm, llm2action, action_modality_embed) обучаются полностью и сохраняются вместе с адаптером.
lerobot-train \
--policy.type=cosmos3_nano \
--policy.pretrained_path=lerobot/Cosmos3-Nano \
--policy.load_action_modules=false \
--policy.gradient_checkpointing=true \
--policy.repo_id=${HF_USER}/Cosmos3-Nano-Policy-LIBERO_10-LoRA \
--peft.method_type=lora \
--peft.r=16 \
--peft.lora_alpha=32 \
--policy.optimizer_lr=5e-4 \
--policy.optimizer_weight_decay=0 \
--dataset.repo_id=lerobot/LIBERO_10-Cosmos3 \
--accelerator.mixed_precision=bf16 \
--tf32=false \
--ema.type=power \
--ema.sigma_rel=0.1 \
--batch_size=4 \
--steps=16000 \
--output_dir=outputs/train/cosmos3_nano_libero_10_lora--peft.lora_alpha=32, а значения learning rate и weight decay соответствуют значениям из нативного рецепта LoRA для Cosmos3. Без--peft.lora_alphaPEFT использует значение 8.- При использовании
--policy.load_action_modules=falseмодули действий могут иметь другую форму (--policy.max_action_dim,--policy.num_embodiment_domains). Это работает только для полной дообучения: при перезагрузке запуска PEFT загружается базовая модель, которой требуются те же формы. --policy.train_gen_stream_onlyи--policy.freeze_vision_encoderне имеют эффекта при использовании PEFT: обучаются только адаптеры и модули действий.- Не добавляйте проекции действий (
action2llm,llm2action) в--peft.target_modules: это таблицы для каждого воплощения, которые читаются напрямую сгруппированным матричным умножением, поэтому LoRA не изменит их. Они уже обучаются полностью. - Используйте значение по умолчанию float32 для
--policy.dtypeпри работе с PEFT, чтобы модули действий, обучающиеся в полном объёме, сохраняли мастер-веса в float32. - Встроенные рецепты не задают размер батча или расписание для LoRA. Команда сохраняет расписание LIBERO (линейное затухание до нуля на шаге 16000) с 4 образцами на шаг.
- Cosmos3 Nano с LoRA обучается на одном GPU объёмом 80 ГБ с использованием градиентного чекпоинтинга, занимая около 64 ГБ при 4 образцах на GPU (см. Требования к оборудованию).
Оценка
Оцените контрольную точку LIBERO на четырёх наборах:
lerobot-eval \
--policy.path=lerobot/Cosmos3-Nano-Policy-LIBERO \
--policy.dtype=bfloat16 \
--tf32=false \
--env.type=libero \
--env.task=libero_spatial,libero_object,libero_goal,libero_10 \
--env.observation_height=256 \
--env.observation_width=256 \
--eval.n_episodes=10 \
--eval.batch_size=10 \
--output_dir=outputs/eval/cosmos3_nano_libero- Для контрольной точки собственного запуска обучения передайте веса EMA:
--policy.path=outputs/train/cosmos3_nano_libero_10/checkpoints/last/pretrained_model_ema. --env.observation_height=256 --env.observation_width=256отображает камеры с разрешением 256x256, как в обучающих данных.- Среда LIBERO автоматически добавляет преобразование действий Cosmos3 в свои процессоры: действия rot6d размерностью 10D преобразуются обратно в действия axis angle размерностью 7D, используемые в LIBERO. При запуске политики вне
lerobot-evalтакже создавайте процессоры среды с помощьюmake_env_pre_post_processors(env_cfg, policy_cfg)изlerobot.envs.factory. - См. руководство LIBERO для получения информации о протоколе оценки и других вариантах.
Предсказанное видео
Cosmos3 предсказывает будущие кадры вместе с действиями. Передайте --policy.save_predicted_video=true, чтобы декодировать предсказанное видео каждого чанка с помощью VAE и записать pred_episode_*.mp4 рядом с отрендеренными видео eval_episode_*.mp4.
Cosmos3 Edge на задаче LIBERO-10 «положите чёрную миску в нижний ящик шкафа и закройте его». Слева: наблюдения от третьего лица и с запястья в ходе выполнения. Справа: видео, предсказанное политикой, с выборкой каждые 16 действий от текущего наблюдения.
Результаты
LIBERO
| Модели | Libero-Spatial | Libero-Object | Libero-Goal | Libero-10 | Среднее |
|---|---|---|---|---|---|
| Cosmos3-Nano-Policy-LIBERO | 98.0% (490/500) | 99.4% (497/500) | 97.4% (487/500) | 96.8% (484/500) | 97.90% |
| Cosmos3-Edge-Policy-LIBERO | 98.6% (493/500) | 99.4% (497/500) | 97.2% (486/500) | 96.6% (483/500) | 97.95% |
| Cosmos3-Nano-Policy-LIBERO_10 | N/A | N/A | N/A | 97.6% (488/500) | 97.60% |
| Cosmos3-Edge-Policy-LIBERO_10 | N/A | N/A | N/A | 95.2% (476/500) | 95.20% |
| Cosmos-Nano-TechReport | N/A | N/A | N/A | 97.4% | 97.40% |
Успешность в замкнутом цикле на LIBERO. Cosmos3-Nano-Policy-LIBERO и Cosmos3-Edge-Policy-LIBERO обучены на четырёх наборах LIBERO (lerobot/Cosmos3-Nano-Policy-LIBERO, lerobot/Cosmos3-Edge-Policy-LIBERO). Cosmos3-Nano-Policy-LIBERO_10 и Cosmos3-Edge-Policy-LIBERO_10 обучены только на LIBERO-10 (lerobot/Cosmos3-Nano-Policy-LIBERO_10, lerobot/Cosmos3-Edge-Policy-LIBERO_10), при этом конфигурация обучения Cosmos3-Nano-Policy-LIBERO_10 следует рецепту LIBERO-10, описанному в техническом отчёте. Cosmos-Nano-TechReport — это успешность Cosmos3 Nano на LIBERO-10, обученного только на LIBERO-10, как указано в таблице 20 технического отчёта (MT-init, итерация 2000, 500 прогонов).
Цитирование
@techreport{nvidia2026cosmos3,
title = {Cosmos 3: Omnimodal World Models for physical AI},
author = {{NVIDIA Cosmos Team}},
year = {2026},
url = {https://research.nvidia.com/labs/cosmos-lab/cosmos3/technical-report.pdf}
}Лицензия
Реализация LeRobot следует лицензии Apache 2.0 LeRobot. Веса Cosmos3 и нативный код распространяются по лицензии OpenMDW-1.1.
Update on GitHub