Cosmos3-Edge-Policy-DROID โ FastWAM two-pass + IsaacSim (v2), step 3000
nvidia/Cosmos3-Edge-Policy-DROID์ two-pass FastWAM fine-tune (v2) ์ค๊ฐ ์ฒดํฌํฌ์ธํธ์
๋๋ค.
๊ณํ๋ 100000 iter ์ค 3% ์ง์ ์ด๋ฉฐ ํ์ต์ ๊ณ์ ์งํ ์ค์ผ ์ ์์ต๋๋ค.
ํ๊ฐ์ฉ ์ค๋
์ท์ด์ง ์ต์ข
์ฐ์ถ๋ฌผ์ด ์๋๋๋ค.
- ์ด ์ ์ฅ์๋ step๋ณ ํ์ ํด๋(
step3000/)์ ์ฒดํฌํฌ์ธํธ๋ฅผ ๋์ ํฉ๋๋ค. ๋ฃจํธ README๋ ๊ฐ์ฅ ์ต๊ทผ์ ์ ๋ก๋๋ step์ ๊ฐ๋ฆฌํต๋๋ค. - EMA ๊ฐ์ค์น ๊ธฐ์ค export (
use_ema_weights: true) - training state ์์ โ optimizer/scheduler/trainer ์ํ๋ ์ ๋ก๋ํ์ง ์๊ณ pretrained model ํ์ผ๋ง ํฌํจํฉ๋๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ํธ์คํธ์์์ "์ฌ๊ฐ"๋ ์ ํํ resume์ด ์๋๋ผ ๊ฐ์ค์น warm start์ ๋๋ค (optimizer ๋ชจ๋ฉํธ ์ด๊ธฐํ, lr ์ค์ผ์ค ์ฌ์์).
๋ฌด์์ ํ์ตํ๋๊ฐ
--drop-generated-vision(FastWAM์ ์ถ๋ก )์ WAM ์ํ์ค์์ ๋ฏธ๋ ์์ ํ ํฐ ์ฝ 3,060๊ฐ๋ฅผ
์ ๊ฑฐํด latency๋ฅผ 233 ms โ 185 ms(โ21%)๋ก ์ค์ด์ง๋ง, ํ์ต ์์ด ์ ์ฉํ๋ฉด ์ ํ๋๊ฐ ๋ถ๊ดดํฉ๋๋ค
(open-loop MAE 0.111 โ 0.197, state-hold ์์ค). v2๋ ๊ทธ ๋ฐฐํฌ ์ํ์ค์ ๋ชจ๋ธ์ ์ ์์ํค๋,
์์ ์์ธก ๋ฅ๋ ฅ์ ๋ฒ๋ฆฌ์ง ์๋๋ก ๋งค ์คํ
๋ ๊ฐ์ pass๋ฅผ ํจ๊ป ๋๋๋ค.
| pass | ์ํ์ค | ์์ค | ๊ฐ์ค์น |
|---|---|---|---|
| B | [text | cond-frame vision | action] (๋ฐฐํฌ์ ๋์ผํ๊ฒ pruned) |
action flow-matching | action_loss_weight = 10.0 |
| A | 33-frame ์ ์ฒด latent clip | vision flow-matching | loss_scale = 1.0 |
pruning์ด ๋ฐ์ดํฐ์
์ด ์๋๋ผ ๋ชจ๋ธ ๋ด๋ถ(inference_drop_generated_vision)๋ก ์ฎ๊ฒจ์ก๊ธฐ ๋๋ฌธ์
๋ฐ์ดํฐ์
์ ์ ์ฒด ํด๋ฆฝ์ ๊ทธ๋๋ก ๋ด๋ณด๋ด๊ณ (action_only_vision=false,
encode_exact_durations=[33]), ๋ shape๊ฐ ๋งค ์คํ
๋ฒ๊ฐ์ ๋ํ๋ฉ๋๋ค.
๋ฐ์ดํฐ
| ํ | ๋น์จ | ๋ด์ฉ |
|---|---|---|
| DROID | 3 | nvidia/Cosmos3-DROID success + failure ์ ์ฒด, ๊ณต์ keep_ranges_1_0_1 ์๋ ํํฐ ์ ์ฉ. failure ์ํผ์๋๋ video ๋ชฉ์ ํจ์์๋ง ๊ธฐ์ฌํฉ๋๋ค (is_failure ํ๊ทธ โ action flow-matching ํญ์์ ๊ฐ์ค์น 0, ๋จ action token์ ์ํ์ค์ ์ ์ง๋์ด pass A์ video ๋ถ๊ธฐ๊ฐ action-conditioned๋ก ๋จ์). |
| sim | 1 | nvidia/PhysicalAI-Robotics-Manipulation-SingleArm (Franka Panda, IsaacSim) 4,211 ์ํผ์๋ / 300,665 ํ๋ ์์ DROID ์คํค๋ง๋ก ๋ณํ. keep-ranges ํํฐ ์์(ํด๋น ํ์ผ์ DROID์ gs:// URI๋ก ํค๊ฐ ์กํ ์์), success split๋ง ์กด์ฌ. |
sim ๋น์จ์ 3:1๋ก ๋ณด์์ ์ผ๋ก ์ก์ ์ด์ : sim ๋ก๋ด์ ํ๋ ์๋น ์ด๋๋์ด DROID ํ ๋ ์คํผ๋ ์ด์ ์ ์ฝ 6๋ฐฐ(0.0386 vs 0.0061 rad)์ด๊ณ DROID ์ ๊ทํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ด์ ํฌ์ฆ๋ฅผ ๋ฐฉ๋ฌธํฉ๋๋ค (joint[4]๊ฐ ํ๋ ์์ 14.8%์์ min-max ๋ฐ). sim ๋น์ค์ ๋ ํค์ฐ๋ฉด ์ ์ฑ ์ด ํฐ ์คํ ์ชฝ์ผ๋ก ๋๋ฆฝ๋๋ค. ๋ณํ๊ธฐ๋ ์์ค์ ๊ด์ ๋ธํ๋ฅผ ์ ๋ ๋ชฉํ๊ฐ์ผ๋ก ์ ๋ถํฉ๋๋ค โ ๋ฐ์ดํฐ์ ์นด๋์ "joint motion"์ ์ก๋ฉด ๊ทธ๋๋ก ๋ฐ์๋ค๋ฉด ์ก์ ๋ ์ด๋ธ์ด ์กฐ์ฉํ ์ค์ผ๋์ ํญ๋ชฉ์ ๋๋ค.
RankPartitionedDataLoader๋ rank ๋จ์๋ก ๋ถํ ํ๋ฏ๋ก 4 GPU์์ 3:1์ "์ธ rank๊ฐ DROID,
ํ rank๊ฐ sim"์ ์๋ฏธํฉ๋๋ค โ ๋น์จ์ ํด์๋๊ฐ world size์
๋๋ค.
ํ์ต ์ค์
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| experiment | action_policy_droid_edge_ft_fastwam_v2 |
| warm start | geonmin-kim/Cosmos3-Edge-Policy-DROID-FastWAM-v2-step3000 (๊ฐ์ค์น๋ง, optimizer ์ํ ์์) |
| max_iter | 100000 (์ฒดํฌํฌ์ธํธ 3,000 iter๋ง๋ค) |
| optimizer | FusedAdamW, lr 2e-4, action2llm/llm2action/action_modality_embed์ 5x multiplier |
| scheduler | LambdaLinear, warmup 250, f_max 1.0 โ f_min 0.1 (cycle 25,000). 25k ์ดํ lr 2e-5๋ก ์ ์ง๋๋ ์ฅ๊ธฐ ์ -lr ๊ตฌ๊ฐ |
| ํ์ต ๋์ | gen expert + ๋ธ๋ฆฟ์ง โ ๋ฐฑ๋ณธ VLMยทVAE ๋๊ฒฐ |
| ์ ๋ฐ๋ / ๋ณ๋ ฌํ | bfloat16, FSDP data_parallel_shard_degree=4, activation checkpointing full |
| ํ๋์จ์ด | NVIDIA B300 ร4 |
์ฌ์ฉ๋ฒ
์ด ์ ์ฅ์๋ step๋ณ ํ์ ํด๋ ๊ตฌ์กฐ๋ผ ์๋ฒ๊ฐ repo id๋ง์ผ๋ก ์๋ ๋ค์ด๋ก๋ํ์ง ๋ชปํฉ๋๋ค.
snapshot_download๋ก ์ํ๋ step๋ง ๋ฐ์ ๋ก์ปฌ ๊ฒฝ๋ก๋ฅผ ๋๊ธฐ์ญ์์ค.
from huggingface_hub import snapshot_download
path = snapshot_download(
"geonmin-kim/Cosmos3-Edge-Policy-DROID-FastWAM-v2",
allow_patterns="step3000/*",
)
ckpt = f"{path}/step3000"
# RoboLab ์ ์ฑ
์๋ฒ (RTX GPU ํ์ โ Isaac Sim ๋ ๋๋ฌ๊ฐ RT ์ฝ์ด๋ฅผ ์๊ตฌํฉ๋๋ค)
python -m cosmos_framework.scripts.action_policy_server_robolab \
--checkpoint-path "$ckpt" --port 8000 \
--format-prompt-as-json True --no-guardrails --drop-generated-vision
ํ๊ฐ์ ๋ํ ๊ฒฝ๊ณ
- loss ๊ณก์ ์ผ๋ก ํ์ ํ์ง ๋ง์ญ์์ค. ๋งค์นญํ ๋ชฉ์ ํจ์๋ผ ์ฑ๊ณต/์คํจ ๋ชจ๋ ๊ณก์ ์ด ํํํฉ๋๋ค.
- open-loop MAE๋ ์ ๋ขฐํ์ง ๋ง์ญ์์ค. ์ด ํ๋ก์ ํธ์์ ์ธ ๋ฒ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๊ฐ๋ฆฌ์ผฐ์ต๋๋ค. ์ค๋ชจํฌ ํ ์คํธ ์ฉ๋๋ก๋ง ์ฐ๊ณ , ํ์ ๊ธฐ์ค์ RoboLab์ ๋๋ค.
Model tree for geonmin-kim/Cosmos3-Edge-Policy-DROID-FastWAM-v2
Base model
nvidia/Cosmos3-Edge-Policy-DROID