LeRobot documentation

Cosmos3

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Cosmos3

Cosmos3, Cosmos 3 ailesi olan NVIDIA'nın omnimodal dünya modelleri üzerine inşa edilmiş, robot kontrolü için dünya eylem modelidir. Kamera gözlemlerinden ve bir dil talimatından yola çıkarak politika, gelecekteki video karelerini ve bir sonraki robot eylem bloğunu birlikte tahmin eder. LeRobot uygulaması, yerel cosmos-framework eylem politikasından uyarlanmıştır ve LeRobot formatına dönüştürülmüş, yayınlanan Cosmos3 Nano ve Edge modellerini çalıştırır.

Model Genel Bakış

Cosmos 3, Transformer Karışımı (MoT) mimarisine sahiptir. Her decoder katmanı, kendi katman normlarına, dikkat projeksiyonlarına ve MLP'lerine sahip iki yola sahiptir ve bu iki yol yalnızca paylaşılan bir öz-dikkatte birleşir:

  • Anlama yolu (reasoner), prompt'un metin tokenlarını ve isteğe bağlı olarak ViT görüntü tokenlarını nedensel dikkat (causal attention) ile okur.
  • üretim yolu (üreteç), difüzyon alt dizisinin sürekli jetonlarını okur: videonun Wan2.2 VAE latentleri ve eylem jetonları. Her iki yola da çift yönlü dikkat uygular ve akış eşleştirmesiyle eğitilir.
Mixture-of-Transformers architecture of Cosmos 3

Cosmos 3'ün Mixture-of-Transformers (MoT) mimarisi (teknik rapordaki Şekil 5). Sol: otoregresif (AR) alt dizisi reasoner'dan, difüzyon (DM) alt dizisi ise generator'dan geçer ve ikisi paylaşılan çok modlu dikkat (attention) katmanında buluşur. Sağ: dikkat maskesi; AR için nedensel (causal), difüzyon için tam (full).

Bir politika olarak Cosmos3, yerel eylem tariflerinin dünya eylem modeli modunda çalışır:

  • Girdiler: kamera görünümleri tek bir video tuvalinde birleştirilir (bir görünüm olduğu gibi, iki görünüm yan yana, üç görünümde ilki üstte diğer ikisi altta). İstek, görevi, kare hızını, tuval çözünürlüğünü, tuval yerleşimi açıklamasını ve parçanın boşta kalan kare sayısını taşır.
  • Eğitim: politika, mevcut klibin ve chunk_size gelecek karesinin VAE ile kodlanmasını, gelecek latentlere ve eylem parçasına gürültü eklenmesini ve her ikisinin de gürültüsüzleştirilmesini öğrenir. Kayıp, bir video kaybı ile bir eylem kaybının ağırlıklı toplamıdır.
  • Çıkarım: durum çerçevesi temizdir, gelecek video ve eylemler UniPC çözücüsüyle birlikte örneklenir ve politika eylem parçasını döndürür. Tahmin edilen video değerlendirme sırasında kaydedilebilir (bkz. Değerlendirme).
  • Varsayılan olarak, yerel eğitim sonrası tariflerinde olduğu gibi yalnızca üretim yolu, etrafındaki katmanlar ve eylem modülleri eğitilir (train_gen_stream_only=true, freeze_vision_encoder=true).

LeRobot, yayınlanan iki boyutu iki politika türü olarak sağlar:

Cosmos3 NanoCosmos3 Edge
Politika türücosmos3_nanocosmos3_edge
Parametreler (varsayılan olarak eğitilir)16.5B (7.0B)4.6B (1.4B)
BackboneQwen3-VL'den başlatılan MoT, 36 katman, gizli boyut 4096Yoğun 2B'lik bir transformer'a sahip MoT, 28 katman, gizli boyut 2048
Tokenizernvidia/Cosmos3-Nanonvidia/Cosmos3-Edge
Temel kontrol noktasılerobot/Cosmos3-Nanolerobot/Cosmos3-Edge

