LaWAM ยท RoboCerebra
LaWAM ์๋ณธ pretrained ๋ชจ๋ธ์ RoboCerebra ๋ฐ์ดํฐ๋ก SFTํ ๋ชจ๋ธ์ ๋ฒ์ ๋ณ ํด๋๋ก ๋ชจ์ ๋๋ ์ ์ฅ์์ ๋๋ค. ๋ฒ์ ๋ง๋ค ํ์ต ๋ฐ์ดํฐ, ์ฒดํฌํฌ์ธํธ, ํ์ต ์ค์ , ๋ฐ์ดํฐ ์ ์ ๊ธฐ๋ก์ด ํด๋น ํด๋ ์์ ํจ๊ป ์์ต๋๋ค.
This repository collects LaWAM policies fine-tuned on RoboCerebra, one folder per version. The first version, train100-aug, is trained on 100 whole long-horizon tasks selected from the official RoboCerebra training split (not the benchmark), with texture and distractor-position rendering augmentation, and validated on 20 disjoint held-out training-split tasks. Closed-loop task success has not been measured yet. Checkpoints are in the original LaWAM .pt format.
๋ฒ์ ๋ชฉ๋ก
| ๋ฒ์ | ํด๋ | ํ์ต ๋ฐ์ดํฐ | ์ฒดํฌํฌ์ธํธ (optimizer updates) | ์ํ |
|---|---|---|---|---|
| train100-aug | train100-aug/ |
๊ณต์ RoboCerebra training split์์ ๊ณ ๋ฅธ 100๊ฐ task + ๋ ๋๋ง ์ฆ๊ฐ | 20,000 / 23,000 / 24,000 / 25,000 | ํ์ต ์ค๊ฐ ์ฒดํฌํฌ์ธํธ, ์ฑ๊ณต๋ฅ ๋ฏธ์ธก์ |
| (์ฐธ๊ณ ) Unified SFT 25k | ๋ณ๋ ์ ์ฅ์ dn5772/LaWAM-RoboCerebra-Unified-SFT-25k |
lerobot/robocerebra_unified (benchmark ์์ฐ ๊ธฐ๋ฐ) |
25,000 | ์๋ฃ, ์ฑ๊ณต๋ฅ ๋ฏธ์ธก์ |
์ด์ Unified SFT ๋ชจ๋ธ๊ณผ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ
| Unified SFT 25k (๋ณ๋ ์ ์ฅ์) | train100-aug (์ด ์ ์ฅ์) | |
|---|---|---|
| ๋ฐ์ดํฐ ์ถ์ฒ | lerobot/robocerebra_unified@279f0bc |
qiukingballball/RoboCerebra@5d2e1e3 RoboCerebra_trainset ์๋ณธ raw HDF5 |
| Benchmark์์ ๊ด๊ณ | RoboCerebraBench 60๊ฐ case์ category ๊ตฌ์ฑยทcanonical instruction 135๊ฐ๊ฐ ๋์ผํ๊ณ , ํ์ธํ case(Ideal/case1)์ trajectory ๋น๊ต๊ฐ 72/72๊ฐ ์ ํํ ์ผ์น. benchmark ์์ฐ์์ ๋ง๋ ๋ฐ์ดํฐ๋ก ๊ธฐ๋ก๋จ |
training split๋ง ์ฌ์ฉ. benchmark์ ์ ํ ์ผ์นํ๋ segmentยท32-frame ๊ตฌ๊ฐ 0๊ฑด (์๋ ๊ฒ์ฌ) |
| ๊ท๋ชจ | 6,660 episodes / 571,116 frames | 16,212 episodes / 1,618,854 frames (100 task ร ์ฆ๊ฐ ๋ณํ) |
| Instruction | ... orig tex0 ๊ฐ์ ๋ณํ tag ํฌํจ |
๊ณต์ subtask ๋ฌธ์ฅ ๊ทธ๋๋ก, tag ์์ |
| Validation | train_split_all=true: validation 66 episodes๊ฐ ํ์ต์๋ ํฌํจ |
ํ์ต๊ณผ ๊ฒน์น์ง ์๋ ๋ณ๋ 20๊ฐ task, 162 episodes |
| Action ์ ๊ทํ ํต๊ณ | unified ๋ฐ์ดํฐ ์ ์ฒด | ํ์ต 100 task๋ง ์ฌ์ฉ |
| Global batch / ์ค์ผ์ค | 256 / 25k cosine | 512 / 60k cosine ์ค์ผ์ค์ 25k ์ง์ |
Unified ๋ชจ๋ธ์ RoboCerebraBench๋ก ํ๊ฐํ๋ฉด ํ์ต์ ์ด ์์ฐ๊ณผ ๊ฐ์ ๊ณ์ด์ task๋ฅผ ํ๊ฐํ๊ฒ ๋ฉ๋๋ค. train100-aug๋ benchmark์ ๋ถ๋ฆฌ๋ training split์ผ๋ก ํ์ตํด ๋
๋ฆฝ ํ๊ฐ๋ฅผ ๋ชฉ์ ์ผ๋ก ๋ง๋ ๋ฒ์ ์
๋๋ค.
train100-aug
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ด๊ธฐ ๋ชจ๋ธ | jialei02/lawam_pretrain@62b14a8 |
| ์ฝ๋ | RLinf/LaWAM@4ea6fda (tracked tree clean) + ๋ฐ์ดํฐ loader wrapper (code/) |
| ํ์ต ๋ฐ์ดํฐ | ๊ณต์ training split์ 100๊ฐ long-horizon task โ 1,360 subtask episodes ร ์ฆ๊ฐ 12๋ณํ |
| Validation | ํ์ตยทbenchmark์ ๊ฒน์น์ง ์๋ training split 20๊ฐ task, ์ฆ๊ฐ ์์ |
| ์ฒดํฌํฌ์ธํธ | 20,000 / 23,000 / 24,000 / 25,000 optimizer updates, global batch 512 |
| ์ฑ๊ณต๋ฅ | ๋ฏธ์ธก์ . ์๋ ์งํ๋ ๋ชจ๋ offline loss/MSE |
1. ์๋ณธ ๋ฐ์ดํฐ
- ์ถ์ฒ:
qiukingballball/RoboCerebrarevision5d2e1e361bf65aabbe4d18179515f5a10936cc96์RoboCerebra_trainset(Stage-2 rawdemo.hdf5+ subtask ์๊ฐ annotation). RLDS export๊ฐ ์๋๋ผ raw simulator state์์ ์ง์ ๋ค์ ๋ ๋๋งํ์ต๋๋ค. - ๋ณํ ๊ธฐ์ค ์ฝ๋:
buaa-colalab/RoboCerebra@2573426rlds_dataset_builder/regenerate_robocerebra_dataset.py์ ์ฒ๋ฆฌ ๊ท์น์ ๋ฐ๋์ต๋๋ค. - ํ๋ณด pool: catalog 1,000 case (coffee_table 796 / kitchen_table 130 / study_table 74) ์ค raw HDF5๊ฐ ๊ณต๊ฐ๋ 996๊ฐ. annotation์ด ์ผ๊ด๋์ง ์์ case๋ฅผ ์์ ํ์ง ์๊ณ ์ ์ธํด 958๊ฐ๊ฐ ํ๋ณด์ ๋๋ค (42๊ฐ ์ ์ธ: endpoint๊ฐ frame ์ ์ด๊ณผ 15, ์๋ชป๋ ๋ฒ์ 20, ๋น์ฆ๊ฐ endpoint 14, ๋น์ฐ์ ๊ฒฝ๊ณ 13, HDF5 ์์ 4, TXT/JSON step ์ ๋ถ์ผ์น 1; ํ case๊ฐ ์ฌ๋ฌ ์ฌ์ ์ ํด๋นํ ์ ์์).
2. 100๊ฐ task๋ฅผ ๊ณ ๋ฅธ ๊ธฐ์ค
RoboCerebra ๋ ผ๋ฌธ(NeurIPS 2025) ยง5.1์ "100๊ฐ long task instance๋ฅผ ๊ณ ๋ฅธ ๋ค temporal annotation์ผ๋ก ๋จ์ผ step sequence๋ก ๋๋๋ค"๋ ํ์ต ํ๋กํ ์ฝ์ ๋ฐ๋์ต๋๋ค. ์ ์๋ค์ด ์ค์ ๋ก ์ด 100๊ฐ ๋ชฉ๋ก๊ณผ ์ ํ ์ฝ๋๋ ๊ณต๊ฐ๋์ด ์์ง ์์, ์๋ ๊ท์น์ผ๋ก ์ง์ ๊ณจ๋์ต๋๋ค. ์ ์ ๋ชฉ๋ก์ ์ฌํํ๋ค๊ณ ์ฃผ์ฅํ์ง ์์ต๋๋ค.
- ์ฅ๋ฉด๋ณ ํ ๋น: 1,000-case ๋ถํฌ์ Hamilton ์ต๋์์ฌ ๋ฐฐ๋ถ์ ์ ์ฉํด coffee_table 80 / kitchen_table 13 / study_table 7.
- ์ฅ๋ฉด ์ ์์ (๋ด๋ฆผ์ฐจ์ โ ๋๋ฅ ์ฒ๋ฆฌ):
- subtask ์๊ฐ ๋ง์ ์
- no-op ์ ๊ฑฐ ํ ๋จ๋ annotated frame ์๊ฐ ๋ง์ ์
- raw frame ์๊ฐ ๋ง์ ์
- case ๋ฒํธ ์ค๋ฆ์ฐจ์
- ๋ฌด์์ ์์๋ ์์ต๋๋ค. ๋๋ฅ ์ฒ๋ฆฌ๊ฐ ์ค์ ๋ก ์ํฅ์ ์ค ๊ณณ์ coffee_table๋ฟ์ ๋๋ค (subtask 12๊ฐ์ธ 45๊ฐ ์ค 38๊ฐ ์ ํ).
์ด ๊ท์น์ subtask๊ฐ ๋ง์ ๊ธด task ์ชฝ์ผ๋ก ์๋์ ์ผ๋ก ์น์ฐ์ณ ์์ต๋๋ค. ์ ํ๋ 100๊ฐ๋ 1,360 subtasks / raw 423,113 frames / no-op ์ ๊ฑฐ ํ 135,845 frames์ด๊ณ , case๋น subtask๋ 12โ23๊ฐ์ ๋๋ค. ๊ฐ์ ์ฅ๋ฉด ํ ๋น์ผ๋ก ๋ฌด์์ 100๊ฐ๋ฅผ ๋ฝ์ผ๋ฉด ํ๊ท ์ฝ 893 subtasks / 90,955 frames์ ๋๋ค.
์ ํ ์ฝ๋: code/size_longest100_raw_cases.py
์ ํ๋ 100๊ฐ task
๊ดํธ ์์ subtask ์์
๋๋ค. case๋ณ frame ์, ์ฆ๊ฐ ํ์ผ ์, ์๋ณธ HDF5 SHA256์ data/train100_cases.csv์, 16,212๊ฐ episode ์ ์ฒด ๋ชฉ๋ก(ํ์ผยทsubtask ์์ยท๊ธธ์ดยทinstruction)์ data/train100_episodes.csv์ ์์ต๋๋ค.
coffee_table (80๊ฐ, 1,083 subtasks) case502(23), case515(19), case687(18), case663(18), case396(17), case624(17), case513(17), case550(17), case474(17), case220(16), case584(16), case221(16), case473(16), case245(15), case173(15), case539(15), case459(15), case126(15), case563(15), case630(14), case176(14), case781(14), case288(14), case538(14), case144(14), case154(14), case219(14), case573(14), case226(14), case614(14), case391(13), case212(13), case757(13), case631(13), case255(13), case744(13), case794(13), case150(13), case745(13), case427(13), case509(13), case660(13), case562(12), case490(12), case611(12), case395(12), case340(12), case61(12), case330(12), case792(12), case298(12), case751(12), case397(12), case541(12), case110(12), case482(12), case587(12), case407(12), case369(12), case615(12), case440(12), case4(12), case529(12), case113(12), case301(12), case419(12), case697(12), case710(12), case654(12), case503(12), case100(12), case605(12), case510(12), case404(12), case530(12), case290(12), case739(12), case496(12), case152(12), case649(12)
kitchen_table (13๊ฐ, 181 subtasks) case6(16), case2(16), case34(15), case57(15), case29(14), case69(14), case100(13), case121(13), case120(13), case82(13), case7(13), case46(13), case48(13)
study_table (7๊ฐ, 96 subtasks) case32(15), case53(14), case37(14), case15(14), case7(13), case28(13), case42(13)
3. Benchmark์์ ๋ ๋ฆฝ์ฑ ๊ฒ์ฌ
๋น๊ต ๋์: qiukingballball/RoboCerebraBench@4e386b9 60 case / 563 segments.
| ๊ฒ์ฌ | ๋ฒ์ | ๊ฒฐ๊ณผ |
|---|---|---|
| ํ์ผ SHA256 | 100 case vs 60 case | ์ผ์น 0 |
| segment ๋จ์ joint7+action7 float32 fingerprint | 1,360 vs 563 segments | ์ผ์น 0 |
| segment ๋จ์ joint7๋ง | ๋์ผ | ์ผ์น 0 |
| annotation ๊ฒฝ๊ณ๋ฅผ ๋ฌด์ํ stride-1 32-frame ๊ตฌ๊ฐ (float64 ์ ํ๊ฐ, ์์ 6์๋ฆฌ ๋ฐ์ฌ๋ฆผ) | ํ์ต 420,013 vs benchmark 188,750 ๊ตฌ๊ฐ | ์๋ฏธ ์๋ ์ผ์น 0 |
์ด ๊ฒ์ฌ๋ ์ ํํ ์์น ๋ณต์ ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ฉฐ, ์๋ฏธ์ ์ผ๋ก ๋น์ทํ ์ฅ๋ฉดยท32 frame๋ณด๋ค ์งง์ ๋ณต์ ยท์ฌ๋ นํ๊น์ง ๋ฐฐ์ ํ์ง๋ ์์ต๋๋ค. RoboCerebra ์ ์๋ GitHub issue #5์์ ์ผ๋ถ training ์ฅ๋ฉด์ด ํ๊ฐ ํ๊ฒฝ๊ณผ ๋งค์ฐ ๊ฐ๊น๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
4. Validation 20๊ฐ task
- ์ ์ : 958๊ฐ ํ๋ณด์์ ํ์ต 100๊ฐ๋ฅผ ๋บ ๋๋จธ์ง ์ค ์ฅ๋ฉด๋ณ coffee 16 / kitchen 3 / study 1๊ฐ๋ฅผ
random.Random(2026)์ผ๋ก ์์ด ์์์๋ถํฐ ๊ณจ๋์ต๋๋ค. ํ์ต 100๊ฐ์ benchmark 60๊ฐ ์ ์ฒด์ ๋ํด 32-frame joint+action ๊ตฌ๊ฐ ์ผ์น๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ฑฐ์ ํ๋๋ก ํ๊ณ , ์ค์ ๊ฑฐ์ ๋ ํ๋ณด๋ ์์์ต๋๋ค. ์ฝ๋:code/prepare_robocerebra_validation20.py - ๊ท๋ชจ: 162 episodes / 15,934 frames, case๋น subtask 4โ10๊ฐ. ์ฆ๊ฐ ์์ด ์๋ textureยท์์น(
orig_tex0)๋ง ๋ ๋๋งํ์ต๋๋ค. ์ ๊ทํ ํต๊ณ ๊ณ์ฐ์ ์ฐ์ง ์์์ต๋๋ค. - ๋ชฉ๋ก (๊ดํธ๋ subtask ์, ์์ธ:
data/val20_cases.csv,data/val20_episodes.csv)- coffee_table: case546(10), case159(8), case681(7), case264(6), case349(10), case718(7), case737(6), case47(9), case506(9), case701(8), case433(7), case691(10), case421(10), case398(8), case547(9), case293(10)
- kitchen_table: case9(8), case114(6), case81(4)
- study_table: case68(10)
5. ์ ์ฒ๋ฆฌ
๋ ๋๋ง ์ฝ๋: code/augment_robocerebra_train100.py
| ํญ๋ชฉ | ์ฒ๋ฆฌ |
|---|---|
| ๋ ๋๋ง | raw simulator state๋ฅผ ๋ณต์ํด ๋ค์ ๋ ๋๋ง. Panda, OSC_POSE controller, control_freq=20, robosuite 1.4.1, MuJoCo 3.8.1 |
| No-op ์ ๊ฑฐ | ๊ณต์ is_noop ๊ท์น: โaction[:6]โ < 1e-4์ด๊ณ gripper ๋ช
๋ น์ด ์ง์ ๊ณผ ๊ฐ์ผ๋ฉด ์ ๊ฑฐ (423,113 ์ค 287,258 frames ์ ๊ฑฐ) |
| Subtask ๋ถํ | annotation endpoint๋ฅผ ๋จ์ frame ๊ธฐ์ค์ผ๋ก ๋งคํํด ์์๋๋ก subtask 1๊ฐ = episode 1๊ฐ. ๋ฐ๋ณต instruction๋ ๋ณ๋ segment๋ก ์ ์ง |
| ์นด๋ฉ๋ผ | agentview + robot0_eye_in_hand, 256ร256 RGB, JPEG q95 |
| ์ด๋ฏธ์ง ๋ฐฉํฅ | ๊ณต์ RLDS export์ ๊ฐ์ด 180ยฐ ํ์ ์ 1ํ ์ ์ฉํ ์ํ๋ก ์ ์ฅ |
| Action | ์๋ณธ 7D OSC_POSE delta ๊ทธ๋๋ก: xyz 3 + axis-angle 3 + gripper 1 (โ1 open, +1 close). xyz๋ 5.625, ํ์ ์ 0.225 ๋จ์ ๊ฐ |
| Instruction | ๊ณต์ task_description.txt์ step ๋ฌธ์ฅ, RLDS builder์ฒ๋ผ ๋ ๋ง์นจํ๋ง ์ ๊ฑฐ. ๊ณ ์ ๋ฌธ์ฅ 969๊ฐ |
| ์ฃผํ์ | 20 Hz metadata. no-op ์ ๊ฑฐ๋ก ์ค์ frame ๊ฐ๊ฒฉ์ ๋ถ๊ท ์ผ (source_frame_index ๋ณด์กด) |
6. ๋ฐ์ดํฐ ์ฆ๊ฐ
๊ฐ task๋ฅผ table texture 3์ข
ร distractor ๋ฌผ์ฒด ์์น 4์ข
= 12๋ณํ์ผ๋ก ๋ค์ ๋ ๋๋งํ์ต๋๋ค. ๊ณต๊ฐ RoboCerebra ๋ณํ ์ฝ๋์ ๋ณํ ์ฒด๊ณ(orig / dxp005 / dyp005 / dym005 ร tex0โ2)๋ฅผ ๋ฐ๋์ต๋๋ค.
| ์ถ | ๋ณํ |
|---|---|
| Table texture | tex0 martin_novak_wood_table, tex1 Marble062_COL_4K, tex2 table_light_wood (kitchen์ 512px ๋ฒ์ ) |
| Distractor ์์น | orig ์์์น, dxp005 x +0.05, dyp005 y +0.05, dym005 y โ0.05 (MuJoCo ์ขํ ๋จ์, ๋งค frame์ distractor free-joint ์์น์ ์ ์ฉ) |
- coffee_table/case615๋ raw XML์ distractor joint๊ฐ ์์ด texture 3๋ณํ๋ง ๋ง๋ค์์ต๋๋ค โ 99ร12 + 1ร3 = 1,191 HDF5 ํ์ผ, 16,212 episodes, 1,618,854 frames.
- ๊ณต๊ฐ ์ฝ๋์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ ๋ถ๋ถ: study ์ฅ๋ฉด์์๋ ์ค์ ๋ก ์ฐ์ด๋
tex-desk์ texture๋ฅผ ์ ์ฉํ๊ณ (๊ณต๊ฐ ์ฝ๋ ๋์ texture๋ ์ฅ๋ฉด์์ ์ฐ์ด์ง ์์ ํจ๊ณผ๊ฐ ์์), case615๋ ๊ธฐ๋ก๋ joint์ ๋ง๋ BDDL ์ ์๋ฅผ ๊ณจ๋์ผ๋ฉฐ, ๋ฐ๋ณต subtask๊ฐ ๋ฎ์ด์จ์ง์ง ์๋๋ก segment๋ง๋ค ๊ณ ์ ID๋ฅผ ๋ถ์์ต๋๋ค. - ์ฃผ์: ํ task์ 12๋ณํ์ action์ด ๋ชจ๋ ๊ฐ์ต๋๋ค. 1.6M frames๋ 1.6M๊ฐ์ ๋ ๋ฆฝ ๋์์ด ์๋๋ฉฐ, ๊ณ ์ ๋์ ๊ธฐ์ค์ผ๋ก๋ 135,845 frames์ ๋๋ค. ๋ ผ๋ฌธ์ด ์ด ์ฆ๊ฐ ์ค์ ์ ์ผ๋ค๋ ๊ทผ๊ฑฐ๋ ์์ต๋๋ค.
- ํ์ผ๋ฟ(4 case, 39๋ณํ) ๊ฒ์ฆ 6,234๊ฐ ํญ๋ชฉ ํต๊ณผ, ์ ์ฒด 1,191 ํ์ผ readback ํ์ธ.
7. ํ์ต ์ค์
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ํ์ต ๊ธฐ๊ฐ | 2026-10-07 01:11 KST ์์ โ 2026-10-09 13:12 KST 25,000 update ๋๋ฌ (GPU ์ด๋ยท์ ์ฅยท์ฌ์์ ํฌํจ) |
| GPU | NVIDIA A100-SXM4-80GB, Accelerate DDP, BF16, SDPA |
| GPU๋น batch / global batch | 32 / 512 (GPU ์์ ๋ฐ๋ผ accumulation์ ๋ฐ๊ฟ ์ ๊ตฌ๊ฐ 512 ์ ์ง) |
| Optimizer | AdamW, betas=(0.9, 0.95), eps=1e-8, weight decay=1e-8, gradient clip 1.0 |
| LR | ๋ชจ๋ group 1e-4, warmup 2,000, cosine_with_min_lr (min 5e-7), ์ค์ผ์ค ๊ธธ์ด 60,000 |
| ์ฒดํฌํฌ์ธํธ ์์ LR | 20k: 7.82e-5 ยท 23k: 7.11e-5 ยท 24k: 6.87e-5 ยท 25k: 6.61e-5 (์์ง ๊ฐ์ ์ด๋ฐ) |
| EMA | off |
| Seed | 2026 (rank๋ณ seed+rank), ๊ฒฐ์ ์ global anchor sampler |
| Action | ์ ํจ horizon 8 (0.4 s ร 20 Hz), ๋ด๋ถ padding 50ร32 |
| ์ ๋ ฅ | agentview ํ์ฌยท+7 frame, wrist ํ์ฌ frame, use_state=false, ์ด๋ฏธ์ง augmentation off |
| ์ ๊ทํ | pose 6์ฐจ์: ํ์ต 100 task์ min/max๋ก [โ1, 1] min-max. gripper: 0.5 ๊ธฐ์ค binary (0=open, 1=close) |
| ๋ชจ๋ธ ๊ตฌ์กฐยทloss | ์๋ณธ LaWAM๊ณผ ๋์ผ: flow head 16 layers/1024 hidden, perceptual weight 0.1, LAM encoder distill 0.1, repeated_diffusion_steps=2, ์ฒซ 16 LLM layer ์ ์ง, embeddingยท๋ง์ง๋ง LLM layer frozen |
| Parameter | ์ด 2,555,179,360 / ํ์ต ๊ฐ๋ฅ 1,747,206,144 |
| ํ๊ฐ | 1,000 update๋ง๋ค, validation frame์ ๊ณ ๋ฅด๊ฒ ํผ์ง ๊ณ ์ anchor 2,560๊ฐ (rank๋น 20 batch) |
| ์ํํธ์จ์ด | Python 3.10.20, PyTorch 2.6.0+cu124, Transformers 5.2.0, Accelerate 1.13.0 (์ ์ฒด ๋ชฉ๋ก) |
๋ช ๋ชฉ sample ์๋ 25,000ร512 = 12.8M์ผ๋ก, ์ฆ๊ฐ ํฌํจ frame ๊ธฐ์ค ์ฝ 7.9ํ, ๊ณ ์ ๋์ frame ๊ธฐ์ค ์ฝ 94ํ ๋ฐ๋ณต์ ํด๋นํฉ๋๋ค.
GPU ๊ตฌ์ฑ ์ด๋ ฅ
| ๊ตฌ๊ฐ | ๋ฌผ๋ฆฌ GPU | optimizer updates | Accumulation |
|---|---|---|---|
| 1โ3 | 4,5,6,7 (4์ฅ) | 0 โ 9,763 | 4 |
| 4 | 0โ7 (8์ฅ) | 9,763 โ 15,329 | 2 |
| 5โ7 | 0,1,2,3 (4์ฅ) | 15,329 โ 19,949 | 4 |
| 8 | 4,5 (2์ฅ) | 19,949 โ 25,000 | 8 |
GPU ์๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค modelยทAdamยทschedulerยทRNG ์ ์ฒด ์ํ์์ ์ด์ด์ ํ์ตํ๊ณ global batch์ data ์์ ๊ท์น์ ์ ์งํ์ต๋๋ค. ๋ค๋ง rank ์์ reduction ์์๊ฐ ๋ฐ๋๋ฏ๋ก ์ค๋จ ์๋ ์คํ๊ณผ bitwise ๋์ผํ์ง๋ ์์ต๋๋ค.
8. ์ฒดํฌํฌ์ธํธ์ offline ์งํ
| ์ฒดํฌํฌ์ธํธ | Validation action MSE | Validation future feature MSE | Validation latent distill MSE |
|---|---|---|---|
steps_20000_pytorch_model.pt |
0.015990* | 0.053714* | 0.062865* |
steps_23000_pytorch_model.pt |
0.016218* | 0.053862* | 0.062778* |
steps_24000_pytorch_model.pt |
0.015641* | 0.053753* | 0.062055* |
steps_25000_pytorch_model.pt |
ํ๊ฐ ์์ | โ | โ |
Validation action MSE๋ 10-step denoising์ผ๋ก ๋ง๋ ์ ๊ทํ action๊ณผ ์ ๋ต์ MSE์ ๋๋ค.
* 19,949 update ์ดํ๋ GPU 2์ฅ์ผ๋ก ํ์ตํด ํ๊ฐ ๋ฒ์๊ฐ ๋ค๋ฆ ๋๋ค. rank๋น ํ๊ฐ batch๊ฐ 20๊ฐ๋ก ๊ณ ์ ์ด๋ผ 2์ฅ์์๋ ๊ณ ์ anchor 2,560๊ฐ ์ค ์์ชฝ 1,280๊ฐ๋ง ํ๊ฐ๋์ต๋๋ค (4ยท8์ฅ์์๋ 2,560๊ฐ ์ ๋ถ). ๊ทธ๋์ 19,000 ์ด์ ๊ฐ๊ณผ ์ง์ ๋น๊ตํ ์ ์์ต๋๋ค. 25,000์ ํ์ต ์ข ๋ฃ ์ ์ฅ ์์ ์ด๋ผ ํ๊ฐ๊ฐ ์คํ๋์ง ์์์ต๋๋ค.
์ ์ฒด 2,560 anchor๋ก ํ๊ฐํ ๊ตฌ๊ฐ์์๋ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค (์ ์ฒด ๊ธฐ๋ก: training/metrics.jsonl):
| Update | 1k | 5k | 10k | 15k | 19k |
|---|---|---|---|---|---|
| Validation action MSE | 0.0191 | 0.0160 | 0.0159 | 0.0156 | 0.0152 |
| Validation future feature MSE | 0.0533 | 0.0537 | 0.0556 | 0.0561 | 0.0564 |
| Train flow loss (1k ๊ตฌ๊ฐ ํ๊ท ) | 0.0275 | 0.0138 | 0.0080 | 0.0066 | 0.0057 |
9. ํด์ํ ๋ ์ฃผ์ํ ์
- ์ฑ๊ณต๋ฅ ์ ์์ง ์ธก์ ํ์ง ์์์ต๋๋ค. ๋ชจ๋ ์์น๋ offline loss/MSE์ด๋ฉฐ, ๋ชจ๋ฐฉํ์ต์์ offline validation loss๋ closed-loop ์ฑ๊ณต๋ฅ ๊ณผ ์ ๋ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- Validation action MSE๋ ์ฝ 5kโ7k update ์ดํ ๊ฑฐ์ ํํํฉ๋๋ค (7kโ19k ๊ธฐ์ธ๊ธฐ 1,000 update๋น โ0.000012, p=0.57). ๊ฐ์ ๊ธฐ๊ฐ train loss๋ ๊ณ์ ์ค์๊ณ validation future feature MSE๋ ์กฐ๊ธ์ฉ ์ฌ๋์ต๋๋ค. 100๊ฐ task์ ๋ํ ๊ณผ์ ํฉ ์ ํธ๋ก ๋ณผ ์ ์์ต๋๋ค.
- LR์ด ์์ง ๋์ ์ง์ (6.6e-5โ7.8e-5)์ ์ฒดํฌํฌ์ธํธ์ ๋๋ค. 60k ์ค์ผ์ค ๋๊น์ง ํ์ตํ๊ฑฐ๋ LR์ ๋ฎ์ถ๋ ๋ง๋ฌด๋ฆฌ ํ์ต์ ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
- ์ฌ๋ฌ ์ฒดํฌํฌ์ธํธ๋ฅผ ๊ณต๊ฐํ๋ ๊ฒ์ closed-loop ํ๊ฐ๋ก ์ฒดํฌํฌ์ธํธ๋ฅผ ๊ณ ๋ฅด๊ธฐ ์ํด์์ ๋๋ค. 21,000ยท22,000 ์ฒดํฌํฌ์ธํธ๋ ํ์ต ์ค ๋ณด๊ด ์ ์ฑ ์ผ๋ก ์ญ์ ๋์ด ํฌํจํ์ง ์์์ต๋๋ค.
10. ์ฌ์ฉ๋ฒ
๊ณต์ LaWAM loader๋ .pt ํ์ผ์ ๋ ๋จ๊ณ ์ ํด๋์์ config.yaml๊ณผ dataset_statistics.json์ ์ฝ์ต๋๋ค. ๊ทธ๋์ train100-aug/checkpoints/steps_*.pt ๊ตฌ์กฐ๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. Hugging Face AutoModel ํ์์ด ์๋๋ผ ์๋ณธ LaWAM .pt ํ์์
๋๋ค.
# ์ค์ ยทํต๊ณยท์ฝ๋๋ง ๋จผ์ ๋ฐ๊ณ , ํ์ํ ์ฒดํฌํฌ์ธํธ๋ง ์ถ๊ฐ๋ก ๋ฐ์ต๋๋ค (๊ฐ 7.2 GB).
hf download dn5772/LaWAM-RoboCerebra \
--include "train100-aug/*" --exclude "train100-aug/checkpoints/*" \
--local-dir ./lawam_robocerebra
hf download dn5772/LaWAM-RoboCerebra \
train100-aug/checkpoints/steps_25000_pytorch_model.pt \
--local-dir ./lawam_robocerebra
# ์ ํ: ๊ฒฝ๋ก ์ฐ๊ฒฐ ์ ์ ๋ฌด๊ฒฐ์ฑ ํ์ธ (๋ฐ์ง ์์ ์ฒดํฌํฌ์ธํธ ์ค์ ๋ฌด์๋จ)
cd lawam_robocerebra/train100-aug && sha256sum -c --ignore-missing SHA256SUMS && cd -
๋ก๋๋ SFT ๊ฐ์ค์น๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ Qwen3-VL-2B, LAM checkpoint, DINOv3 ์ด๊ธฐํ ํ์ผ์ ๋จผ์ ์ฝ์ต๋๋ค. ๊ธฐ์กด LaWAM ํ๊ฒฝ์ ์๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค. prepare_benchmark.py๋ PyYAML๋ง ์ฐ๊ณ ๊ฐ์ค์น๋ฅผ ๋ฐ๊พธ์ง ์์ผ๋ฉฐ, training_config.yaml์ ๋ฐํ์ผ๋ก config.yaml๊ณผ LAM ์คํ ์ค์ ์ ๋ค์ ์๋๋ค.
python ./lawam_robocerebra/train100-aug/prepare_benchmark.py \
--qwen-dir /path/to/Qwen3-VL-2B-Instruct \
--lam-checkpoint /path/to/lam_release/checkpoints/pytorch_model.pt \
--dino-dir /path/to/dinov3-vitb16-pretrain-lvd1689m
# LaWAM source(RLinf/LaWAM@4ea6fda)๋ฅผ PYTHONPATH์ ๋ ํ๊ฒฝ
from starVLA.model.framework.base_framework import baseframework
policy = baseframework.from_pretrained(
"/abs/path/lawam_robocerebra/train100-aug/checkpoints/steps_25000_pytorch_model.pt"
).eval().to("cuda")
Policy server๋ก ๋์ธ ๋๋ LaWAM source root์์:
CUDA_VISIBLE_DEVICES=0 python deployment/model_server/server_policy.py \
--ckpt_path /abs/path/lawam_robocerebra/train100-aug/checkpoints/steps_25000_pytorch_model.pt \
--port 10093 --use_bf16
RoboCerebra ํ๊ฐ adapter์์ ๋ง์ถฐ์ผ ํ ๊ฒ
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ ๊ทํ ํค | franka (์ด ํด๋์ dataset_statistics.json, RoboCerebra ํ์ต 100 task ํต๊ณ) |
| Action ์ญ์ ๊ทํ | pose 6์ฐจ์์ min/max ์ฌ์ฉ (LaWAM ์๋ณธ client๊ฐ min์ด ์์ผ๋ฉด min/max๋ฅผ ์). q01/q99๋ LIBERO ํต๊ณ๋ก ๋ฐ๊พธ์ง ๋ง์ธ์ |
| Gripper | ๋ชจ๋ธ ์ถ๋ ฅ 0.5 ๊ธฐ์ค binary: 1 โ raw +1 (close), 0 โ raw โ1 (open) |
| ์ถ๋ ฅ action | 8 ร 7 (๋ด๋ถ 8 ร 32 ์ค ์ 7์ฐจ์), OSC_POSE delta ์๋ณธ ๋จ์ |
| ์ด๋ฏธ์ง | agentview + wrist, 256ร256 RGB, ํ์ต ๋ฐ์ดํฐ์ฒ๋ผ 180ยฐ ํ์ ํ ๋ฐฉํฅ |
| State | ์ฌ์ฉํ์ง ์์ (use_state=false) |
| Instruction | ํ์ฌ subtask ๋ฌธ์ฅ (๋ ๋ง์นจํ ์ ๊ฑฐ) |
| Embodiment / ์ฃผํ์ | embodiment_id=25, action_hz=20 |
| ์ถ๋ก | denoising 10 steps, CFG 1.0, 8 action chunk ์คํ ํ ์ฌ์ง์ |
๊ณต์ loader ๋ก๋ ๊ฒ์ฆ
steps_20000๊ณผ steps_25000์ ๋ฐฐํฌ ๊ตฌ์กฐ ๊ทธ๋๋ก ์๋ณธ baseframework.from_pretrained๋ก CPU์์ ๋ก๋ํ์ต๋๋ค. 2,157๊ฐ key์ ๋๋ฝยท์ถ๊ฐ๊ฐ ์๊ณ , parameter ์์ ์ ๊ทํ ํต๊ณ๊ฐ ์ผ์นํ์ผ๋ฉฐ, ๋ก๋๋ ๊ฐ์ค์น๊ฐ ํ์ต ์ฒดํฌํฌ์ธํธ์ bitwise๋ก ๊ฐ์์ต๋๋ค. ํ์ต ์ค ์ ์ฅ๋ Accelerate model.safetensors(์ค๋ณต alias 1,419 key)๋ฅผ ์๋ณธ LaWAM ํ์(2,157 key, alias 738๊ฐ๋ ๊ฐ์ storage ๊ณต์ )์ผ๋ก ๋ณํํ๊ณ , ๋ณํ ์ ํ ๋ชจ๋ tensor๊ฐ ๋์ผํจ์ ํ์ธํ์ต๋๋ค. ๊ธฐ๋ก: training/load_validation.json, training/conversion/
11. ํด๋ ๊ตฌ์กฐ
train100-aug/
โโโ checkpoints/
โ โโโ steps_20000_pytorch_model.pt # ๊ฐ 7,174,295,574 bytes, ์๋ณธ LaWAM .pt
โ โโโ steps_23000_pytorch_model.pt
โ โโโ steps_24000_pytorch_model.pt
โ โโโ steps_25000_pytorch_model.pt
โโโ config.yaml # ์ถ๋ก ์ฉ ์ค์ (prepare_benchmark.py๊ฐ ๊ฒฝ๋ก๋ฅผ ๊ฐฑ์ )
โโโ training_config.yaml # ์ค์ ํ์ต ์์น, ์ด์ ๊ฐ๋ฅํ ์๋ ๊ฒฝ๋ก
โโโ dataset_statistics.json # unnorm key "franka", ํ์ต 100 task ํต๊ณ
โโโ prepare_benchmark.py # Qwen / LAM / DINO ๊ฒฝ๋ก ์ฐ๊ฒฐ
โโโ assets/dino_large_vae.yaml # ์ค์ ์ฌ์ฉํ LAM architecture
โโโ data/
โ โโโ train100_cases.csv # ์ ํ๋ 100 task์ case๋ณ ํต๊ณยท์๋ณธ SHA256
โ โโโ train100_episodes.csv # ํ์ต episode 16,212๊ฐ ๋ชฉ๋ก
โ โโโ val20_cases.csv
โ โโโ val20_episodes.csv
โ โโโ lawam_action_stats.json # ์ ๊ทํ์ ์ด ์๋ณธ action ํต๊ณ
โโโ code/ # ์ ํยท๋ ๋๋งยท์ฆ๊ฐยทvalidation ์ ์ ยทloaderยทํ์ต wrapper ์ฝ๋
โโโ training/ # metrics.jsonl, ํ๊ฒฝ, ๋ก๋ยท๋ณํ ๊ฒ์ฆ ๊ธฐ๋ก
โโโ SHA256SUMS
ํ์ต ๋ฐ์ดํฐ(HDF5) ์์ฒด๋ ์ด ์ ์ฅ์์ ํฌํจํ์ง ์์ต๋๋ค. ์ ๋ชฉ๋ก๊ณผ code/์ ๋ ๋๋ง ์คํฌ๋ฆฝํธ๋ก ๊ณต์ training split์์ ๋ค์ ๋ง๋ค ์ ์์ต๋๋ค.
์ถ์ฒ์ ๋ผ์ด์ ์ค
- LaWAM source ยท LaWAM paper ยท LaWAM pretrained
- RoboCerebra dataset ยท RoboCerebra code ยท RoboCerebraBench
๊ตฌ์ฑ ์์๋ณ ์๋ ๋ผ์ด์ ์ค๊ฐ ๊ทธ๋๋ก ์ ์ฉ๋ฉ๋๋ค. LICENSES.md๋ฅผ ํ์ธํ์ธ์. ์ด ์ ์ฅ์๋ ๋ ๋ฆฝ์ ์ธ ์ฐ๊ตฌ ๊ฒฐ๊ณผ๋ฌผ์ด๋ฉฐ LaWAMยทRoboCerebra ์ ์์ ๊ณต์ ๋ฐฐํฌ๊ฐ ์๋๋๋ค.
Model tree for dn5772/LaWAM-RoboCerebra
Base model
jialei02/lawam_pretrain