Cosmos3-Edge-Policy-DROID β FastWAM-K (λΆλΆ λΉμ μ μ§), step 9000
nvidia/Cosmos3-Edge-Policy-DROID(full WAM, RoboLab 36.5%)μμ warm startν
λΆλΆ λΉμ μ μ§(leading-K, K=1) μ€νμ μ€κ° 체ν¬ν¬μΈνΈμ
λλ€. κ³νλ 12000 iter μ€ 75%
μ§μ μ΄λ©°, νκ°μ© μ€λ
μ·μ΄μ§ μ΅μ’
μ°μΆλ¬Όμ΄ μλλλ€.
- stepλ³ νμ ν΄λ(
step9000/)μ λμ . λ£¨νΈ READMEλ μ΅κ·Ό stepμ κ°λ¦¬ν΅λλ€. - EMA κ°μ€μΉ κΈ°μ€ export, training state μμ β pretrained model νμΌλ§.
β οΈ μλΉ μ νμ μΈμ
μ΄ μ²΄ν¬ν¬μΈνΈλ conditioning νλ μ + μ ν μμ± 1 latent νλ μμ μ μ§νλλ‘ νμ΅λμ΅λλ€. κΈ°λ³Έ FastWAM νλκ·Έλ‘ μλΉνλ©΄ νμ΅κ³Ό λ€λ₯Έ μνμ€κ° λ°°ν¬λ©λλ€.
python -m cosmos_framework.scripts.action_policy_server_robolab \
--checkpoint-path "$ckpt" --port 8000 \
--format-prompt-as-json True --no-guardrails \
--keep-generated-vision-frames 1 # β --drop-generated-vision μ΄ μλ
κ΅μ°¨ νΈμ€νΈ ν©μ λΆλ³μ: num_kept = (μ€μ conditioning prefix latent νλ μ μ) + K,
μ€μ μ΄ latent νλ μ μλ‘ ν΄λ¨ν. μ μ§λ K νλ μμ conditionedκ° μλκ³
denoise λμμ
λλ€(pack_vision_tokensκ° planμ condition_frame_indexes_visionμΌλ‘
λ§μ€ν¬λ₯Ό λ§λ€μ΄ νλ μ 1..Kκ° mse_loss_indexesμ λ€μ΄κ°λλ€) β μΆλ‘ μ λ―Έλ ground truthκ°
μμΌλ―λ‘ κ·ΈλμΌ λ°°ν¬κ° μ±λ¦½ν©λλ€.
μ K=1μΈκ° (2026-09-09)
K=2 step9000μ΄ 12νμ€ν¬ νλ‘ν μ½μμ **task-mean 34.38%, 95% CI [26.17, 42.58]**λ₯Ό λμ΅λλ€ β K=0 plateau(λ°΄λ μν 24.97)λ₯Ό νμ€ν λμκ³ baseline 36.46%μλ ꡬλΆλμ§ μμ΅λλ€(Fisher p=0.880). μ§μ°μκ°μ μ€μΈ‘ 730.7 ms, 무νλκ·Έ baseline 1711.2 ms λλΉ 2.34Γμ λλ€.
λ¨μ λ°°ν¬ μ§λ¬Έμ λ μ€μ¬λ λλκ°μ λλ€. K=1μ zero-shot μ€μ μ€μΈ‘μ 627.6 msμ΄κ³ , K=2μ λΉμ·νκ² ν볡νλ€λ©΄ K=2λ₯Ό λ체ν©λλ€. μ΄ μ μ₯μκ° κ·Έ κ²μ μ λλ€.
K=1μ λ°°ν¬ λ°°μλ μμ§ νμ νμ§ μμ΅λλ€. λΉμ¨μ λΆμΒ·λΆλͺ¨λ λΉκ΅ λμμΈ λ μ νλκ° μΈ‘μ λ κ²κ³Ό κ°μ ꡬμ±μμ μμΌ ν©λλ€. K=2μ 2.34Γλ κ·Έ 쑰건μ λ§μ‘±ν©λλ€ β λΆλͺ¨ 1711.2 msλ 36.5%λ₯Ό λΈ λ¬΄νλκ·Έ μλΉ, λΆμ 730.7 msλ 34.4%λ₯Ό λΈ step9000μ λλ€. K=1μ μ νλ μΈ‘μ μ΄ μμ§ μμΌλ―λ‘ μ§μ΄ λ λΆμκ° μκ³ , 627.6 msλ₯Ό
--keep-generated-vision-frames 8μΈ‘μ μΉ(1771.9 ms)λ‘ λλ 2.82Γλ μ νλλ₯Ό ν λ²λ μΈ‘μ νμ§ μμ ꡬμ±μ λν μλλΉμ λλ€.μ΄ κ΅¬λΆμ΄ μ€μν μ΄μ : κ°μ ꡬμ±μ μ€ν κ° λ³λμ 0.59%(1711.2 λ 1721.3)μΈλ° ꡬμ±μ λ°κΎΈλ©΄ 3.55%(1711.2 λ 1771.9)λ‘ 6λ°°μ λλ€. "λΆμΒ·λΆλͺ¨λ₯Ό κ°μ μ€νμμ"λΌλ μΌλ° κ·μΉλ³΄λ€ κ΅¬μ± μΌμΉκ° μ°μ νλ μ리μ λλ€. κ·Έλ¦¬κ³ μ§μ μλͺ» κ³ λ₯΄λ©΄ λ°°μκ° μ»€μ§λ λ°©ν₯μ΄λΌ λμ λ λλλ€.
μ£Όμ: νμ΅ μλ K=1μ ν볡νμ§ μμ΅λλ€ β zero-shot K=1μ λ νμ€ν¬μμ 0/16μ΄κ³ "baselineμ μ λ° ν볡" κ°μ€μ΄ p=0.005λ‘ λ°°μ λμ΅λλ€. K=2λ 3,000 iterationμμλ λ Έμ΄μ¦μκ³ 6,000μμ μ νλμ΅λλ€. λ°λΌμ μ΄ armμ 3k μ§μ μ κ·Όκ±°λ‘ K=1μ νμ νλ©΄ μ λ©λλ€.
μ leading-KμΈκ°
RoboLab 24 arm / 2,304 μνΌμλ κ²°κ³Ό, FastWAM(K=0)μ full-WAM λλΉ κ²©μ°¨λ κ· μΌν μ΄νκ° μλλΌ κ΅μμ μ λλ€.
| νμ€ν¬ | FastWAM (K=0) | full WAM (K=8) |
|---|---|---|
| RubiksCubesInBin | 3.1% | 62.5% |
| StackYellowOnRed | 6.2% | 50.0% |
| UnstackRubiksCube | 100% | 87.5% |
| ToyInBin | 29.7% | 25.0% |
μμ λ νμ€ν¬κ° 13.6%p 격차μ 8%p μ΄μμ μ€λͺ νκ³ , λ€μ λμ baselineμ λμ΅λλ€. μμ λ νμ€ν¬μ 곡ν΅μ μ λμΌ νν 물체 μ¬λ¬ κ° μ€ νΉμ κ°μ²΄λ₯Ό μ§λͺ©Β·μ‘°μνλ κ²μ λλ€. κ·Έ λ₯λ ₯μ full-WAM baseμ μκ³ K=0 체ν¬ν¬μΈνΈμμλ μ΄λ―Έ νκ΄΄λμΌλ―λ‘, baseλ₯Ό nvidiaλ‘ μ‘μ λμ΄λ¦¬λ λμ μ μ§ν©λλ€. λΆμ ν¨κ³Όλ‘ K=8μ΄ νμ΅ μλ μ΅μ»€κ° λ©λλ€(base μ체).
leading-Kλ₯Ό μλλ€ β conditioning prefix + μκ°μ μΌλ‘ κ°μ₯ κ°κΉμ΄ μμ± Kνλ μ. λ±κ°κ²© μ€νΈλΌμ΄λΒ·λ§μ§λ§ Kκ°Β·νλ§ μμ½ ν ν°μ λ€λ₯Έ 곑μ μ μ£Όλ©°, μ΄ μ μ₯μμ μμΉλ μ λΆ leading-Kμ λν κ²μ λλ€. K=1μ 4:1 μκ° μμΆμμ 4 ν½μ νλ μ = 32μ€ν /2.13μ΄ action chunkμ μ ~12%μ λλ€.
ν ν° μ
νΈλμ€ν¬λ¨Έμ μ€μ λ‘ λ€μ΄κ°λ vision ν ν°μ νλ μλΉ 340μ λλ€.
| K | vision νλ μ | vision ν ν° | μνμ€ μ 체(μ€μΈ‘) |
|---|---|---|---|
| 0 (FastWAM) | 1 | 340 | 531 |
| 2 (μ§μ arm) | 3 | 1,020 | 1,211 |
| 1 (μ΄ μ μ₯μ) | 2 | 680 | 871 |
| 8 (full WAM) | 9 | 3,060 | 3,251 |
μ λΆ RoboLab μλ²μμ ν¨νΉλ μνμ€λ₯Ό μ§μ κ³μΈ‘ν κ°μ
λλ€(2026-09-08). 340 Γ (K+1)μ΄
λͺ¨λ Kμμ μ νν λ§κ³ , μνμ€ μ 체λ μ¬κΈ°μ textμ action 33μ΄ λν΄μ§ κ°μ
λλ€
(κ·Έ μ€νμ textλ 158; ν둬ννΈ κΈΈμ΄μ λ°λΌ λ³ν©λλ€ β μ νμ΅ λ°°μΉμμλ 164μμ΅λλ€).
mse_loss_indexesκ° μ νν 340 Γ Kμ΄κ³ condition_maskκ° λͺ¨λ Kμμ 1μ΄λΌλ κ²λ ν¨κ»
νμΈλμ΅λλ€ β μ μ§ν K νλ μ μ λΆκ° denoise λμμ΄κ³ 쑰건 νλ μμ νλμ
λλ€.
391μ΄ μλ μ΄μ (νμ΄νλΌμΈ λ¨κ³ ꡬλΆ)
νμ΅ dataloaderμ video ν
μλ₯Ό μ€μΈ‘νλ©΄ (3, 33, 544, 736)μ΄κ³ , κ·Έ latentλ 34Γ46 β
patch_spatial=2 β 17Γ23 = 391μ
λλ€. μ΄ κ° μ체λ λ§μ§λ§ μνμ€ ν ν° μκ° μλλλ€.
540Γ640 (μλ³Έ)
β transform λ°μ¬ ν¨λ© 544Γ736 β λ²ν· VIDEO_RES_SIZE_INFO['480']['4,3']
β VAE (/16) latent 34Γ46 (= patch 391)
β _remove_padding_from_latent latent 34Γ40 β image_size=[544,736,540,640] μ μ½ν
μΈ μμ
β pack_vision_tokens 17Γ20 = 340/νλ μ β νΈλμ€ν¬λ¨Έ μ
λ ₯
ν¨λ©μ VAEμ ν΅κ³Όμν€κΈ° μν μμ μΊλ²μ€μ΄κ³ ν¨νΉ μ μ μ κ±°λ©λλ€
(omni_mot_model.pyμ get_data_and_condition() μ, data_batch["image_size"]κ° μμ λ).
κ·Έ ν¨μλ νμ΅Β·μΆλ‘ μ΄ κ³΅μ νλ―λ‘ μμͺ½ λ€ 340μΌλ‘ ν¨νΉλ©λλ€ β λΆμΌμΉκ° μμ΅λλ€.
νμ΅ λ°°μΉμ image_size = [544., 736., 540., 640.]κ° μ€μ λ‘ λ€μ΄ μλ κ²μ νμΈνμ΅λλ€.
λ°λΌμ μ λͺ¨λΈ μΉ΄λμ "νλ μλΉ 340 / 9νλ μ 3,060"μ μ³μ΅λλ€. μ΄ μ μ₯μμ μ΄μ λ²μ μ΄
391λ‘ μ μλ κ²μ νμ΄νλΌμΈ λ¨κ³λ₯Ό λͺ
μνμ§ μμ μΊλ²μ€ κΈ°μ€ κ°μ μνμ€ ν ν° μλ‘ μ΄
κ²μ΄μμ΅λλ€. μΉ΄λμ text 128λ§ μ€μΈ‘(158~164, ν둬ννΈ μμ‘΄)κ³Ό λ€λ¦
λλ€.
νμ΅ μ€μ
| νλͺ© | κ° |
|---|---|
| experiment | action_policy_droid_edge_ft_fastwam_v1lr + optimizer.lr=1e-5 + K override |
| K | two_pass_keep_generated_vision_frames=1 |
| base | nvidia/Cosmos3-Edge-Policy-DROID (DCP λ³ν), κ°μ€μΉλ§ |
| two-pass | pass B action FM (action_loss_weight=10), pass A vision FM (loss_scale=1) |
| λ°μ΄ν° | DROID success + failure, keep_ranges_1_0_1 (sim μμ) |
| optimizer | FusedAdamW, lr 1e-5, μ‘μ λΈλ¦Ώμ§ 3κ°μ 5Γ |
| scheduler | LambdaLinear, warm-up 1000, cycle 12000 β μ κ΅¬κ° νμ΅ (lr 1e-5 β 8.36e-6@3k β 5.91e-6@6k β 3.45e-6@9k β 1.0e-6@12k) |
| νλμ¨μ΄ | B300 Γ2 (GPU 3,7), FSDP shard 2, grad_accum 2 β κΈλ‘λ² λ°°μΉ 64 |
νκ° μ£Όμ
- loss 곑μ μΌλ‘ νμ νμ§ λ§μμμ€ β λ§€μΉν λͺ©μ ν¨μλΌ κ³‘μ μ΄ ννν©λλ€.
- open-loop MAEλ μ΄ νλ‘μ νΈμμ μΈ λ² λ°©ν₯μ λ°λλ‘ κ°λ¦¬μΌ°μ΅λλ€. νμ κΈ°μ€μ RoboLabμ λλ€.
- 2νμ€ν¬(RubiksCubesInBinΒ·StackYellowOnRed) Γ 8 μνΌμλ μ€ν¬λ¦¬λμ νλ³μ©μ΄λ©° λ²€μΉλ§ν¬ μ μκ° μλλλ€. μμ±μ΄λ©΄ 12νμ€ν¬ μ 체 νμΈμ΄ νμν©λλ€.
- n=96μμ Β±9ppλ λ
Έμ΄μ¦μ
λλ€. 체ν¬ν¬μΈνΈ λΉκ΅λ μ μ μνλ§
(
--num-episodes-adaptive 200 --ci-pp-width 0.14)μΌλ‘ νμμμ€.
Model tree for geonmin-kim/Cosmos3-Edge-Policy-DROID-FastWAM-K1
Base model
nvidia/Cosmos3-Edge-Policy-DROID