Kurulum Gereksinimleri

  1. LeRobot'u Yükleme Kılavuzumuz’u takip ederek yükleyin.

  2. Cosmos3 bağımlılıklarını yükleyin:

    pip install -e ".[cosmos3]"

    PyPI'den LeRobot'u yüklediyseniz:

    pip install 'lerobot[cosmos3]'
  3. İş akışınızın ek bileşenlerini ekleyin: lerobot-train için training, LIBERO üzerinde eğitim veya değerlendirme için libero ve LoRA için peft. Örneğin:

    pip install -e ".[cosmos3,training,libero]"

Cosmos3 varsayılan olarak PyTorch ölçekli nokta çarpımı dikkat arka ucunu (sdpa) kullanır. Ortamınızda uyumlu bir flash_attn kurulumu varsa, --policy.attn_implementation=flash_attention_2 isteğinde bulunabilirsiniz. Bunu --policy.compile_model=true ile birleştirmeyin: derlenmiş decoder katmanları, flash attention ile her katman için yeniden derlenir ve yeniden derleme hatasıyla durur.

Kontrol Noktaları

Kontrol NoktasıSizinEğitim verisiKullan
lerobot/Cosmos3-NanoNanonvidia/Cosmos3-Nano sürümüİnce ayar için temel
lerobot/Cosmos3-EdgeKenarnvidia/Cosmos3-Edge sürümüİnce ayar için temel
lerobot/Cosmos3-Nano-Policy-LIBERONanolerobot/LIBERO-Cosmos3LIBERO değerlendirmesi
lerobot/Cosmos3-Edge-Policy-LIBEROKenarlerobot/LIBERO-Cosmos3LIBERO değerlendirmesi
lerobot/Cosmos3-Nano-Policy-LIBERO_10Nanolerobot/LIBERO_10-Cosmos3LIBERO-10 değerlendirmesi
lerobot/Cosmos3-Edge-Policy-LIBERO_10Kenarlerobot/LIBERO_10-Cosmos3LIBERO-10 değerlendirmesi
  • Temel denetim noktaları, yayınlanan ağırlıkları LeRobot biçiminde barındırır. Eylem modülleri (action2llm, llm2action, action_modality_embed) henüz bir robot için eğitilmediğinden, ince ayara --policy.load_action_modules=false ile başlayın (bkz. LİBERO üzerinde ince ayar).
  • Taban kontrol noktalarının config.json dosyası, yerel DROID eğitim sonrası tarifini içerir ve politika türlerinin sınıf varsayılanları yerel LIBERO tarifidir.
  • LIBERO kontrol noktaları, eğitim çalışmasının EMA ağırlıklarını içerir.
  • Ağırlıklar bfloat16 olarak saklanır. config.json bilinçli olarak dtype: float32 ayarlar: bu kontrol noktalarından karışık hassasiyetli eğitim, yerel eğitimde olduğu gibi float32 ana ağırlıkları korur. Çıkarım ve değerlendirme için --policy.dtype=bfloat16 parametresini iletin.

Bir kontrol noktasından başlamak için iki yol vardır:

  • --policy.path=<checkpoint> komutu, kaydedilmiş yapılandırmayı, ağırlıkları ve işlemcileri yükler, ardından komut satırını bunların üzerine uygular.
  • --policy.type=cosmos3_nano --policy.pretrained_path=<checkpoint> (veya cosmos3_edge) yalnızca ağırlıkları ve işlemcileri yükler ve yapılandırma, sınıf varsayılanları olan LIBERO tarifiyle başlar.

LIBERO üzerinde ince ayar

Sınıf varsayılanları, teknik raporun LIBERO tarifiyle aynıdır: 16 eylemlik parçalar, domain_id=5 vücut tipi, durum eylemi yok, eylemler için kantil normalizasyonu, çıkarım sırasında 30 adımla UniPC ve sınıflandırıcı-ücretsiz yönlendirme yok, ayrıca 500 ısınma adımı ve 16000. adımda sıfıra doğru doğrusal azalma ile 5e-5 öğrenme oranı. --policy.type ile bir temel denetim noktasından başlandığında, yalnızca --policy.load_action_modules=false gereklidir.

Tarif, Cosmos3 düzenine dönüştürülmüş LIBERO verisi üzerinde eğitim alır:

