lerobot ฯ€โ‚€.โ‚… (pi05) fine-tuning ํ™˜๊ฒฝ โ€” DexSteer/isaaclab-ur7e-pour_cup

UR7e + RH5D ํ•ธ๋“œ(Isaac Lab) ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ฯ€โ‚€.โ‚… ๋ฅผ fine-tuning ํ•˜๊ธฐ ์œ„ํ•œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์„ค์น˜/ํ•™์Šต ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. GPU 1๊ฐœ(A100 80GB)์™€ GPU 2~4๊ฐœ(DDP) ํ™˜๊ฒฝ ๋ชจ๋‘ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ฆ๋œ ์กฐํ•ฉ (2026-09-07, Ubuntu 24.04, NVIDIA driver 575 / CUDA 12.9, A100-80GB):

ํ•ญ๋ชฉ ๊ฐ’
Python 3.12 (uv venv)
lerobot 0.6.1 (PyPI)
torch / torchvision / torchcodec 2.11.0+cu128 / 0.26.0 / 0.11.1
transformers / accelerate 5.5.4 / 1.14.0
์„ค์น˜ ์‹œ๊ฐ„ uv ๊ธฐ์ค€ ์•ฝ 40์ดˆ (torch ํœ  ๋‹ค์šด๋กœ๋“œ ํฌํ•จ)

์ •ํ™•ํ•œ ์ „์ฒด ๋ฒ„์ „์€ requirements.lock.txt ์— ์žˆ์Šต๋‹ˆ๋‹ค.


0. ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ (์š”์•ฝ)

# 1) ์ด ํด๋”๋ฅผ ์˜๊ตฌ ์ €์žฅ์†Œ๋กœ ๋ณต์‚ฌ (์˜ˆ: /data/pi05-ur7e). /home/work ๋Š” ์„ธ์…˜ ์ข…๋ฃŒ ์‹œ ์‚ญ์ œ๋จ.
git clone <์ด ์ €์žฅ์†Œ> /data/pi05-ur7e   # ๋˜๋Š” hf download yrpark/pi05-ur7e-pour_cup-train-env --local-dir /data/pi05-ur7e
cd /data/pi05-ur7e

# 2) ์„ค์น˜ (uv ์ž๋™ ์„ค์น˜ โ†’ Python 3.12 venv โ†’ lerobot[pi,training]==0.6.1 + torch cu128 โ†’ ๊ฒ€์ฆ)
bash setup.sh
bash setup_extra.sh    # torchcodec ํ™œ์„ฑํ™”(์‹œ์Šคํ…œ ffmpeg + nvidia-npp-cu12 + env.sh LD_LIBRARY_PATH). ์ƒ๋žต ์‹œ pyav ๋กœ ์ž๋™ ๋Œ€์ฒด

# 3) HF ๋กœ๊ทธ์ธ (PaliGemma ํ† ํฌ๋‚˜์ด์ €๊ฐ€ gated ๋ผ์„œ ๋ฐ˜๋“œ์‹œ ํ•„์š”)
#    https://huggingface.co/google/paligemma-3b-pt-224 ์—์„œ ๋ผ์ด์„ ์Šค ๋™์˜ ํ›„
hf auth login            # ๋˜๋Š” export HF_TOKEN=hf_xxx  (env.sh ๊ฐ€ ๋กœ๊ทธ์ธ ํ† ํฐ์„ ์ž๋™์œผ๋กœ ์ฐพ์Šต๋‹ˆ๋‹ค)

# 4) ๋ฐ์ดํ„ฐ์…‹(0.33 GB) + pi05_base(14 GB) + ํ† ํฌ๋‚˜์ด์ € ๋ฏธ๋ฆฌ ๋ฐ›๊ธฐ
bash download.sh

# 5) ํ•™์Šต
bash train.sh                 # GPU 1๊ฐœ
NUM_GPUS=4 bash train.sh      # GPU 4๊ฐœ (DDP)

setup.sh ๋งŒ GPU ์—†์ด๋„ ๋™์ž‘ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” source env.sh ๋กœ venv ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์…ธ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.


1. ํŒŒ์ผ ๊ตฌ์„ฑ

