Instructions to use yrpark/pi05-ur7e-pour_cup-train-env with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use yrpark/pi05-ur7e-pour_cup-train-env with LeRobot:
- Notebooks
- Google Colab
- Kaggle
- lerobot ฯโ.โ
(pi05) fine-tuning ํ๊ฒฝ โ
DexSteer/isaaclab-ur7e-pour_cup
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. ์ ์ด ๊ตฌ์ฑ์ด ๊ฐ์ฅ ๋น ๋ฅธ๊ฐ
- uv + PyPI ๋ฆด๋ฆฌ์ค ๊ณ ์ โ conda ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ณ (์์ญ ์ด),
lerobot==0.6.1๋ก ๋ฒ์ ์ด ๊ณ ์ ๋์ด ๋ค๋ฅธ ๋จธ์ ์์๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค. torch ๋--torch-backend=cu128๋ก CUDA ํ ์ ์ง์ ๋ฐ์ต๋๋ค. - 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 ๋ก ์์ด ๋ค์ด์ค์ง ์๊ฒ ํฉ๋๋ค. - ๋ฐ์ดํฐ์
์ด ์ด๋ฏธ pi05 ํธํ โ LeRobot v3.0 ํฌ๋งท,
meta/stats.json์q01/q99๊ฐ ์์ด ฯโ.โ ๊ธฐ๋ณธ QUANTILES ์ ๊ทํ๊ฐ ๋ฐ๋ก ๋ฉ๋๋ค. ์ฌ๋ณํยท์ฌํต๊ณ ๋ถํ์. - ์บ์๋ฅผ
WORKDIR/cache๋ก ๊ณ ์ โ ์๊ตฌ ๋ง์ดํธ์ ๋๋ฉด ์ธ์ ์ด ๋ฐ๋์ด๋ 14 GB ๋ชจ๋ธ์ ๋ค์ ๋ฐ์ง ์์ต๋๋ค. - ๋น๋์ค ๋์ฝ๋ฉ โ 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. ๋ค๋ฅธ ๋จธ์ ์ ์ค์นํ ๋ ์ฒดํฌ๋ฆฌ์คํธ
- ์๊ตฌ ๊ฒฝ๋ก โ
WORKDIR๋ฅผ ๋ง์ดํธ๋ ๋ฐ์ดํฐ ํด๋๋ก:export WORKDIR=/data/pi05-ur7e(๊ธฐ๋ณธ์ ์คํฌ๋ฆฝํธ ํด๋). ์บ์ยท์ถ๋ ฅ์ด ๋ชจ๋ ๊ทธ ์๋๋ก ๊ฐ๋๋ค. - CUDA ํ โ ๋๋ผ์ด๋ฒ๊ฐ CUDA 12.8 ๋ฏธ๋ง์ด๋ฉด
TORCH_BACKEND=cu126 bash setup.sh, ์ต์ ์ด๋ฉดcu130๋๋auto. - ffmpeg โ
apt install ffmpeg(Ubuntu 22.04/24.04 ์ ffmpeg ๋ libdav1d ํฌํจ). ์ค์น ๋ถ๊ฐํ๋ฉดVIDEO_BACKEND=pyav bash train.sh(pyav ๋ ์์ฒด ffmpeg ๋ฅผ ๋ด์ฅ, ์ฝ 25% ๋๋ฆฌ์ง๋ง ์ถฉ๋ถ). - Python 3.12 โ ์์คํ
์ ์์ด๋
uv venv --python 3.12๊ฐ ์๋ ๋ค์ด๋ก๋ํฉ๋๋ค. - HF ํ ํฐ โ PaliGemma ๋ผ์ด์ ์ค ๋์ +
hf auth login(๋๋HF_TOKEN).env.sh๊ฐ~/.cache/huggingface/token์HF_HOME์ผ๋ก ๋ณต์ฌํด ์ค๋๋ค. ์์ผ๋ฉดdownload.sh/train.sh๊ฐ ํ ํฌ๋์ด์ ๋จ๊ณ์์ ์คํจํฉ๋๋ค. ํ ํฐ์ดread๊ถํ๋ง ์์ด๋ ํ์ต์ ๊ฐ๋ฅํ๊ณ ,upload_to_hf.sh์๋write๊ฐ ํ์ํฉ๋๋ค. - ์คํ๋ผ์ธ ๋
ธ๋ โ ์จ๋ผ์ธ ๋
ธ๋์์
bash download.sh๋ฅผ ๋จผ์ ๋๋ฆฌ๊ณcache/๋ฅผ ํต์งธ๋ก ๋ณต์ฌํ ๋คHF_HUB_OFFLINE=1 bash train.sh. - 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 ํ๊ทธ ๊ธฐ์ค).