Her ikisi de yerel tarife ait veriler olan nvidia/LIBERO_LeRobot_v3 kaynağından gelir. Aksiyonlar, LIBERO'nun 7D eksen açısı aksiyonları yerine 10D [delta position (3), rot6d (6), gripper] şeklindedir; iki kamera olan observation.images.image (üçüncü şahıs) ve observation.images.image2 (bilek) 256x256 çözünürlükte ve 20 FPS'dir ve aksiyon istatistikleri yerel tarifeye aittir. Değerlendirme sırasında LIBERO ortamı aksiyonları geri dönüştürür (bkz. Evaluation).

Eğitim komutu

Yerel LIBERO tarifi, LIBERO-10 üzerinde 2000 yineleme ve dört suite üzerinde 5000 yineleme boyunca 2048 örneklik küresel bir batch ile eğitim yapar (en iyi checkpoint 1500. yinelemenin yakınında, en iyi 4500'ün yakınında). Aşağıdaki komut, bunu 8 GPU'lu tek bir makinede yeniden üretir: 8 GPU üzerinde FSDP2, GPU başına 32 örnek ve 8 gradyan biriktirme adımı, böylece her optimizator güncellemesi için 32 x 8 x 8 = 2048 örnek. Her yerel yineleme sayısı, 8 biriktirme adımı ile çarpılır: 2000 yineleme --steps=16000 olur, 500 yinelemede bir checkpoint --save_freq=4000 olur ve 500'lik ısınma ile 16000'de biten azalma 4000 ve 128000 olur.

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

Dört suite için --dataset.repo_id=lerobot/LIBERO-Cosmos3 ve --steps=40000 (5000 iterasyon) kullanın. Cosmos3 Edge için --policy.type=cosmos3_edge --policy.pretrained_path=lerobot/Cosmos3-Edge kullanın.

Temel eğitim parametreleri

ParametreAçıklama
--policy.load_action_modules=falseYerel eğitim sonrası tariflerde yapıldığı gibi modülleri yüklemek yerine başlangıç durumlarından başlatır. Yalnızca bir temel kontrol noktasından ince ayar yaparken ayarlayın (aşağıdaki notlara bakın).
--parallelism.dp_shard=88 GPU üzerinde FSDP2. Politika, FSDP2 sarma birimlerini beyan eder, bu nedenle --accelerator.fsdp.wrap_modules gerekmez. çoklu GPU eğitim kılavuzuna bakın.
--accelerator.fsdp.mixed_precision_policy.*Yerel eğitimde olduğu gibi, float32 ana ağırlıklarla bfloat16 hesaplama ve gradyan indirgeme. Varsayılan --policy.dtype (float32) değerini bununla birlikte koruyun: bfloat16 bir politika, bfloat16 ana ağırlıkları eğitecektir.
--accelerator.gradient_accumulation.stepsKüresel batch, --batch_size x GPU sayısı x birikim adımlarıdır. sync_each_batch=true, gradyanları her mikro batch'ten sonra azaltır, böylece parçalı (sharded) kalırlar ve ek bir parçalanmamış kopyaya ihtiyaç duymazlar.
--steps, --save_freq, --policy.scheduler_*_stepsLeRobot, optimizer güncellemeleri değil, döngü adımlarını (mikro toplamları) sayar. Yerel tarifin yineleme sayılarını (2000 veya 5000 yineleme, 500 ısınma, 16000 azalma, her 500 adımda bir checkpoint) birikim adımlarıyla çarpın. --steps değerini en fazla --policy.scheduler_decay_steps kadar tutun: bu değerin ardından öğrenme oranı sıfıra düşer.
--ema.type=power --ema.sigma_rel=0.1Yerel tarifin EMA'sı. Her checkpoint, pretrained_model_ema/ içinde değerlendirme ve yayınlama için kullanılacak EMA ağırlıklarını da barındırır.
--tf32=falseYerel eğitimde olduğu gibi float32 matris çarpımlarını tam hassasiyette tutar.
--policy.gradient_checkpointing=trueArka yönde bellek tasarrufu sağlamak için decoder katmanlarının ve görsel blokların aktivasyonlarını yeniden hesaplar.
--policy.compile_model=trueİsteğe bağlı: torch.compile ile decoder katmanları ve VAE encoder'ı.

Tek bir GPU'da veya DDP ile, FSDP2 bayraklarını (--parallelism.dp_shard ve --accelerator.fsdp.mixed_precision_policy.*) --accelerator.mixed_precision=bf16 ile değiştirin. Örneğin, tek bir GPU'da Cosmos3 Edge, 2048'lik aynı global batch için adım başına 32 örnek ve 64 birikim adımı:

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, checkpoint yüklendikten sonra true olarak sıfırlanır; bu sayede kaydedilen çalışma, eğitilmiş eylem modüllerini yeniden yükler. Eylem modüllerinin yanlışlıkla başlangıç durumlarında kalmasına yol açan iki durum vardır:

  • --policy.pretrained_path veya --policy.path olmadan bir politika oluşturulduğunda: hiçbir şey yüklenmez, bu nedenle bayrak false olarak kalır ve o çalıştırmanın sonraki bir değerlendirmesi veya devam ettirilmesi, eğitim görmüş eylem modüllerini atlar.
  • --peft.full_training_modules dışında kalan eylem modülleriyle PEFT: bu durumda eylem modülleri asla eğitilmez.

--policy.load_action_modules=false parametresini yalnızca temel bir kontrol noktasından ince ayar yaparken ayarlayın. PEFT ile çalışırken, eylem modüllerini --peft.full_training_modules içinde (varsayılan) tutun.

Donanım gereksinimleri

Bu sayfadaki komutlar ve gradient checkpointing kullanılarak A800 80 GB GPU'larda ölçüldü:

KurulumGPU'larGPU başına partiGPU başına zirve bellek
Nano, tam ince ayar (FSDP2)83238 GB
Nano, LoRA1464 GB
Edge, tam ince ayar13247 GB
Edge, LoRA1821 GB
bfloat16, Nano ve Edge'de Değerlendirme110 ortam39 GB ve 15 GB
  • Cosmos3 Nano, tam ince ayar için 80 GB'lık GPU'lara ve en az 4 GPU'ya ihtiyaç duyar: FSDP2 modeli parçalara ayırmadan önce, her GPU tüm float32 modeli (yaklaşık 66 GB) barındırır.
  • Yukarıdaki LIBERO komutu, 8 A800 GPU üzerinde optimizator güncellemesi başına yaklaşık 45 saniye sürer, bu da LIBERO-10 için yaklaşık 25 saate karşılık gelir.

Kendi verileriniz üzerinde ince ayar

Cosmos3, eğitim tarifini komut satırından ve veri setinden alır: politika, robota özgü hiçbir mantık içermez. Aşağıdaki maddelere uyduğu sürece herhangi bir LeRobot veri seti çalışır.

Veri seti gereksinimleri

  • Kameralar: veri setinin info.json dosyasındaki sırasına göre bir ila üç observation.images.* özelliği. Her görünüm --policy.view_size boyutuna yeniden boyutlandırılır (varsayılan olarak ilk kameranın boyutu) ve tek bir video tuvalinde birleştirilir: tek görünüm olduğu gibi, iki görünüm yan yana, üç görünümde ise ilk görünüm üstte, diğer iki görünüm onun altında yan yana yer alır. Kameraları bu yerleşim düzeninin sırasına göre yerleştirin, örneğin LIBERO için [third person, wrist] ve DROID için [wrist, exterior 1, exterior 2].
  • Açıklamayı görüntüle: --policy.view_description, tuval yerleşimini açıklayan istem cümlesidir. Varsayılanlar, LIBERO yerleşimini (sınıf varsayılanları) ve DROID yerleşimini (temel config.json) açıklar. Kendi yerleşiminizin cümlesini yazın: yanlış bir açıklama tespit edilmez ve yalnızca istemi zayıflatır.
  • Eylem gösterimi: politika, veri setindeki eylemleri olduğu gibi öğrenir ve bir dönüştürme adımı içermez. Eğitimden önce, eylemleri öğrenmek istediğiniz gösterime dönüştürün; LIBERO verisi rot6d dönmeleri için bunu yapar. Ortam başka bir gösterim bekliyorsa, eylemleri ortam işleyicilerinde (environment processors) geri dönüştürün (LIBERO ortamı Cosmos3 için bunu yapar).
  • Eylem genişliği: en fazla --policy.max_action_dim (64) kanal. Çıkış genişliği veri setinden gelir.
  • Kare hızı: fps, veri seti meta verisinden gelir ve gerçek kontrol hızı olmalıdır: istemciye (prompt) yazılır ve video konumlarının zaman eksenini ile boşta (idle) karelerin eşiklerini belirler.
  • İstatistikler: varsayılan eylem normalizasyonu QUANTILES'dir ve bunun için meta/stats.json içindeki eylemin q01 ve q99 istatistiklerine ihtiyaç duyar (LeRobot tarafından yazılan veri setlerinde bunlar mevcuttur). Yerel DROID tarifi bunun yerine IDENTITY kullanır.
  • Durum: --policy.use_state=true ile mevcut durum, eylemlerin önüne temiz bir durum eylemi olarak yerleştirilir. observation.state bu durumda eylemle aynı genişliğe ve kanal anlamına sahip olmalıdır. Durum ve eylem, kendi istatistikleriyle normalize edilir.
  • Dil: Her karede task, istemin talimatıdır.
  • Gövde: --policy.domain_id, 32 seçenek arasından eylem projeksiyonlarının satırını seçer. Yerel tarifler LIBERO için 5, DROID için 8 ve RoboCasa için 30 kullanır. Eylem modülleri başlangıç durumlarından başlatıldığında (--policy.load_action_modules=false), her satır eğitilmemiş olarak başlar ve herhangi bir değer işe yarar.
  • Parça: parça başına --policy.chunk_size eylem (LIBERO için 16, DROID için 32) ve parça başına yürütülen --policy.n_action_steps eylem.

None olarak bırakılan alanlar (fps, view_size) ve eylem kanal adları veri setinden gelir. Diğer tüm alanlar yapılandırmadan gelir, bu nedenle bunları komut satırında veya bir --config_path dosyasında ayarlayın.

Eylem ve durum kanal adları. İstem, chunk içindeki kaç kare boşta (idle) olduğunu (robotun hareket etmediği) belirtir ve Cosmos3IdleFrameProcessorStep, bunları meta/info.json içindeki eylem kanal adlarından sayar. [<prefix>_]<type>_<index> biçimindeki adlar, kanal türlerini belirtir: pos, bir rotasyon (rot6d, rot9d, axisangle, euler_xyz, quat_xyzw, quat_wxyz), gripper veya joint, kolları ayırt etmek için bir önek ile (örneğin left_rot6d_0). LIBERO verisi pos_0..2, rot6d_0..5, gripper_0 kullanırken, DROID yerleşimi joint_0..6, gripper_0 kullanır.

Bu adlandırma zorunlu değildir. Bu adlandırma yapılmadığında politika yalnızca bir uyarı kaydeder ve istem boşta kare saymaz; bu da LIBERO tarifi zaten gördüğü şeydir (yerel kural altında bölümlerinde boşta kare yoktur). Yerel DROID tarifinin boşta kare sayısını istiyorsanız yalnızca adlandırmayı takip edin.

DROID tarifi

Taban checkpoint'lerin config.json dosyası, yerel DROID eğitim sonrası tarifi (recipe)dir: domain_id=8 vücut (embodiment), 32 eylemlik parçalar (chunks), mevcut durumun bir durum eylemi olarak kullanılması ve bunun üzerinden sayılan boşta (idle) kareler (use_state=true, idle_state=true), normalizasyon yok (IDENTITY), çıkarım sırasında 4 adımlı UniPC ve 3 ölçekli sınıflandırıcı-ücretsiz yönlendirme (classifier-free guidance), ayrıca 8e-5 öğrenme oranı (yerel 2e-4'ün 0.4 çarpanıyla) ve ısınma (warmup) olmadan 100000. adımda sıfıra doğru doğrusal azalma. --policy.path ile başlamak, bu tarif ile eğitim yapar.