ํŒŒ์ผ ์—ญํ• 
env.sh ๊ณตํ†ต ํ™˜๊ฒฝ ๋ณ€์ˆ˜. WORKDIR, HF ์บ์‹œ ๊ฒฝ๋กœ, PYTHONPATH ์ œ๊ฑฐ, venv ํ™œ์„ฑํ™”
setup.sh uv ์„ค์น˜ โ†’ venv ์ƒ์„ฑ โ†’ lerobot ์„ค์น˜ โ†’ scripts/check_env.py ๋กœ ๊ฒ€์ฆ
setup_extra.sh torchcodec ํ™œ์„ฑํ™”์šฉ ์ถ”๊ฐ€ ์„ค์น˜: ์‹œ์Šคํ…œ ffmpeg + nvidia-npp-cu12(libnppicc.so.12) + env.sh ์— NPP LD_LIBRARY_PATH ์ฃผ์ž…. torch 2.11+cu128 ํœ ์— NPP ๊ฐ€ ์—†์–ด torchcodec cu ๋นŒ๋“œ๊ฐ€ ๋กœ๋“œ ์‹คํŒจํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ. setup.sh ๋‹ค์Œ์— ์‹คํ–‰. ์—†์œผ๋ฉด VIDEO_BACKEND=pyav ๋กœ ๋Œ€์ฒด
download.sh ๋ฐ์ดํ„ฐ์…‹ / lerobot/pi05_base / PaliGemma ํ† ํฌ๋‚˜์ด์ € ์‚ฌ์ „ ๋‹ค์šด๋กœ๋“œ ๋ฐ ๋””์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ
train.sh ํ•™์Šต ์‹คํ–‰. GPU ์ˆ˜๋ฅผ ๊ฐ์ง€ํ•ด ๋‹จ์ผ GPU / accelerate launch DDP ์ž๋™ ๋ถ„๊ธฐ. RESUME=1 ์ง€์›. ๋กœ๊ทธ๋Š” logs/<job>.log
scripts/check_env.py ๋ฒ„์ „ยทCUDAยท๋น„๋””์˜ค ๋ฐฑ์—”๋“œยทHF ํ† ํฐ ์ ๊ฒ€
scripts/smoke_test.py ํ† ํฌ๋‚˜์ด์ € ์—†์ด pi05_base ๋ฅผ ๋กœ๋“œํ•ด forward/backward ๋ฉ”๋ชจ๋ฆฌยท์†๋„ ์ธก์ •
upload_to_hf.sh ์ด ํด๋”๋ฅผ HF Hub ์— ์—…๋กœ๋“œ (.venv, cache, outputs ์ œ์™ธ)
requirements.lock.txt uv pip freeze ๊ฒฐ๊ณผ. LOCK=1 bash setup.sh ๋กœ ์™„์ „ ๋™์ผ ์žฌํ˜„

2. ์™œ ์ด ๊ตฌ์„ฑ์ด ๊ฐ€์žฅ ๋น ๋ฅธ๊ฐ€

  1. uv + PyPI ๋ฆด๋ฆฌ์Šค ๊ณ ์ • โ€” conda ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ (์ˆ˜์‹ญ ์ดˆ), lerobot==0.6.1 ๋กœ ๋ฒ„์ „์ด ๊ณ ์ •๋˜์–ด ๋‹ค๋ฅธ ๋จธ์‹ ์—์„œ๋„ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค. torch ๋Š” --torch-backend=cu128 ๋กœ CUDA ํœ ์„ ์ง์ ‘ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  2. NGC/Backend.AI ์ปจํ…Œ์ด๋„ˆ์˜ ์‹œ์Šคํ…œ torch ๋ฅผ ์“ฐ์ง€ ์•Š์Œ โ€” ์ปจํ…Œ์ด๋„ˆ์˜ torch 2.7.0a0 / numpy 1.26 / transformers 4.55 ๋Š” lerobot 0.6.1 ์š”๊ตฌ์‚ฌํ•ญ(numpy โ‰ฅ 2, transformers โ‰ฅ 5.4)๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. env.sh ๊ฐ€ PYTHONPATH ๋ฅผ ๋น„์›Œ ์‹œ์Šคํ…œ site-packages ๊ฐ€ venv ๋กœ ์ƒˆ์–ด ๋“ค์–ด์˜ค์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฐ์ดํ„ฐ์…‹์ด ์ด๋ฏธ pi05 ํ˜ธํ™˜ โ€” LeRobot v3.0 ํฌ๋งท, meta/stats.json ์— q01/q99 ๊ฐ€ ์žˆ์–ด ฯ€โ‚€.โ‚… ๊ธฐ๋ณธ QUANTILES ์ •๊ทœํ™”๊ฐ€ ๋ฐ”๋กœ ๋ฉ๋‹ˆ๋‹ค. ์žฌ๋ณ€ํ™˜ยท์žฌํ†ต๊ณ„ ๋ถˆํ•„์š”.
  4. ์บ์‹œ๋ฅผ WORKDIR/cache ๋กœ ๊ณ ์ • โ€” ์˜๊ตฌ ๋งˆ์šดํŠธ์— ๋‘๋ฉด ์„ธ์…˜์ด ๋ฐ”๋€Œ์–ด๋„ 14 GB ๋ชจ๋ธ์„ ๋‹ค์‹œ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  5. ๋น„๋””์˜ค ๋””์ฝ”๋”ฉ โ€” AV1(dav1d) ์˜์ƒ์ด๋ฉฐ torchcodec(์‹œ์Šคํ…œ ffmpeg 6.1) ๊ณผ pyav ๋‘˜ ๋‹ค ๊ฒ€์ฆ๋จ. 8 worker ๊ธฐ์ค€ torchcodec โ‰ˆ 2,000 samples/s, pyav โ‰ˆ 1,550 samples/s ๋ผ ํ•™์Šต ๋ณ‘๋ชฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

