lerobot044_pi05_train_env

lerobot 0.4.4 ์—์„œ pi0.5 (pi05) ์ •์ฑ…์„ ํŒŒ์ธํŠœ๋‹ํ•˜๊ธฐ ์œ„ํ•œ ํ™˜๊ฒฝ ์„ค์น˜ ๊ฐ€์ด๋“œ. A100 ๋“ฑ ์ƒˆ ์„œ๋ฒ„์—์„œ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•ด ์—ฌ๋Ÿฌ task๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ฐ˜ํ™”ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

๊ฒ€์ฆ ํ™˜๊ฒฝ: 2ร— RTX A6000 (48GB), CUDA driver 12.x, conda. torch 2.10 (cu12.8) ํœ ์€ A100(sm_80)์—์„œ๋„ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


โš ๏ธ ํ•ต์‹ฌ ํ•จ์ • 2๊ฐ€์ง€ (๋‘˜ ๋‹ค ์•ˆ ํ•˜๋ฉด ํ•™์Šต์ด ์ฆ‰์‹œ ์‹คํŒจ)

  1. ํŒจ์น˜๋œ transformers๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ƒฅ pip install lerobot==0.4.4 ๋งŒ ํ•˜๊ฑฐ๋‚˜ lerobot[transformers-dep] ๋กœ ์„ค์น˜ํ•˜๋ฉด pi05 ์ƒ์„ฑ ์‹œ ValueError: An incorrect transformer version is used ๋กœ ์ฃฝ์Šต๋‹ˆ๋‹ค. pi0/pi05 ๋Š” lerobot ์ด ํŒจ์น˜ํ•œ transformers ๋ธŒ๋žœ์น˜(fix/lerobot_openpi)๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค โ†’ pi extra ๋กœ ์„ค์น˜.
  2. lerobot/pi05_base ๋ฆฌ๋น„์ „์„ ๊ณ ์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ—ˆ๋ธŒ์˜ ์ตœ์‹ (main) ์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” relative_actions_processor ์Šคํ…์„ ์“ฐ๋Š”๋ฐ ์ด๊ฑด lerobot 0.4.4 ์— ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋‚˜์ค‘ ๋ฒ„์ „์—์„œ ์ถ”๊ฐ€๋จ). ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด KeyError: Processor step 'relative_actions_processor' not found in registry ๋กœ ์ฃฝ์Šต๋‹ˆ๋‹ค. โ†’ 0.4.4 ์‹œ๊ธฐ์˜ ๋ฆฌ๋น„์ „ 9e55186ad3 ์„ ๋ฐ›์•„์„œ ๋กœ์ปฌ ๊ฒฝ๋กœ๋กœ ์ง€์ •.

1. Conda ํ™˜๊ฒฝ ์ƒ์„ฑ

conda create -n lerobot044 python=3.10 -y
conda activate lerobot044

2. lerobot 0.4.4 + pi extra ์„ค์น˜ (ํ•ต์‹ฌ)

# lerobot core + ํŒจ์น˜ transformers(fix/lerobot_openpi) + scipy ๋ฅผ ํ•œ ๋ฒˆ์— ์„ค์น˜
pip install "lerobot[pi]==0.4.4"

pi extra ์ •์˜(lerobot 0.4.4 pyproject.toml):

pi = ["transformers @ git+https://github.com/huggingface/transformers.git@fix/lerobot_openpi",
      "scipy>=1.10.1,<1.15"]

์„ค์น˜ ์‹œ git + ๋„คํŠธ์›Œํฌ ํ•„์š”(transformers ๋ฅผ ์†Œ์Šค์—์„œ ๋นŒ๋“œ). ๋ช‡ ๋ถ„ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋ฏธ ๋‹ค๋ฅธ transformers ๊ฐ€ ๊น”๋ฆฐ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ์•„๋ž˜๋กœ ๊ฐ•์ œ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pip install "transformers @ git+https://github.com/huggingface/transformers.git@fix/lerobot_openpi" "scipy>=1.10.1,<1.15"

3. ์„ค์น˜ ๊ฒ€์ฆ

python - <<'PY'
import lerobot, torch, transformers
print("lerobot", lerobot.__version__)          # 0.4.4
print("torch", torch.__version__, "cuda", torch.cuda.is_available(), "ndev", torch.cuda.device_count())
print("transformers", transformers.__version__) # 4.53.3 (ํŒจ์น˜ ๋ฒ„์ „)
from lerobot.policies.pi05.modeling_pi05 import PI05Policy
from transformers.models.siglip import check
print("siglip check ->", check.check_whether_transformers_replace_is_installed_correctly())  # True ์—ฌ์•ผ ํ•จ
PY