Yerel tarif, nvidia/Cosmos3-DROID verisindeki başarılı epizotlar üzerinde eğitim yapar. Cosmos3 yerleşimine sahip bir DROID veri setinde şunlar bulunur:

  • Üç kamera observation.images.wrist_left, observation.images.exterior_1_left ve observation.images.exterior_2_left, bu sırayla (bilek üstte, onun altında iki dış görünüm), yerel veride 360x640 çözünürlüğünde.
  • joint_0 ile joint_6 ve gripper_0 adlı 8D eklem konumu eylemleri ve aynı yerleşime sahip observation.state.
  • 15 FPS kare hızı.

Yerel tarif, 10000 yineleme boyunca 8192 örneklik küresel bir parti ile eğitim yapar ve her 1000 yinelemede bir kontrol noktası oluşturur. 8 GPU'lu tek bir makinede, GPU başına 8 örnek ve 128 birikim adımı aynı küresel partiyi verir (8 x 8 x 128 = 8192) ve her yineleme sayısı 128 ile çarpılır:

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

The native DROID recipe ran on 256 GPUs. On one machine with 8 A800 GPUs one optimizer update of this command takes about 33 minutes, so the full recipe needs many machines. Run the same command on every machine with the multi node flags of accelerate launch (or torchrun), shard within each machine and replicate across machines with --parallelism.dp_replicate=<number of machines> --parallelism.dp_shard=8, and divide --accelerator.gradient_accumulation.steps and the step counts by the number of machines. See HSDP in the multi GPU training guide.