3. ๋ฐ์ดํ„ฐ์…‹ ์š”์•ฝ

ํ•ญ๋ชฉ ๊ฐ’
ํฌ๋งท LeRobot v3.0, 150 episodes, 69,642 frames, 50 fps, 0.33 GB
์นด๋ฉ”๋ผ observation.images.third_person, observation.images.eye_in_hand (480ร—640, AV1) โ†’ ๋ชจ๋ธ ๋‚ด๋ถ€์—์„œ 224ร—224 ๋กœ ๋ฆฌ์‚ฌ์ด์ฆˆ
state 24-dim (UR7e 6 ๊ด€์ ˆ + RH5D ํ•ธ๋“œ 18 ๊ด€์ ˆ)
action 19-dim
task "Grasp the cup, lift it, and pour it out." (๋‹จ์ผ task)

์ฃผ์˜: action ์ฐจ์› 0~5 ๋Š” ์ „ ํ”„๋ ˆ์ž„์—์„œ ์ƒ์ˆ˜ 0, ์ฐจ์› 6 ์€ ์ƒ์ˆ˜ 1.5 ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณ€ํ•˜๋Š” ๊ฐ’์€ ์ฐจ์› 7~18(ํ•ธ๋“œ 12๊ฐœ)๋ฟ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์ด ๋ฐ์ดํ„ฐ์˜ action ์—๋Š” ํŒ”(UR7e) ๋ช…๋ น์ด ๋“ค์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•™์Šต ์ž์ฒด๋Š” ๋ฌธ์ œ ์—†์ด ๋˜์ง€๋งŒ(์ƒ์ˆ˜ ์ฐจ์›์€ ์ •๊ทœํ™”์—์„œ eps ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ  loss ๊ฐ€ 0 ์— ์ˆ˜๋ ด), ๋ฐฐํฌ ์‹œ ํŒ” ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์…‹ ์ œ์ž‘ ์ธก์— action ์ •์˜๋ฅผ ํ™•์ธํ•˜์„ธ์š”. download.sh ์‹คํ–‰ ํ›„ python -c ๋กœ cache/lerobot/.../meta/stats.json ์„ ์—ด์–ด๋ณด๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


4. ํ•™์Šต ์„ค์ • ์„ค๋ช… (train.sh)

๊ธฐ๋ณธ ๋ช…๋ น(๋‹จ์ผ GPU)์€ lerobot ๊ณต์‹ ฯ€โ‚€.โ‚… ๊ฐ€์ด๋“œ์˜ 80 GB ์„ค์ •์„ ์ด ๋ฐ์ดํ„ฐ์…‹์— ๋งž์ถ˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