siglip check -> True ๊ฐ€ ๋‚˜์˜ค๋ฉด ํ•จ์ • #1 ํ†ต๊ณผ.

4. pi05_base ๋ฆฌ๋น„์ „ ๊ณ ์ • ๋‹ค์šด๋กœ๋“œ (ํ•ต์‹ฌ)

# 0.4.4 ํ˜ธํ™˜ ๋ฆฌ๋น„์ „(relative_actions_processor ์ถ”๊ฐ€ ์ด์ „)์„ ๋กœ์ปฌ๋กœ ๋ฐ›๋Š”๋‹ค
python - <<'PY'
from huggingface_hub import snapshot_download
p = snapshot_download("lerobot/pi05_base", revision="9e55186ad3",
                      local_dir="/DATA/pi05_base_9e55186")  # ๋กœ์ปฌ nvme ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ
print("DONE", p)
PY
  • ๋ฆฌ๋น„์ „ 9e55186ad3 (2026-01-22) = ์ปค๋ฐ‹ 7de663972b("Add relative action processor steps", 2026-06-03) ์ง์ „.
  • ์ดํ›„ ํ•™์Šต์—์„œ --policy.pretrained_path=/DATA/pi05_base_9e55186 ๋กœ ์ด ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •.
  • (์ฐธ๊ณ ) ์ด ๋ฆฌ๋น„์ „ ์ „์ฒ˜๋ฆฌ๊ธฐ ์Šคํ…: rename_observations_processor, to_batch_processor, normalizer_processor, pi05_prepare_state_tokenizer_processor_step, tokenizer_processor, device_processor โ€” ์ „๋ถ€ 0.4.4 ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌ.

5. ํ•™์Šต ๋ช…๋ น (์ผ๋ฐ˜ ํ…œํ”Œ๋ฆฟ, ๋ฉ€ํ‹ฐ-GPU)

์—ฌ๋Ÿฌ task์— ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€์ˆ˜๋งŒ ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. DDP๋Š” accelerate launch ์‚ฌ์šฉ.

DATAROOT=/DATA/datasets/<task>          # LeRobotDataset v3.0 ๋กœ์ปฌ ๊ฒฝ๋กœ (meta/info.json ํฌํ•จ)
OUTDIR=/DATA/outputs/pi05_<task>
BASE=/DATA/pi05_base_9e55186            # 4๋‹จ๊ณ„์—์„œ ๋ฐ›์€ ๋กœ์ปฌ pi05_base

export CUDA_VISIBLE_DEVICES=0,1        # A100 ์—ฌ๋Ÿฌ ์žฅ์ด๋ฉด 0,1,2,3 ...
NPROC=$(echo "$CUDA_VISIBLE_DEVICES" | tr ',' '\n' | wc -l)
EFFECTIVE_BATCH=32                      # ์ด(effective) ๋ฐฐ์น˜. per-GPU = EFFECTIVE_BATCH/NPROC
BATCH=$(( EFFECTIVE_BATCH / NPROC ))

accelerate launch --num_processes="$NPROC" --mixed_precision=bf16 \
  "$(which lerobot-train)" \
  --dataset.repo_id=<hub/label-only-ok> \
  --dataset.root="$DATAROOT" \
  --dataset.video_backend=pyav \
  --policy.type=pi05 \
  --policy.pretrained_path="$BASE" \
  --policy.device=cuda \
  --policy.dtype=bfloat16 \
  --policy.compile_model=true \
  --policy.gradient_checkpointing=true \
  --policy.freeze_vision_encoder=false \
  --policy.train_expert_only=false \
  --policy.tokenizer_max_length=200 \
  --policy.push_to_hub=false \
  --steps=30000 --save_freq=5000 \
  --batch_size="$BATCH" --num_workers=8 --seed=1000 \
  --output_dir="$OUTDIR" --job_name=pi05_<task> --wandb.enable=false

๋ฐฐ์น˜ ๊ทœ์น™ (์ค‘์š”)