Yeni bir robot

Yeni bir robot için --policy.type ile sınıf varsayılanlarından başlayın ve verilerinizin alanlarını komut satırında ayarlayın, örneğin:

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 \
  ...

Backbone yapılandırması

Gövde yapılandırması --policy.mot_backbone tek bir komut satırı değeridir. Değiştirmek istediğiniz alanları içeren bir YAML sözlüğü iletin; örneğin, önceden eğitilmiş ağırlıklar olmadan hızlı bir test için daha az katmana sahip bir model:

--policy.type=cosmos3_edge --policy.mot_backbone='{text_config: {num_hidden_layers: 2}, vision_config: {num_hidden_layers: 1}}'

Atlanan alanlar, boyutun varsayılanlarını veya --policy.path ile yüklenen yapılandırmanın değerlerini korur. Ondalıklı sayıları 1.0e-6 biçiminde yazın (YAML, 1e-6 değerini bir dize olarak okur) ve değeri bir sözlük olan alanları, örneğin rope_parameters, eksiksiz verin. Mimari alanlar, yüklediğiniz ağırlıklarla eşleşmelidir.

PEFT (LoRA) ile ince ayar

Cosmos3, LeRobot PEFT entegrasyonu (pip install -e ".[cosmos3,training,peft]") aracılığıyla LoRA’yı destekler. Varsayılan olarak LoRA, üretim yolundaki dikkat projeksiyonlarını (q_proj_gen, k_proj_gen, v_proj_gen, o_proj_gen) uyarlar ve eylem modülleri (action2llm, llm2action, action_modality_embed) tam olarak eğitilir ve adaptörle birlikte kaydedilir.

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, öğrenme hızı ve ağırlık çürümesi, yerel Cosmos3 LoRA tarifinin değerleridir. --peft.lora_alpha olmadan PEFT 8 kullanır.
  • --policy.load_action_modules=false ile eylem modülleri şekil değiştirebilir (--policy.max_action_dim, --policy.num_embodiment_domains). Bu yalnızca tam ince ayar (full fine-tuning) için geçerlidir: bir PEFT çalıştırmasını yeniden yüklemek, aynı şekillere ihtiyaç duyan taban modeli yükler.
  • PEFT ile --policy.train_gen_stream_only ve --policy.freeze_vision_encoder parametrelerinin bir etkisi yoktur: yalnızca adaptörler ve eylem modülleri eğitilir.
  • Eylem projeksiyonlarını (action2llm, llm2action) --peft.target_modules parametresine eklemeyin: bunlar, doğrudan gruplu matris çarpımı tarafından okunan, vücut (embodiment) başına tablolar olduğu için LoRA bunları değiştiremez. Zaten tam olarak eğitiliyorlar.
  • PEFT ile varsayılan float32 --policy.dtype değerini koruyun, böylece tam olarak eğitilen eylem modülleri float32 ana ağırlıkları korur.
  • Yerel tarifler, LoRA parti boyutu veya zamanlaması tanımlamaz. Komut, LIBERO zamanlamasını (16000. adımda sıfıra doğrusal azalma) ve adımda 4 örnek ile korur.
  • Cosmos3 Nano, LoRA ile tek bir 80 GB GPU üzerinde, gradyan kontrol noktası (gradient checkpointing) kullanılarak eğitilir; GPU başına 4 örnek için yaklaşık 64 GB bellek gerektirir (bkz. Donanım gereksinimleri).