lerobot-train \
  --dataset.repo_id=DexSteer/isaaclab-ur7e-pour_cup \
  --dataset.video_backend=torchcodec \
  --policy.type=pi05 \
  --policy.pretrained_path=lerobot/pi05_base \
  --policy.normalization_mapping='{"ACTION": "QUANTILES", "STATE": "QUANTILES", "VISUAL": "IDENTITY"}' \
  --policy.n_action_steps=25 --policy.empty_cameras=1 \
  --policy.freeze_vision_encoder=false --policy.train_expert_only=false \
  --policy.gradient_checkpointing=true --policy.dtype=bfloat16 --policy.device=cuda \
  --policy.push_to_hub=false \
  --optimizer.lr=2.5e-5 --batch_size=32 --num_workers=8 --steps=30000 \
  --save_freq=2500 --log_freq=50 --seed=1000 \
  --output_dir=outputs/pi05_ur7e_pour_cup --job_name=pi05_ur7e_pour_cup
  • --policy.pretrained_path ๋Š” ๊ฐ€์ค‘์น˜๋งŒ ๋กœ๋“œํ•˜๊ณ  feature ์ด๋ฆ„/์ฐจ์›์€ ๋ฐ์ดํ„ฐ์…‹์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ rename_map ์ด ํ•„์š” ์—†๊ณ , state 24 / action 19 ๋Š” ๋‚ด๋ถ€์—์„œ 32 ๋กœ ํŒจ๋”ฉ๋ฉ๋‹ˆ๋‹ค. (--policy.path ์™€ ๋‹ค๋ฆ„ โ€” ๊ทธ์ชฝ์€ config ๊นŒ์ง€ ์ƒ์†)
  • --policy.empty_cameras=1 โ€” ฯ€โ‚€.โ‚… ๋Š” 3 ์นด๋ฉ”๋ผ ์Šฌ๋กฏ์œผ๋กœ ์‚ฌ์ „ํ•™์Šต๋˜์—ˆ์œผ๋ฏ€๋กœ 2 ์นด๋ฉ”๋ผ ๋ฐ์ดํ„ฐ์— ๋นˆ ์Šฌ๋กฏ 1๊ฐœ๋ฅผ ๋งˆ์Šคํ‚น์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.
  • --policy.n_action_steps=25 โ€” ์ถ”๋ก  ์‹œ ์‹คํ–‰ํ•˜๋Š” step ์ˆ˜(50 fps โ†’ 0.5 s). ํ•™์Šต ๊ฒฐ๊ณผ์—๋Š” ์˜ํ–ฅ ์—†์Œ. pretrained_path ๋ฅผ ์“ฐ๋ฉด ๊ธฐ๋ณธ๊ฐ’(50)์œผ๋กœ ๋ฆฌ์…‹๋˜๋ฏ€๋กœ ๋ช…์‹œ.
  • ์ •๊ทœํ™”: ๊ธฐ๋ณธ QUANTILES. ์ด ๋ฐ์ดํ„ฐ์…‹์˜ q01/q99 ๋Š” ์‚ฌ์‹ค์ƒ min/max ์™€ ๊ฐ™์•„(๊ธฐ๋ก ์‹œ per-episode ์ง‘๊ณ„) min-max ์Šค์ผ€์ผ๋ง๊ณผ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์น˜๊ฐ€ ๊ฑฑ์ •๋˜๋ฉด NORM_MODE=mean_std bash train.sh.
  • ์ด ๋ฐ์ดํ„ฐ์…‹์—์„œ --rename_map ์€ ์“ฐ์ง€ ๋งˆ์„ธ์š”. lerobot 0.6.1 ์—์„œ pretrained_path + rename_map ์กฐํ•ฉ์€ ์ฒซ ๋ฐฐ์น˜์—์„œ "All image features are missing" ์œผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

GPU ๋ฉ”๋ชจ๋ฆฌ / ์†๋„ (A100 80GB, bf16, scripts/smoke_test.py ์ธก์ •)

batch / GPU grad ckpt peak mem step ์‹œ๊ฐ„
16 on 37.6 GiB 2.7 s
32 on 45.4 GiB 5.1 s
64 on 60.7 GiB 9.9 s
16 off OOM (80 GB) -

โ†’ 80 GB ์นด๋“œ๋Š” BATCH_SIZE=32(๊ธฐ๋ณธ) ๋˜๋Š” 64, 40/48 GB ์นด๋“œ๋Š” BATCH_SIZE=16 (+ ํ•„์š” ์‹œ TRAIN_EXPERT_ONLY=true). gradient checkpointing ์€ ๋„์ง€ ๋งˆ์„ธ์š”. ๋„๋ฉด 80 GB ์—์„œ๋„ batch 16 ์ด OOM ๋‚ฉ๋‹ˆ๋‹ค(4.1B ํŒŒ๋ผ๋ฏธํ„ฐ + AdamW ์ƒํƒœ๋งŒ ~33 GiB). ์‹ค์ œ lerobot-train 30 step ๊ฒ€์ฆ(batch 16, ํ† ํฌ๋‚˜์ด์ € ํฌํ•จ): 2.47 s/step, 37 GiB, loss 0.70 โ†’ 0.14, ์ฒดํฌํฌ์ธํŠธ ์ €์žฅ ์ •์ƒ. ๋‹จ์ผ GPU ๋กœ 30k step(batch 32) ์€ ์•ฝ 42 h ์ด๋ฏ€๋กœ ๋‹ค์ค‘ GPU ๊ถŒ์žฅ.