lerobot DDP ์—์„œ --batch_size ๋Š” ํ”„๋กœ์„ธ์Šค(GPU)๋‹น ๊ฐ’์ž…๋‹ˆ๋‹ค. effective ๋ฐฐ์น˜ = batch_size ร— GPU ์ˆ˜. ์˜ˆ) ์ด ๋ฐฐ์น˜ 32 ๋ฅผ 2-GPU๋กœ โ†’ --batch_size=16. A100 80GB ๋Š” ์—ฌ์œ ๊ฐ€ ๋งŽ์œผ๋‹ˆ per-GPU ๋ฐฐ์น˜๋ฅผ ์˜ฌ๋ ค๋„ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ (pi05 ๊ธฐ๋ณธ๊ฐ’ = ์•„๋ž˜์™€ ๋™์ผ, ๋ณ„๋„ ์ง€์ • ๋ถˆํ•„์š”)

  • optimizer: AdamW, lr 2.5e-5, betas (0.9, 0.95), wd 0.01, grad_clip 1.0
  • scheduler: cosine, warmup 1000, decay 30000 โ†’ 2.5e-6
  • chunk_size / n_action_steps = 50, n_obs_steps = 1
  • normalization: STATE/ACTION = QUANTILES, VISUAL = IDENTITY

์œ„ ๊ฐ’์€ pi05_base config ์—์„œ ์ƒ์†๋˜๋ฏ€๋กœ ๋ช…๋ น์— ๋„ฃ์ง€ ์•Š์•„๋„ ์žฌํ˜„๋ฉ๋‹ˆ๋‹ค. --steps ๋ฅผ ๋ฐ”๊พธ๋ฉด scheduler decay ๋„ ๊ฐ™์ด ๋งž์ถ”๊ณ  ์‹ถ์„ ๋•Œ๋งŒ --policy.scheduler_decay_steps=<steps> ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.


6. ๋ฐ์ดํ„ฐ์…‹ ์š”๊ตฌ์‚ฌํ•ญ

  • LeRobotDataset v3.0 (meta/info.json ์˜ codebase_version: v3.0).
  • ์นด๋ฉ”๋ผ/์ƒํƒœ/์•ก์…˜ feature ๋Š” policy ์ž…๋ ฅ๊ณผ ๋งž์•„์•ผ ํ•จ. (์˜ˆ์‹œ๋กœ ๊ฒ€์ฆํ•œ UR7e abs_ee ์…‹: observation.images.third_person, observation.images.eye_in_hand (3,480,640), observation.state (24,), action (22,), 50 fps.)
  • ์•ก์…˜/์ƒํƒœ ์ฐจ์›์€ pi05 ์˜ max_state_dim=32, max_action_dim=32 ์ด๋‚ด๋ฉด ๋จ(ํŒจ๋”ฉ ์ฒ˜๋ฆฌ).
  • ๋กœ์ปฌ nvme ์— ๋‘๊ณ  --dataset.root ๋กœ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฑธ ๊ถŒ์žฅ(๋А๋ฆฐ ๋„คํŠธ์›Œํฌ ์Šคํ† ๋ฆฌ์ง€ ํšŒํ”ผ).

7. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์ฆ์ƒ ์›์ธ ํ•ด๊ฒฐ
ValueError: An incorrect transformer version is used ํŒจ์น˜ ์•ˆ ๋œ transformers lerobot[pi] ๋กœ ์„ค์น˜(ํ•จ์ • #1)
KeyError: 'relative_actions_processor' not found in registry pi05_base main ๋ฆฌ๋น„์ „์ด 0.4.4 ์™€ ๋ถˆ์ผ์น˜ ๋ฆฌ๋น„์ „ 9e55186ad3 ์‚ฌ์šฉ(ํ•จ์ • #2)
์ฒซ ์Šคํ… ์ „ AUTOTUNE/triton_mm... ๋กœ๊ทธ๊ฐ€ ํ•œ์ฐธ ๋‚˜์˜ด compile_model=true ์˜ torch.compile ์›Œ๋ฐ์—…(์ •์ƒ) ๊ธฐ๋‹ค๋ฆฌ๊ธฐ. ๋กœ๊ทธ๊ฐ€ Training: N/30000 loss=... ๋กœ ๋ฐ”๋€Œ๋ฉด ์‹ค์ œ ์Šคํ… ์‹œ์ž‘. ์‹ซ์œผ๋ฉด --policy.compile_model=false
CUDA out of memory per-GPU ๋ฐฐ์น˜/๋ชจ๋ธ์ด ํผ EFFECTIVE_BATCH ๋‚ฎ์ถ”๊ธฐ, GPU ๋Š˜๋ฆฌ๊ธฐ, gradient_checkpointing=true ์œ ์ง€, ํ•„์š”์‹œ compile_model=false

๋ถ€๋ก: ๊ฒ€์ฆ๋œ ํŒจํ‚ค์ง€ ๋ฒ„์ „

lerobot        0.4.4
transformers   4.53.3   (git: fix/lerobot_openpi, ํŒจ์น˜)
tokenizers     0.21.4
scipy          1.14.1
torch          2.10.0+cu128
accelerate     1.15.0
av (pyav)      15.1.0
torchcodec     0.10.0
python         3.10
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support