Değerlendirme

Dört suite üzerinde bir LIBERO checkpoint'ini değerlendirin:

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
  • Kendi eğitim çalışmanızın bir kontrol noktası için EMA ağırlıklarını iletin: --policy.path=outputs/train/cosmos3_nano_libero_10/checkpoints/last/pretrained_model_ema.
  • --env.observation_height=256 --env.observation_width=256 kameraları eğitim verisinin 256x256 çözünürlüğünde işler.
  • LIBERO ortamı, Cosmos3 eylem dönüşümünü işlemcilerine otomatik olarak ekler: 10D rot6d eylemleri, LIBERO'nun 7D eksen açısı eylemlerine geri dönüştürülür. Politikayı lerobot-eval dışında çalıştırdığınızda, ortam işlemcilerini de lerobot.envs.factory içindeki make_env_pre_post_processors(env_cfg, policy_cfg) ile oluşturun.
  • Değerlendirme protokolü ve diğer seçenekler için LIBERO kılavuzuna bakın.

Tahmin edilen video

Cosmos3, gelecek kareleri eylemlerle birlikte tahmin eder. Her parçanın tahmin edilen videosunu VAE ile çözmek ve pred_episode_*.mp4 dosyalarını, render edilmiş eval_episode_*.mp4 videolarının yanına yazmak için --policy.save_predicted_video=true parametresini geçirin.