๋‹ค์ค‘ GPU (2~4๊ฐœ)

NUM_GPUS=4 bash train.sh            # accelerate launch --multi_gpu --num_processes=4 $(which lerobot-train) ...
NUM_GPUS=2 BATCH_SIZE=64 bash train.sh
  • lerobot 0.6.1 ์€ accelerate launch ๋ฅผ launcher ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  mixed precision ์€ --policy.dtype=bfloat16 ์—์„œ ์ž๋™์œผ๋กœ bf16 ์ด ๋ฉ๋‹ˆ๋‹ค. accelerate config ๋ฅผ ๋Œ๋ฆด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.
  • ์œ ํšจ ๋ฐฐ์น˜ = BATCH_SIZE ร— NUM_GPUS. lerobot ์€ lr/step ์„ ์ž๋™ ์Šค์ผ€์ผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ train.sh ๋Š” STEPS ๋ฅผ 30000 / NUM_GPUS ๋กœ ๊ธฐ๋ณธ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค(4 GPU โ†’ 7,500 step, ์œ ํšจ ๋ฐฐ์น˜ 128, โ‰ˆ 14 epoch). ์ด ์ƒ˜ํ”Œ ์ˆ˜๋Š” ๋‹จ์ผ GPU ์™€ ๋™์ผํ•˜๊ณ  wall-clock ์€ ์•ฝ 1/NUM_GPUS. ํ•„์š”ํ•˜๋ฉด STEPS=, LR= ๋กœ ์ง์ ‘ ์ง€์ •ํ•˜์„ธ์š”.
  • ฯ€โ‚€.โ‚… ์Šค์ผ€์ค„๋Ÿฌ(warmup 1k, cosine decay 30k)๋Š” --steps ๊ฐ€ 30k ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ž๋™์œผ๋กœ ๋น„๋ก€ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค.
  • ์ฒดํฌํฌ์ธํŠธ๋Š” main process ๋งŒ ์ €์žฅํ•˜๋ฉฐ outputs/<job>/checkpoints/<step>/pretrained_model/ ์— lerobot-eval, PI05Policy.from_pretrained ๋กœ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ๋…ธ๋“œ์—์„œ ๋‘ job ์„ ๋™์‹œ์— ๋Œ๋ฆฌ๋ฉด MASTER_PORT=29501 ์ฒ˜๋Ÿผ ํฌํŠธ๋ฅผ ๋ฐ”๊พธ์„ธ์š”.
  • 4 GPU ์—์„œ NCCL ์ด hang ํ•˜๋ฉด NCCL_P2P_DISABLE=1 ๋˜๋Š” NCCL_IB_DISABLE=1 ์„ ์‹œ๋„ํ•˜์„ธ์š” (์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ ํ”ํ•œ ๋ฌธ์ œ).

์žฌ๊ฐœ / ๊ธฐํƒ€

RESUME=1 bash train.sh                       # outputs/<job>/checkpoints/last ์—์„œ ์žฌ๊ฐœ (๊ฐ™์€ JOB_NAME ์œผ๋กœ ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€๋กœ ๊ฑฐ๋ถ€๋จ)
JOB_NAME=exp2 TRAIN_EXPERT_ONLY=true bash train.sh   # ๋ณ„๋„ job, VLM ๋™๊ฒฐ + action expert ๋งŒ ํ•™์Šต
WANDB_ENABLE=true WANDB_PROJECT=pi05 bash train.sh
EXTRA_ARGS="--policy.rtc_training_max_delay=10" bash train.sh   # ํ•™์Šต-์‹œ RTC (real-time chunking)
COMPILE=true bash train.sh                   # torch.compile (์ฒซ step ์ปดํŒŒ์ผ ์ˆ˜ ๋ถ„ ์†Œ์š”)

