Instructions to use leapshared/Redox_200epi_subtask_pi052 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use leapshared/Redox_200epi_subtask_pi052 with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
File size: 17,471 Bytes
189b4a9 bbf28bd cf7a2f6 bbf28bd 96767e3 bbf28bd 96767e3 bbf28bd 96767e3 5c6d092 96767e3 bbf28bd 57f2c32 bbf28bd 96767e3 bbf28bd 5c6d092 ed4799c bbf28bd 57f2c32 96767e3 ed4799c c7118d0 ed4799c 189b4a9 96767e3 5c6d092 ed4799c 5c6d092 bbf28bd 189b4a9 c7118d0 ed4799c 189b4a9 96767e3 ed4799c 189b4a9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | ---
license: gemma
library_name: lerobot
pipeline_tag: robotics
tags:
- robotics
- lerobot
- pi052
- vision-language-action
base_model: lerobot/pi052_base
---
# Redox_200epi_subtask_pi052
OpenArm ์ํ ๋ก๋ด(`bi_openarm_follower`, ์นด๋ฉ๋ผ 3๋, stateยทaction 16์ฐจ์)์ Redox ์์ฐ 200๊ฐ๋ก
[`lerobot/pi052_base`](https://huggingface.co/lerobot/pi052_base)๋ฅผ 3๋ง ์คํ
์ ์ฒด ๋ฏธ์ธ์กฐ์ ํ **PI052** ์ ์ฑ
์ด๋ค.
์ฒดํฌํฌ์ธํธ ํ๋๊ฐ "task ๋ฌธ์ฅ โ ์๋ธํ์คํฌ ๋ฌธ์ฅ ์์ฑ โ ๊ทธ ๋ฌธ์ฅ์ ์กฐ๊ฑด์ผ๋ก ์ก์
์ฒญํฌ(50์คํ
)"๋ฅผ ํ๋ค.
task ๋ฌธ์ฅ (ํ์ต์ ์ด ๊ฒ์ ์ด๊ฒ ํ๋๋ค):
> Hold the metal plate by the orange handle, dip it into the blue solution, take it out and point at it, then put the plate back in the beaker on the left.
์์ฑ๋๋ ์๋ธํ์คํฌ ๋ฌธ์ฅ์ ์๋ 8๊ฐ๋ฟ์ด๋ค. ๊ตฌ๊ฐ๋ง๋ค ํ ๋ฌธ์ฅ์ผ๋ก ๊ณ ์ ํด ํ์ตํ๋ค.
1. lift the metal plate out of the left beaker
2. move the plate over the blue solution
3. point at the plate with the left hand
4. lower the plate into the blue solution
5. hold the plate still in the solution
6. raise the plate and point at it
7. put the plate into the left beaker
8. return to the home posture
## ์ฐ๋ ค๋ฉด
- **lerobot PR [#4184](https://github.com/huggingface/lerobot/pull/4184)์ ๋ธ๋์น `codex/pi052-language-policy`๊ฐ ํ์ํ๋ค** (ํ์ต์ ์ด ์ปค๋ฐ `3298e15`, lerobot 0.6.2).
PyPI์ 0.6.1์๋ `pi052` ์ ์ฑ
๋ `--interactive`๋ ์๋ค.
0.6.1์ด ๊น๋ฆฐ ํ๊ฒฝ์ `lerobot-rollout`์ผ๋ก ์๋ ๋ช
๋ น์ ๋๋ฆฌ๋ฉด `error: unrecognized arguments: --interactive=true --autosteer_interval_s=3`์ผ๋ก ๋๋๋ค.
๋ธ๋์น๋ฅผ ๊น ํ๊ฒฝ์ ๋ฐ๋ก ๋ง๋ค๊ณ ๊ทธ ํ๊ฒฝ์ ๊ฒ์ ๊ฒฝ๋ก๋ก ์ ์ด ๋ถ๋ฅธ๋ค(์: `.venv_pi052/bin/lerobot-rollout`).
- **`google/paligemma-3b-pt-224` ํ ํฌ๋์ด์ ๋ฅผ ๋ฐ์ ์ ์์ด์ผ ํ๋ค.** ์น์ธ์ด ํ์ํ ์ ์ฅ์(gated)์ด๊ณ ์ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์คํํ ๋ ๋ฐ๋๋ค. ๊ทธ ์ ์ฅ์์์ ์ฝ๊ด์ ๋์ํ ๊ณ์ ์ผ๋ก
`hf auth login` ํ๊ณ ๋ฏธ๋ฆฌ ๋ฐ์ ๋๋ค: `hf download google/paligemma-3b-pt-224 tokenizer.json tokenizer.model tokenizer_config.json special_tokens_map.json added_tokens.json config.json`.
`lerobot-rollout`์ ๋ก๋ด์ ์ฐ๊ฒฐํ ๋ค์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ง๋ค๋ฏ๋ก, ๋ชป ๋ฐ์ผ๋ฉด ๋ก๋ด์ด ์์ง์ธ ๋ค์ ์ฃฝ๋๋ค. ์ด ์ ์ฅ์์ `lerobot/pi052_base`๋ ์ด๋ ค ์๋ค.
๋ชจ๋ธ๋ง ๋ฏธ๋ฆฌ ๋ฐ์ผ๋ ค๋ฉด `hf download leapshared/Redox_200epi_subtask_pi052 --exclude "checkpoints/*"` (16.6 GB. ๋นผ์ง ์์ผ๋ฉด ์ฒดํฌํฌ์ธํธ ๋ท๊น์ง 83 GB๋ค).
- **๊ทธ ์ปค๋ฐ์ ์ก์
์ถ๋ก ์ ๊ทธ๋๋ก๋ ์ฃฝ๋๋ค**: `TypeError: PI05Pytorch.embed_prefix() takes 5 positional arguments but 7 were given`.
๋ ์ค์ง๋ฆฌ ์์ ์ ํ ๋ฒ ์ ์ฉํ๋ค (์๋ฅ๊ฐ ๊ณ ์น๋ฉด ํ์ ์๋ค).
```bash
hf download leapshared/Redox_200epi_subtask_pi052 pi052_embed_prefix.patch --local-dir /tmp/pi052
git -C <lerobot ๋ธ๋์น ์ฒดํฌ์์> apply /tmp/pi052/pi052_embed_prefix.patch
```
```bash
lerobot-rollout \
--robot.type=openarm_sciedu \
--robot.config_path=config/robot_a.yaml \
--robot.arms=left,right \
--robot.go_home=true \
--robot.entry_ramp_s=2.0 \
--robot.max_start_mismatch_deg=45.0 \
--policy.path=leapshared/Redox_200epi_subtask_pi052 \
--policy.dtype=bfloat16 \
--strategy.type=base \
--inference.type=sync \
--task="lift the metal plate out of the left beaker" \
--interactive=true \
--autosteer_interval_s=3 \
--fps=30 \
--return_to_initial_position=true \
--display_data=true \
--play_sounds=false \
--device=cuda
```
๋ก๋ด์ `/start`๋ฅผ ์น ๋๊น์ง ์์ง์ด์ง ์๋๋ค. **๋ค๋ง ๋ฐฐ๋(๋ช
๋ น ๋ชฉ๋ก)๊ฐ ๋จ๊ธฐ ์ ์๋ ์๋ฌด๊ฒ๋ ์
๋ ฅํ์ง ์๋๋ค**: ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๋ 1๋ถ ๋ฐ์ฏค์ ๋ก๊ทธ๊ฐ ์๋๋ฐ, ๊ทธ๋์ ์น ์ค์ ๋ฒ๋ ค์ง์ง ์๊ณ
์ธ์
์ด ์์๋๋ ์๊ฐ ์ฝํ๋ค. ๋ก๋ฉ ์ค์ `/start`๋ฅผ ์ณ ๋๋ฉด ํ ์ด๋์ด ๋๋์๋ง์ ์๋ฌด๊ฒ๋ ์น์ง ์์๋๋ฐ ๋กค์์์ด ์์๋๋ค(์ค๋ฌผ์์ ์์๊ณ ์๋ฎฌ์์ ์ฌํํ๋ค. ์๋ฅ๊ฐ ์
๋ ฅ ํ๋ฅผ ๋น์ฐ์ง ์๋๋ค).
๋ฐฐ๋๊ฐ ๋จ๊ณ ๋๋ฉด ํฐ๋ฏธ๋์ ์ฐจ๋ก๋ก (**`/autosteer`๋ `/start` ๋ค์๋ง ๋ฐ๋๋ค**):
```text
/start
/autosteer Hold the metal plate by the orange handle, dip it into the blue solution, take it out and point at it, then put the plate back in the beaker on the left.
```
- `--interactive=true`์ `/autosteer`๊ฐ ์์ด์ผ "task โ ์๋ธํ์คํฌ ์์ฑ โ ์ก์
" ๊ณ ๋ฆฌ๊ฐ ๋๋ค. ๋นผ๋ฉด `--task`์ ๋ฌธ์ฅ ํ๋๋ง ๋๊น์ง ๋ฐ๋ฅธ๋ค.
- `--task`์๋ ์ ์ฒด task ๋ฌธ์ฅ์ด ์๋๋ผ **์ฒซ ์๋ธํ์คํฌ ๋ฌธ์ฅ**์ ์ค๋ค. ์ก์
์ชฝ์ ์๋ธํ์คํฌ ๋ฌธ์ฅ์ผ๋ก๋ง ํ์ตํ๊ณ , `/start`์ ์ฒซ `/autosteer` ๋ต ์ฌ์ด์๋ `--task`๊ฐ ๊ทธ๋๋ก ์ก์
์ ํ๋กฌํํธ๋ค. ์ ์ฒด task ๋ฌธ์ฅ์ `/autosteer`์ ์ค๋ค.
- `--duration`์ ์ฃผ์ง ์์๋ค(0 = ์ ํ ์์). ๋ํํ์์๋ `/start` ํ ๋ฒ์ ๊ธธ์ด์ด๊ณ , ๋ค ๋๋ฉด ํ์ผ๋ก ๊ฐ์ง ์๊ณ **๊ทธ ์๋ฆฌ์ ๋ฉ์ถฐ ์์ธ๋ฅผ ์ ์งํ๋ฉฐ autosteer๋ ๊บผ์ง๋ค.**
์ด ๋ก๋ด์ ์ค๊ธฐ `sync` ๋ฃจํ๋ 30 Hz๊ฐ ์๋๋ผ 14~21 Hz๋ก ์ฌ์ด์ ธ ์์ด(๋ค๋ฅธ ์ ์ฑ
์ผ๋ก ์ฐ ๊ฐ์ด๋ค. ํฑ์ ๋๋ถ๋ถ์ด ์นด๋ฉ๋ผยทCAN ๋ฑ ๋ก๋ด ์ชฝ์ด๋ค) 30~41์ด์ง๋ฆฌ ์์ฐ์ด 60~85์ด์ฏค ๊ฑธ๋ฆฐ๋ค.
์ํ์ ๊ฑธ๋ ค๋ฉด ๋๋ํ(`--duration=180`) ์ค๋ค.
- **์ฒ ํ์ ์ฅ๊ณ ์๊ฑฐ๋ ์ฒ ํ์ด ์ฉ์กยท๋น์ปค ์์ ์๋ ๋์์๋ `/stop`, `/reset`, Ctrl-C๋ฅผ ํ์ง ์๋๋ค.** ์
๋ค ๋จผ์ ์ฒ์ ์์ธ๋ก 3์ด ๋์ ๊ด์ ๊ณต๊ฐ์์ ์ง์ ์ผ๋ก ๊ฐ๊ณ
(`return_to_initial_position`), ๊ทธ๋ฆฌํผ๋ ์ฒ์ ๊ฐ(์ด๋ฆผ)์ผ๋ก ๊ฐ์ด ๋์๊ฐ๋ฏ๋ก ๊ฐ๋ ๋์ค์ ์ฒ ํ์ ๋๋๋ค. `/stop`๊ณผ Ctrl-C๋ ๊ทธ ๋ค์ ํ์ ๋ด๋ฆฌ๊ณ ํ ํฌ๋ฅผ ํผ๋ค.
์ฒ ํ์ด ์ผ์ชฝ ๋น์ปค์ ๋์๊ฐ๊ณ ํ์ด ํ์ ์จ ๋ค์ `/stop`ํ๋ค. ๊ธํ๋ฉด ๋น์์ ์ง๋ค.
- `/subtask <๋ฌธ์ฅ>`์ ๊ทธ ๋ฌธ์ฅ์ ์ก์
์ ํ๋กฌํํธ๋ก ๋ฐ๋ก ๊ฑด๋ค(autosteer๋ ๊บผ์ง๊ณ , `sync` ์์ง์ ํ์ ๋จ์ ์ก์
์ ๋ฒ๋ฆฌ๊ณ ๊ทธ ํฑ์ ์๋ก ์ถ๋ก ํ๋ค).
๊ณ ์์ค์ด ํ ๋ฌธ์ฅ์ ๋จธ๋ฌผ๊ฑฐ๋ ์ ๋จ๊ณ๋ก ๋๋์๊ฐ๋ฉด `/subtask raise the plate and point at it` โ `/subtask put the plate into the left beaker` โ
`/subtask return to the home posture`๋ก ๋๊น์ง ๋ณด๋ธ ๋ค `/stop`ํ๋ค. ๋ค์ ๋งก๊ธฐ๋ ค๋ฉด `/autosteer <task ๋ฌธ์ฅ>`. ์ค๋ฌผ์์๋ ํ์ธํ์ง ์์๋ค.
- ๋๋ ๋ค์๋ 'return to the home posture'์ ๋จธ๋ฌธ๋ค. ์์ฐ์ ํ๊น์ง ๋์๊ฐ์ง ์๊ณ ํ์์ ๊ด์ ๊ธฐ์ค ์ฝ 21๋ ์(200๊ฐ์ ์ค์๊ฐ)์์ ๋๋๊ณ , ๊ทธ ์ฅ๋ฉด์ ๋ผ๋ฒจ์ ์ ๋ถ 'return ...'์ด๋ค.
๊ณ ์์ค์๋ ๊ธฐ์ต์ด ์์ผ๋ฏ๋ก ๊ฑฐ๊ธฐ๊ฐ ๊ณ ์ ์ ์ด๋ค(์ค๋ฌผ์์๋ ๊ทธ๋ฌ๋ค. ํ์ต์ ์ฐ์ง ์์ ์์ 4๊ฐ ์ค 3๊ฐ๋ 'return ...'์ผ๋ก ๋๋ฌ๊ณ ๋๋ ๋ค 'lift ...'๋ก ๋์ด๊ฐ ์ ์ ์๋ค. ๋๋จธ์ง ํ๋๋ 'move the plate over ...'๋ก ๋๋ฌ๋ค). `/autosteer`๋ฅผ ๋ค์ ๋ฃ๋ ๊ฒ์ผ๋ก๋ ์ ๋ฐํด๊ฐ ์์๋์ง ์๋๋ค.
์ ๋ฐํด๋ ์ฒ ํ์ ๋น์ปค์ ๋๋ ค๋์ ์ํ์์ `/reset`(์ฒ์ ์์ธ๋ก 3์ด ๋ณต๊ท, task ๋ณต์) โ `/start` โ `/autosteer`. ๋ ๋ฒ์งธ `/start`์๋ ํ๋ฌ๊ทธ์ธ์ ์ง์
๋จํ๊ฐ ์๋ค(ํ๋ก์ธ์ค๋น ํ ๋ฒ. ํด๋จํ์ ์๋ ์ ํ๋ง ๊ฑธ๋ฆฐ๋ค).
- **`/autosteer` ์ค์ ํฐ๋ฏธ๋ ํ๋ฉด์์ ๋ณต์ฌํ์ง ์๋๋ค**(์ ํ ์ค์ด ๋ ์ค๋ก ๋ถ๋๋ค). [`autosteer_line.txt`](./autosteer_line.txt)๋ฅผ ์๋ํฐ๋ก ์ด์ด ๋ณต์ฌํ๊ณ , `Autosteer on โ goal '...'`์ด `on the left.`๋ก ๋๋๋์ง ๋ณธ๋ค.
์ค๋ฌผ ์ฒซ ์คํ์์ ๋ชฉํ๊ฐ `... then put`์์ ์๋ ค ๋ค์ด๊ฐ ๋ชฉ๋ก์ ์๋ ๋ฌธ์ฅ('lift the plate out of the left beaker', 'raise raise')์ด ๋์๋ค. ๊ฐ์ ํ๋ ์์ผ๋ก ์ฌ๋ฉด ์ ์ฒด ๋ฌธ์ฅ์ ๋ชฉ๋ก ๋ฐ 0๋ฒ(334ํ ์ค), ์๋ฆฐ ๋ฌธ์ฅ์ 46๋ฒ์ด๋ค.
- ๋ค๋ฅธ ์ฒดํฌํฌ์ธํธ: `--policy.pretrained_revision=020000` (ํ๊ทธ `015000` ~ `030000`).
- ๊ฐ์ค์น๋ fp32๋ก ์ ์ฅ๋์ด ์๋ค(16.6 GB). `--policy.dtype=bfloat16`์ด๋ฉด ๋ถ๋ฌ์จ ๋ค 8.7 GiB๋ค. **๋ค๋ง ๋ถ๋ฌ์ค๋ ๋์ค์ ํผํฌ๋ 24.2 GiB์ด๊ณ ์บ์๊ฐ ์๋๋ผ ์ค์ ํ ๋น์ด๋ค**
(fp32 state dict์ bf16 ๋ชจ๋ธ์ด GPU์ ๊ฐ์ด ์๋ ์๊ฐ. H200๊ณผ RTX 5090์์ ๊ฐ์ ๊ฐ). 32 GB ์นด๋์์๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ GPU๋ฅผ ์ฅ๊ณ ์์ผ๋ฉด ๋ก๋ฉ์์ OOM์ด ๋๋ค. ๋ก๋ฉ์ ๋ก๋ด ์ฐ๊ฒฐ๋ณด๋ค ์์ด๋ค.
๋ถ๋ฌ์จ ๋ค์๋ ๊ทธ ํ๋ก์ธ์ค๋ `nvidia-smi`์ ์ฝ 25 GiB๋ก ๋ณด์ธ๋ค(ํ ๋น์ ์บ์์ด๊ณ ์ถ๋ก ์ ๋ค์ ์ฐ์ธ๋ค).
- RTX 5090(bf16, ๋ก๋ด ์์ด ์ฐ ๊ฐ): ์ฒญํฌ ์ถ๋ก ์ฒซ ํ 2.1์ดยท์ดํ 155 ms, ์๋ธํ์คํฌ ์์ฑ ์ฒซ ํ 1.8์ดยท์ดํ 116 ms. `sync`์์๋ ์ด ์๊ฐ ๋์ ์ ์ด ๋ฃจํ๊ฐ ๋ฉ์ถ๋ค:
`/start` ๋ค ์ฝ 2์ด๋ ๋ช
๋ น์ด ๋๊ฐ์ง ์๊ณ ๋ก๋ด์ ๋ง์ง๋ง ๋ช
๋ น์ผ๋ก ์์ธ๋ฅผ ์ ์งํ๋ฉฐ, ์ฒซ `/autosteer` ์ง์ ๋ ํ ๋ฒ ๋ ์ฝ 2์ด ๋ฉ์ถ๋ค. ๊ทธ ๋ค๋ก๋ ์ฒญํฌ ๊ฒฝ๊ณ์ ์ง์๋ง๋ค 0.1~0.15์ด๋ค.
- **RTC**: ๊ธฐ๋ณธ(`sync`)์์๋ ์ฒญํฌ ์ถ๋ก ๊ณผ ์๋ธํ์คํฌ ์์ฑ ๋์ ์ ์ด ๋ฃจํ๊ฐ ๋ฉ์ถ๋ค. `--inference.type=rtc --inference.rtc.execution_horizon=10`์ ์น์ผ๋ฉด ๋ ๋ค ๋ค๋ฅธ ์ค๋ ๋์์ ๋๋ค.
`--inference.rtc.mode=trained`๋ **์ธ ์ ์๋ค**. RTC๋ก ํ์ตํ ์ฒดํฌํฌ์ธํธ ์ ์ฉ์ด๊ณ ์ด ๋ชจ๋ธ์ `rtc_training_max_delay=0`์ด๋ผ ์์ํ ๋ ๊ฑฐ๋ถ๋๋ค. ๊ธฐ๋ณธ๊ฐ `guided`๋ก ๋๋ค.
`--inference.queue_threshold`๋ ๊ธฐ๋ณธ 30์ผ๋ก ๋๋ค(0์ผ๋ก ํ๋ฉด ์๋ฎฌ์์ ํฑ์ 34%๊ฐ ๋ณด๋ผ ์ก์
์์ด ์ง๋๊ฐ๋ค. 30์์๋ 18%์ด๊ณ ๋๋ถ๋ถ ์ฒซ ์ถ๋ก ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ช ์ด๋ค).
- ๋ฐ์ฒ [`rollout_pi052.py`](./rollout_pi052.py)๋ `lerobot-rollout`๊ณผ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ์ผ๋ฉด์ ์ค๋ฌผ ์ฒซ ์คํ์์ ๋์จ ๋ฌธ์ ๋ค์ ๋ง๋๋ค(์์ธํ ๊ฒ์ [`ROLLOUT_PC_SETUP.md`](./ROLLOUT_PC_SETUP.md) 3-1).
ํญ์: ์ `embed_prefix` ์์ ์ ์คํํ ๋ ๋ฎ๊ณ , ๋ฐฐ๋ ์ง์ ์ ํฐ๋ฏธ๋ ์
๋ ฅ ํ๋ฅผ ๋น์ฐ๊ณ (๋ก๋ฉ ์ค์ ์น `/start`๊ฐ ์ถ๋ฐ์ํค์ง ์๋๋ค), ๊ฐ์ ์๋ธํ์คํฌ๋ฅผ 3์ด๋ง๋ค ๋ค์ ์ฐ์ง ์๋๋ค.
`PI052_SUBTASK_ORDER=redox_subtasks.txt`: ๋ชฉ๋ก์ ์๋ ์์ฑ ๋ฌธ์ฅ์ ๋ชฉ๋ก์ ๋ฌธ์ฅ๊ณผ ๊ฑฐ์ ๊ฐ์ผ๋ฉด(์ ์ฌ๋ 0.85 ์ด์) ๋ง์ถ๊ณ ์๋๋ฉด ๋ฒ๋ฆฐ๋ค.
`PI052_SUBTASK_CONFIRM_JUMPS=1`(๊ธฐ๋ณธ์ ๊บผ์ง): ์ง๊ธ ๋จ๊ณ์์ 0~+2๋จ๊ณ๊ฐ ์๋ ๋ต์ ๊ฐ์ ๋ต์ด ๋ ๋ฒ ์ฐ๋ฌ์ ๋์์ผ ๋ฐ๋๋ค(์๋ "์๋ ค์ง ํ๊ณ"์ ํ ์ฅ๋ฉด ํผ๋ ๋์ฑ
. ์ ๊ธฐ์ง ์๋๋ค).
์ฒ์์ ์๋ "์ ๋จ๊ณ ๋ฌธ์ฅ์ ๋ฒ๋ฆฐ๋ค"๋ ์์ด๋ค: ์์ผ๋ก ์๋ชป ๋ด ๋ต ํ๋๋ฅผ ๋ฐ์ผ๋ฉด ๊ทธ ๋ค์ ์ณ์ ๋ต์ด ์ ๋ถ ๋ฒ๋ ค์ ธ ์ค๋ต์ด ๊ตณ๋๋ค.
`PI052_AUTOSTEER_GOAL=autosteer_goal.txt`: `/autosteer go`์ฒ๋ผ ๋ฌด์์ ์น๋ ํ์ผ์ ๋ฌธ์ฅ์ ๋ชฉํ๋ก ์ด๋ค.
- FAST ํ ํฌ๋์ด์ (`action_tokenizer/`)์ ์ ๊ทํ ํต๊ณ๋ ์ฒดํฌํฌ์ธํธ์ ๋ค์ด ์๋ค.
ํ์ธํ ๋ฒ์: ์ ๋ช
๋ น์ ๋ก๋ด๋ง MuJoCo ์๋ฎฌ๋ ์ดํฐ(`--robot.type=openarm_sciedu_sim`)๋ก ๋ฐ๊ฟ `sync`์ `rtc` ๋ ๋ค, ์ด ํ๋ธ ์ ์ฅ์์์ ๋ชจ๋ธ์ ๋ฐ์ ๋๊น์ง ๋๋ ธ๋ค
(์ฐ๊ฒฐ โ `/start` โ `/autosteer` โ 3์ด๋ง๋ค ์๋ธํ์คํฌ ์์ฑยท์ ์ฉ โ ์ก์
โ ์ข
๋ฃ. ๊ทธ๋๋ `--duration=90`์ ์คฌ๊ณ `--inference.type`์ ์ ์ง ์์๋ค).
**์ค๋ฌผ ์ฒซ ์คํ(2026-09-21)**: ๋ก๋ฉยท์นด๋ฉ๋ผยทํ ์ด๋ยทsync ์์ง์ ์ ์์ด์๊ณ ๋ชฉํ๋ฅผ ํ ์ค๋ก ๋ฃ์ ์คํ์์๋ ์๋ธํ์คํฌ ๋ฌธ์ฅ์ด ์์๋๋ก ๋์๋ค. **๊ทธ๋ฌ๋ ํ์ ์ฒ ํ ์ก๊ธฐ๋ฅผ ๋์ณค๊ณ , ๋น์์ผ๋ก ๋ค์ด ์ฌ๋ฆฌ๊ณ
๋ค๋ฅธ ์์ผ๋ก ๊ฐ๋ฆฌํจ ๋ค ์ค๊ฐ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด 'return to the home posture'๊น์ง ๊ฐ๋ค. ๊ณผ์ ๋ ์ฑ๊ณตํ์ง ๋ชปํ๋ค**(์๋ "์๋ ค์ง ํ๊ณ").
์ง๊ธ์ ์ค ์์, `--inference.type=sync`, `--duration` ์์์ ์ค๋ฌผ ๋ก๋ด ์ธ์ ๊ทธ๋๋ก ๋ธ๋์น์ ํ์๋ก ํ์ฑ๋ง ํ์ธํ๋ค. **์ค๋ฌผ ๋ก๋ด์์๋ ์์ง ๋๋ฆฌ์ง ์์๋ค.**
## ํ์ต
| | |
|---|---|
| ๋ฐ์ดํฐ | `leapshared/Redox_200epi_subtask`(200 ์ํผ์๋, 193,755 ํ๋ ์)์ ํ๋ ์๋ณ ์๋ธํ์คํฌ ๋ผ๋ฒจ์ `language_persistent` ์ปฌ๋ผ์ผ๋ก ์ฎ๊ธฐ๊ณ task ๋ฌธ์ฅ์ ํ๋๋ก ๋๋๋ฆฐ ๋ก์ปฌ ๋ณํ๋ณธ. ๋ณํ ๋ค ์ ํ๋ ์์์ ์๋ณธ ๋ผ๋ฒจ๊ณผ ๊ฐ์ ๊ฒ์ ํ์ธํ๋ค |
| ๋ผ๋ฒจ | ์์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ๋จ ์ํผ์๋ 9๊ฐ(0, 28, 37, 82, 91, 118, 123, 151, 165), ๋๋จธ์ง 191๊ฐ๋ ๊ตฌ๊ฐ ๋น์จ๋ก ์ฑ์(์ ๋ผ๋ฒจ ๋๋น ํ๊ท 0.85์ด) |
| ๋ ์ํผ | PI052 ๊ธฐ๋ณธ๊ฐ: ๊ณ ์์ค(task โ ์๋ธํ์คํฌ ํ
์คํธ) 30%, ์ ์์ค(์๋ธํ์คํฌ โ ์ก์
) 70%. text 1 / flow 10 / FAST 1, knowledge insulation, `flow_num_repeats=5` |
| ๊ท๋ชจ | ๋ฐฐ์น 32 x 3๋ง ์คํ
(์ฝ 5 ์ํญ), ์ ์ฒด ๋ฏธ์ธ์กฐ์ , gradient checkpointing, H200 ํ ์ฅ์์ 2.27 s/step |
| ์ ๋ฐ๋ | fp32 ๊ฐ์ค์น + bf16 autocast (`--policy.dtype=float32 --accelerator.mixed_precision=bf16`) |
| ์ ๊ทํ | actionยทstate ๋ถ์์๋ฅผ ์ ํ๋ ์ ์ฐธ ๋ถ์์๋ก ๊ต์ฒด([q01, q99] ๋ฐ ๋น์จ 19~22% โ 1.8%) |
| **flow ์๊ฐ** | **1๋ง ์คํ
๋ถํฐ [0.05, 1]์์๋ง ํ์ง** (`time_sampling_offset=0.05`, `scale=0.95`. ๊ธฐ๋ณธ๊ฐ์ [0.001, 1]) |
| **lr** | 2.5e-5, ์๋ฐ์
1์ฒ, ์ฝ์ฌ์ธ 3๋ง. **1๋ง ์คํ
๋ถํฐ ์ ๋ฐ**(9.7e-6 โ 1.25e-6) |
๊ตต๊ฒ ์ด ๋ ๊ฐ์ง๋ ๋์ค์ ๋ฐ๊พผ ๊ฒ์ด๋ค. ๊ธฐ๋ณธ๊ฐ์ผ๋ก๋ 3 ์ํญ์งธ(12,400์คํ
~)๋ถํฐ flow loss์ grad norm์ด ๊ณ์ ์ฌ๋๊ณ , lr์ ์ ๋ฐ์ผ๋ก ํด๋
2์ฒ ์คํ
๋ฆ์ถฐ์ก์ ๋ฟ์ด๋ค. ํ๋ค๋ฆฐ ์ฒดํฌํฌ์ธํธ์์๋ flow ์๊ฐ t โค 0.1์ผ ๋๋ง ์ก์
์ ๋ฌธ๊ฐ 1๋ฒ ์ธต์ Q/K๊ฐ ํฐ์ ธ ์์๋ค(attention logit ์ต๋ 54 โ 98,304).
์ถ๋ก ์ t = 1.0, 0.9, ..., 0.1๋ง ๊ณ์ฐํ๋ฏ๋ก t < 0.05๋ฅผ ํ์ต์์ ๋บ๊ณ , ๊ทธ ๋ค๋ก๋ ๋๊น์ง ์์ ์ ์ด์๋ค(grad norm 5~7, logit ์ต๋ 45~50).
1๋ง ์คํ
๊น์ง๋ ์๋ ์ค์ ์ผ๋ก ํ์ตํ ๊ฒ์ด๊ณ ๊ฑฐ๊ธฐ์ ์ด์ด ๊ฐ๋ค.
## ์ ๊ฒ
์ ๋ถ **ํ์ต์ ์ด ์ํผ์๋**์์ ์ฐ ๊ฐ์ด๋ค(in-sample). ์๋ธํ์คํฌ๋ ์์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ๋จ ์ํผ์๋ 5๊ฐ๋ฅผ 1์ด๋ง๋ค(174ํ), ์ก์
์ค์ฐจ๋ ํ๋ ์ 16์ฅ x 50์คํ
.
"๋๋์๊ฐ"์ ์์ฑ๋ ๋ฌธ์ฅ์ด ์ ๋จ๊ณ์ ๊ฒ์ผ๋ก ๋ฐ๋ ํ์์ด๊ณ , ๋กค์์ ์์์ ํ์ต์ ์ฐ์ง ์์ `rollout_Redox_mixed_20260908_*`(๋ผ๋ฒจ ์์, 4 ์ํผ์๋)์ด๋ค.
| ์คํ
| ํ์ต loss (flow / text / FAST) | ์๋ธํ์คํฌ ์ ๋ต๋ฅ | ๋๋์๊ฐ: in-sample / ๋กค์์ ์์ | ์ก์
์ค์ฐจ |
|---|---|---|---|---|
| 15,000 | 0.006 / 0.009 / 1.26 | 96.0% | 0 / 1 + 4 | 1.25๋ |
| 20,000 | 0.005 / 0.007 / 1.00 | 97.7% | 0 / 1 + 5 | 1.04๋ |
| 25,000 | 0.005 / 0.005 / 0.71 | 97.1% | 0 / 1 + 4 | 1.01๋ |
| **30,000 (๋ฃจํธ)** | 0.005 / 0.002 / 0.70 | **98.9%** | 0 / 1 + 4 | **0.69๋** |
3 ์ํญ์งธ๋ถํฐ textยทFAST loss๊ฐ ์ํญ ๊ฒฝ๊ณ๋ง๋ค ๊ณ๋จ์ผ๋ก ๋ด๋ ค๊ฐ๋ค. ์ธ์ฐ๊ณ ์๋ค๋ ๋ป์ด๊ณ ์ ์์น์๋ ๊ทธ ๋ชซ์ด ๋ค์ด ์๋ค.
์ด๋ ์ฒดํฌํฌ์ธํธ๊ฐ ๋ก๋ด์์ ๊ฐ์ฅ ๋์์ง๋ ๋กค์์์ผ๋ก๋ง ์ ์ ์๋ค.
## ์๋ ค์ง ํ๊ณ
- ๊ณ ์์ค ํ๋กฌํํธ์๋ ์ง๊ธ์ ์์๊ณผ task ๋ฌธ์ฅ๋ง ๋ค์ด๊ฐ๋ค(์ง๋์จ ๋จ๊ณ๋ state๋ ์๋ค). ํ ์ฅ๋ฉด์ผ๋ก ๊ตฌ๋ณ๋์ง ์๋ ์
("point at the plate ..." โ "raise the plate and point at it", "lift the metal plate out ..." โ "put the plate into ...")์์๋
ํ์ต์ ์ฐ์ง ์์ ์์์์ ๋ฌธ์ฅ์ด ์ ๋จ๊ณ๋ก ๋๋์๊ฐ๋ ์ผ์ด ์๊ณ , ํ์ต์ ๋ ํด๋ ์ค์ง ์์๋ค. ๋ด๊ทธ๊ธฐ๊ฐ ์คํจํ ๋ค๋ ํ์ ๋๋๋ ค ๋์
์งํ์ ์ ๋จ๊ณ ๋ฌธ์ฅ์ด ๋์ค๋ฉด ์ ์์ค ์ ์ฑ
์ด ๊ทธ ๋จ๊ณ๋ฅผ ๋ค์ ํ๋ค. **"๋ฐํ์์์ ์ ๋จ๊ณ๋ก ๋์๊ฐ์ง ์๊ฒ ๊ฑด๋ค"๋ ๋์ฑ
์ด ์๋๋ค**(์ฒ์์๋ ๊ทธ๋ ๊ฒ ์ ์๋ค):
๋๋์๊ฐ๋ ๋ต์ ๋๋ถ๋ถ์ ์์ผ๋ก ์๋ชป ๋ด ๋ต(3 โ 6, 3 โ 7, 4 โ 7. ํ์ต์ ์ฐ์ง ์์ ์์ 160ํ์์ 7๋ฒ, ์ต๋ +4๋จ๊ณ)์ ์ ์ ์ด๋ผ์, ๋ง์ผ๋ฉด ์ค๋ต์ด ๊ตณ๋๋ค.
๋ฐ์ฒ์ `PI052_SUBTASK_CONFIRM_JUMPS=1`์ ํฐ ์ ํ๋ฅผ ๋ ๋ฒ ์ฐ๋ฌ์ ๋์ฌ ๋๋ง ๋ฐ๋๋ค. ๊ทผ๋ณธ ๋์ฑ
์ ๊ณ ์์ค ํ๋กฌํํธ์ ์ง๋์จ ๋จ๊ณ๋ฅผ ๋ฃ์ด ํ์ตํ๋ ๊ฒ์ด๋ค.
- **์ก๊ธฐ๋ฅผ ๋์น ๊ฒ์ ๋ชจ๋ฅธ๋ค**(์ค๋ฌผ ์ฒซ ์คํ์์ ํ์ธ). ๊ณ ์์ค์ ์ง๊ธ ์์๊ณผ task ๋ฌธ์ฅ๋ง ๋ณด๊ณ , ์ฑ๊ณตํ ์์ฐ 200๊ฐ๋ก๋ง ํ์ตํ๋ค. ๊ทธ ์๋ฃ์์๋ ํ ์์ธ์ ๋จ๊ณ๊ฐ ์์ ํ ์ฝํ ์์ด์
์ฒ ํ์ด ์์ ์๋์ง๋ฅผ ๋ณผ ์ด์ ๊ฐ ์๋ค. ๋น์์ผ๋ก๋ ํ ์์ธ๋ฅผ ๋ฐ๋ผ ๋ค์ ๋ฌธ์ฅ์ผ๋ก ๋์ด๊ฐ๋ค. ์คํจยท๋ณต๊ตฌ ์์ฐ์ ํ์ต์ ๋ฃ์ง ์๋ ํ ๊ทธ๋๋ก์ผ ๊ฒ์ด๋ค.
- ํ์ต์ ์ฐ์ง ์์ ์ํผ์๋์์์ ์ ๋ต๋ฅ ์ ์ฌ์ง ์์๋ค. ์ค๋ฌผ ์ฑ๊ณต๋ฅ ์ ์ฒซ ์คํ 1ํ ์คํจ๊ฐ ์ ๋ถ๋ค.
## ํ์ผ
| ๊ฒฝ๋ก | |
|---|---|
| ๋ฃจํธ | 30,000์คํ
(`checkpoints/030000/pretrained_model`๊ณผ ๊ฐ์ ํ์ผ) |
| `pi052_embed_prefix.patch` | lerobot ๋ธ๋์น(`3298e15`)์ ์ก์
์ถ๋ก ๋ฒ๊ทธ ์์ ๋ ์ค |
| `ROLLOUT_PC_SETUP.md` | ๋กค์์ PC ์ค๋น ๋ฌธ์: ์ค์น โ ํ์ธ โ ์คํ ๋ช
๋ น โ ๋ฉ์ถ ๋ |
| `rollout_pi052.py`, `redox_subtasks.txt`, `autosteer_goal.txt` | ์ถ๋ก ๋ฐ์ฒ, ์๋ธํ์คํฌ ์์ ๋ชฉ๋ก, ๋ชฉํ ๋ฌธ์ฅ (์ "์ฐ๋ ค๋ฉด") |
| `autosteer_line.txt` | ๋ถ์ฌ๋ฃ์ `/autosteer ...` ํ ์ค (ํ๋ฉด์์ ๋ณต์ฌํ์ง ๋ง๊ณ ์ด ํ์ผ์์) |
| `checkpoints/015000` ~ `030000/pretrained_model/` | ๊ฐ์ ๋ฐ์ ์ฒดํฌํฌ์ธํธ |
| ํ๊ทธ `015000`, `020000`, `025000`, `030000` | ๊ทธ ํ๊ทธ์์๋ ๋ฃจํธ๊ฐ ๊ทธ ์ฒดํฌํฌ์ธํธ๋ค. `--policy.pretrained_revision=020000`์ฒ๋ผ ๊ณจ๋ผ ๋ถ๋ฅธ๋ค |
์ตํฐ๋ง์ด์ ์ํ๋ ์ฌ๋ฆฌ์ง ์์๋ค.
|