Cosmos3 Edge, LIBERO-10 görevi “siyah kaseyi dolabın alt çekmecesine koy ve kapat” üzerinde. Sol: rollout’un üçüncü şahıs ve bilek gözlemleri. Sağ: politika tarafından tahmin edilen video, mevcut gözlemden her 16 aksiyonda bir yeniden örneklenmiştir.

Sonuçlar

LIBERO

ModellerLibero-SpatialLibero-ObjectLibero-GoalLibero-10Ortalama
Cosmos3-Nano-Policy-LIBERO98.0% (490/500)99.4% (497/500)97.4% (487/500)96.8% (484/500)97.90%
Cosmos3-Edge-Policy-LIBERO98.6% (493/500)99.4% (497/500)97.2% (486/500)96.6% (483/500)97.95%
Cosmos3-Nano-Policy-LIBERO_10N/AN/AN/A97.6% (488/500)97.60%
Cosmos3-Edge-Policy-LIBERO_10N/AN/AN/A95.2% (476/500)95.20%
Cosmos-Nano-TechReportN/AN/AN/A97.4%97.40%

LIBERO'da kapalı döngü başarı oranları. Cosmos3-Nano-Policy-LIBERO ve Cosmos3-Edge-Policy-LIBERO, dört LIBERO setinde (lerobot/Cosmos3-Nano-Policy-LIBERO, lerobot/Cosmos3-Edge-Policy-LIBERO) eğitilmiştir. Cosmos3-Nano-Policy-LIBERO_10 ve Cosmos3-Edge-Policy-LIBERO_10 yalnızca LIBERO-10'da (lerobot/Cosmos3-Nano-Policy-LIBERO_10, lerobot/Cosmos3-Edge-Policy-LIBERO_10) eğitilmiştir ve Cosmos3-Nano-Policy-LIBERO_10'ın eğitim kurulumu, teknik raporda bildirilen LIBERO-10 tarifini takip eder. Cosmos-Nano-TechReport, yalnızca LIBERO-10'da eğitilen Cosmos3 Nano'nun LIBERO-10 başarı oranıdır; teknik raporun Tablo 20'sinde bildirildiği gibidir (MT-init, 2000 iterasyon, 500 rollout).

Atıf

@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}
}

Lisans

LeRobot uygulaması, LeRobot'un Apache 2.0 Lisansı'nı takip eder. Cosmos3 ağırlıkları ve yerel kod, OpenMDW-1.1 Lisansı altında yayınlanmıştır.

Update on GitHub