5. ๋‹ค๋ฅธ ๋จธ์‹ ์— ์„ค์น˜ํ•  ๋•Œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  1. ์˜๊ตฌ ๊ฒฝ๋กœ โ€” WORKDIR ๋ฅผ ๋งˆ์šดํŠธ๋œ ๋ฐ์ดํ„ฐ ํด๋”๋กœ: export WORKDIR=/data/pi05-ur7e (๊ธฐ๋ณธ์€ ์Šคํฌ๋ฆฝํŠธ ํด๋”). ์บ์‹œยท์ถœ๋ ฅ์ด ๋ชจ๋‘ ๊ทธ ์•„๋ž˜๋กœ ๊ฐ‘๋‹ˆ๋‹ค.
  2. CUDA ํœ  โ€” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ CUDA 12.8 ๋ฏธ๋งŒ์ด๋ฉด TORCH_BACKEND=cu126 bash setup.sh, ์ตœ์‹ ์ด๋ฉด cu130 ๋˜๋Š” auto.
  3. ffmpeg โ€” apt install ffmpeg (Ubuntu 22.04/24.04 ์˜ ffmpeg ๋Š” libdav1d ํฌํ•จ). ์„ค์น˜ ๋ถˆ๊ฐ€ํ•˜๋ฉด VIDEO_BACKEND=pyav bash train.sh (pyav ๋Š” ์ž์ฒด ffmpeg ๋ฅผ ๋‚ด์žฅ, ์•ฝ 25% ๋А๋ฆฌ์ง€๋งŒ ์ถฉ๋ถ„).
  4. Python 3.12 โ€” ์‹œ์Šคํ…œ์— ์—†์–ด๋„ uv venv --python 3.12 ๊ฐ€ ์ž๋™ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  5. HF ํ† ํฐ โ€” PaliGemma ๋ผ์ด์„ ์Šค ๋™์˜ + hf auth login(๋˜๋Š” HF_TOKEN). env.sh ๊ฐ€ ~/.cache/huggingface/token ์„ HF_HOME ์œผ๋กœ ๋ณต์‚ฌํ•ด ์ค๋‹ˆ๋‹ค. ์—†์œผ๋ฉด download.sh/train.sh ๊ฐ€ ํ† ํฌ๋‚˜์ด์ € ๋‹จ๊ณ„์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์ด read ๊ถŒํ•œ๋งŒ ์žˆ์–ด๋„ ํ•™์Šต์€ ๊ฐ€๋Šฅํ•˜๊ณ , upload_to_hf.sh ์—๋Š” write ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  6. ์˜คํ”„๋ผ์ธ ๋…ธ๋“œ โ€” ์˜จ๋ผ์ธ ๋…ธ๋“œ์—์„œ bash download.sh ๋ฅผ ๋จผ์ € ๋Œ๋ฆฌ๊ณ  cache/ ๋ฅผ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•œ ๋’ค HF_HUB_OFFLINE=1 bash train.sh.
  7. lerobot main ๋ธŒ๋žœ์น˜(--parallelism.dp_shard ๋“ฑ FSDP ์‹ ๊ธฐ๋Šฅ)๊ฐ€ ํ•„์š”ํ•˜๋ฉด LEROBOT_SOURCE=git bash setup.sh. ๋‹จ, ๊ทธ ๊ฒฝ์šฐ ๋‹ค์ค‘ GPU ์‹คํ–‰ ๋ฐฉ์‹์ด torchrun/--parallelism.* ๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ train.sh ์˜ accelerate ๋ถ„๊ธฐ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

6. ๊ฒ€์ฆ ๋ฐฉ๋ฒ•

source env.sh
python scripts/check_env.py                  # ๋ฒ„์ „/CUDA/๋””์ฝ”๋”/ํ† ํฐ
python scripts/smoke_test.py --batch-sizes 16,32   # ํ† ํฌ๋‚˜์ด์ € ์—†์ด GPU ๋ฉ”๋ชจ๋ฆฌ ํ™•์ธ (๋ชจ๋ธ ๋กœ๋“œ ~2.5๋ถ„)
DRY_RUN=1 NUM_GPUS=4 bash train.sh           # ์‹ค์ œ ๋ช…๋ น๋งŒ ์ถœ๋ ฅ

7. ํ•™์Šต ํ›„

# ์ฒดํฌํฌ์ธํŠธ ๋กœ๋“œ (config ํฌํ•จ)
lerobot-eval --policy.path=outputs/pi05_ur7e_pour_cup/checkpoints/last/pretrained_model ...
# Hub ์—…๋กœ๋“œ
hf upload yrpark/pi05-ur7e-pour_cup outputs/pi05_ur7e_pour_cup/checkpoints/last/pretrained_model .

์ฐธ๊ณ  ๋ฌธ์„œ: lerobot docs/source/pi05.mdx, multi_gpu_training.mdx, rename_map.mdx (v0.6.1 ํƒœ๊ทธ ๊ธฐ์ค€).

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