elice_gr00t_install

GR00T N1.7 (lerobot native GrootPolicy) ν•™μŠ΅ ν™˜κ²½ μ„€μΉ˜ + 데이터 검증 + λ™μ‹œ ν•™μŠ΅ μ‹€ν–‰ 슀크립트 λͺ¨μŒ.

UR7e / RH5DG2 Isaac Lab taskλ₯Ό EE-space μˆ˜μ • λ°μ΄ν„°μ…‹μœΌλ‘œ νŒŒμΈνŠœλ‹ν•˜κΈ° μœ„ν•œ μ„ΈνŒ…μ΄λ©°, A100 80GB Γ— 4 μž₯λΉ„μ—μ„œ 두 task(cup_hang, pour_cup)λ₯Ό GPUλ₯Ό 2μž₯μ”© λ‚˜λˆ  λ™μ‹œμ— ν•™μŠ΅ν•œλ‹€.


1. μ™œ 이 repoκ°€ ν•„μš”ν•œκ°€

맨바λ‹₯(conda μ—†μŒ / ffmpeg μ—†μŒ / HF 둜그인 μ—†μŒ) μ„œλ²„μ—μ„œ lerobot 81db623b(0.6.1) + GR00T N1.7 ν•™μŠ΅μ„ ꡴리렀면 λ¬Έμ„œμ— μ•ˆ λ‚˜μ˜€λŠ” 함정이 3개 μžˆλ‹€. 이 repo의 setup.shλŠ” κ·Έ 3개λ₯Ό μ „λΆ€ ν‘μˆ˜ν•œ idempotent μ„€μΉ˜ μŠ€ν¬λ¦½νŠΈλ‹€.

함정 β‘  Python 3.11 λ‘œλŠ” μ„€μΉ˜ μžμ²΄κ°€ μ•ˆ λœλ‹€

lerobot 81db623b의 pyproject.toml 이 requires-python = ">=3.12". 3.11 env μ—μ„œ pip install -e '.[groot]' ν•˜λ©΄:

ERROR: Package 'lerobot' requires a different Python: 3.11.16 not in '>=3.12'

β†’ conda env λŠ” Python 3.12 둜 λ§Œλ“ λ‹€.

함정 β‘‘ .[groot] κ°€ torch 와 ABI μ•ˆ λ§žλŠ” torchvision 을 λŒμ–΄μ˜¨λ‹€

extras κ°€ PyPI κΈ°λ³Έ λΉŒλ“œ torchvision 을 μ„€μΉ˜ν•˜λŠ”λ°, 이게 torch 2.11.0+cu128 κ³Ό ABI 뢈일치:

RuntimeError: operator torchvision::nms does not exist

버전 λ²ˆν˜Έκ°€ κ°™μ•„μ„œ(0.26.0) κ·Έλƒ₯ pip install ν•˜λ©΄ Requirement already satisfied 둜 no-op 이 λœλ‹€. β†’ --force-reinstall --no-deps 둜 cu128 wheel 을 κ°•μ œ ꡐ체해야 ν•œλ‹€.

pip install --force-reinstall --no-deps \
  --index-url https://download.pytorch.org/whl/cu128 torchvision==0.26.0
# -> torchvision 0.26.0+cu128

함정 β‘’ torchcodec 이 ffmpeg λ₯Ό λͺ» μ°ΎλŠ”λ‹€ + LD_LIBRARY_PATH ν•„μˆ˜

ν•™μŠ΅μ— --dataset.video_backend=torchcodec 을 μ“°λŠ”λ°, 이 μ„œλ²„μ—” μ‹œμŠ€ν…œ ffmpeg κ°€ μ—†λ‹€:

OSError: libavutil.so.60: cannot open shared object file

conda-forge 둜 ffmpeg λ₯Ό env μ•ˆμ— κΉ”λ©΄ libavutil.so.60 은 μƒκΈ°μ§€λ§Œ, κ·Έκ²ƒλ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•˜λ‹€. conda ffmpeg κ°€ λ”Έκ³  μ˜€λŠ” libopenvino.so κ°€ μ‹œμŠ€ν…œ libstdc++ λ‘œλŠ” λ‘œλ“œκ°€ μ•ˆ λœλ‹€:

OSError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.15' not found
         (required by .../lib/libopenvino.so.2600)

β†’ env 의 lib 디렉터리λ₯Ό loader path 에 λ°˜λ“œμ‹œ μ˜¬λ €μ•Ό ν•œλ‹€. μ„Έ 슀크립트 전뢀에 λ“€μ–΄μžˆλ‹€:

export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

이거 λΉ μ§€λ©΄ ν•™μŠ΅μ΄ 데이터 λ‘œλ”© λ‹¨κ³„μ—μ„œ μ£½λŠ”λ‹€.

함정 β‘£ (μ‹€ν–‰ μ‹œ) lerobot_train.py λŠ” 파일 경둜둜 μ‹€ν–‰ν•˜λ©΄ μ•ˆ λœλ‹€

lerobot_train.py λŠ” μƒλŒ€ import (from .lerobot_eval import eval_policy_all) λ₯Ό μ“΄λ‹€. κ·Έλž˜μ„œ accelerate launch .../scripts/lerobot_train.py 둜 λ„μš°λ©΄:

ImportError: attempted relative import with no known parent package

β†’ λͺ¨λ“ˆλ‘œ μ‹€ν–‰ν•œλ‹€: accelerate launch --module lerobot.scripts.lerobot_train


2. 파일

파일 μ—­ν• 
setup.sh miniconda β†’ conda env(py3.12) β†’ torch cu128 β†’ lerobot 81db623b .[groot]+.[training] β†’ torchvision ABI μˆ˜μ • β†’ ffmpeg β†’ hf cli. idempotent
download.sh λ°μ΄ν„°μ…‹μ—μ„œ ν•„μš”ν•œ 두 ν΄λ”λ§Œ λ‹€μš΄λ‘œλ“œ (cup_hang_ee/, pour_cup_ee/) + 잘λͺ»λœ 폴더 ν˜Όμž… κ²½κ³ 
verify_dataset.py ν•™μŠ΅ μ „ μ½κΈ°μ „μš© 검증 β€” ①포맷 v3.0 β‘‘EE convention β‘’LeRobotDataset λ‘œλ“œ
train_all.sh 검증 μž¬μ‹€ν–‰ β†’ 두 job 을 GPU 2μž₯μ”© λ™μ‹œ launch β†’ wait β†’ μ„±κ³΅ν•œ task 만 Hub μ—…λ‘œλ“œ
upload_task.py 체크포인트 폴더 전체 μ—…λ‘œλ“œ(sharded safetensors λŒ€μ‘) + μ—…λ‘œλ“œ ν›„ 검증
ENVIRONMENT.txt μ‹€μ œλ‘œ λ™μž‘ν•œ ν™˜κ²½ μŠ€λƒ…μƒ·
requirements-freeze.txt pip freeze 전체

3. μ‚¬μš©λ²•

bash setup.sh                     # 1회 (μž¬μ‹€ν–‰ν•΄λ„ μ•ˆμ „)

# HF 인증 (dataset private / base model μ ‘κ·Όμš©)
source ~/miniconda3/etc/profile.d/conda.sh && conda activate lerobot_groot
hf auth login                     # λ˜λŠ” export HF_TOKEN=...

bash download.sh                  # 데이터 두 ν΄λ”λ§Œ

nohup bash train_all.sh > logs/train_all.log 2>&1 &

μ§„ν–‰ 확인:

tail -f logs/gr00t_n17_cup_hang_ee.log     # GPU 0,1 / port 29500
tail -f logs/gr00t_n17_pour_cup_ee.log     # GPU 2,3 / port 29501
nvidia-smi

4. 데이터셋 convention (EE μˆ˜μ •λ³Έ)

action[:, 0:6]   tool0(EE) delta, λ‘œλ΄‡ root ν”„λ ˆμž„, Diff-IK λ‹¨μœ„
                 (Ξ”pos / 0.03 m,  axis-angle Ξ”rot / 0.05 rad)
action[:, 6:19]  손 13 κ΄€μ ˆ μ ˆλŒ€ λͺ©ν‘œκ°’ (rad)
observation.state  (24)
μ˜μƒ  third_person / eye_in_hand  각 (3, 480, 640)

verify_dataset.py 의 EE νŒμ • κΈ°μ€€: arm 6μΆ• std μ „λΆ€ > 0, |q99| <= 3, mean ν‰κ· μ ˆλŒ€κ°’ < 1. κ΄€μ ˆ μ ˆλŒ€κ°’ convention ν΄λ”λŠ” mean 이 Β±3 rad 근처둜 λ‚˜μ™€μ„œ μ—¬κΈ°μ„œ κ±ΈλŸ¬μ§„λ‹€.

μ‹€μ œ 검증 κ²°κ³Ό (2026-09-08)

cup_hang_ee   codebase_version=v3.0 -> OK
              total_episodes=200  frames=98351
              arm std  = [0.067, 0.043, 0.07, 0.06, 0.153, 0.049]
              arm mean = [-0.006, 0.004, -0.004, 0.008, 0.01, 0.006]   |q99|max=0.702
              task: 'Lift the hung cup off the holder'                  -> EE OK

pour_cup_ee   codebase_version=v3.0 -> OK
              total_episodes=150  frames=69642
              arm std  = [0.079, 0.16, 0.107, 0.242, 0.23, 0.285]
              arm mean = [0.002, -0.012, -0.012, -0.164, -0.05, -0.058] |q99|max=0.611
              task: 'Grasp the cup, lift it, and pour it out.'          -> EE OK

μ°Έκ³ : cup_hang_ee 의 arm std κ°€ pour_cup_ee 보닀 λšœλ ·ν•˜κ²Œ μž‘λ‹€. EE νŒμ • 기쀀은 ν™•μ‹€νžˆ ν†΅κ³Όν•˜λ―€λ‘œ convention λ¬Έμ œλŠ” μ•„λ‹ˆκ³ , cup_hang 의 λ™μž‘ μžμ²΄κ°€ 더 μž‘μ€ κ²ƒμœΌλ‘œ 보인닀.


5. ν•™μŠ΅ λ ˆμ‹œν”Ό (GR00T N1.7 native)

--policy.type=groot
--policy.base_model_path=nvidia/GR00T-N1.7-3B
--policy.embodiment_tag=new_embodiment
--policy.device=cuda
--policy.push_to_hub=false
--steps=30000 --save_freq=30000        # μ²΄ν¬ν¬μΈνŠΈλŠ” λ§ˆμ§€λ§‰μ— ν•œ 번만
--batch_size=16 --num_workers=8 --seed=1000
--dataset.video_backend=torchcodec
--wandb.enable=false

μ‹€ν–‰:

CUDA_VISIBLE_DEVICES=0,1 accelerate launch --num_processes=2 \
  --mixed_precision=bf16 --main_process_port=29500 \
  --module lerobot.scripts.lerobot_train <μœ„ μΈμžλ“€> ...

effective batch = num_processes(2) Γ— batch_size(16) = 32. steps λŠ” optimizer update 수.

pi0.5 λ ˆμ‹œν”Όμ—μ„œ λΊ€ 것듀과 이유

--policy.compile_model / --policy.gradient_checkpointing / --policy.dtype / pi05 optimizerΒ·scheduler override / use_imagenet_stats β†’ GrootConfig 에 ν•΄λ‹Ή ν•„λ“œκ°€ μ—†μ–΄μ„œ draccus κ°€ μ—λŸ¬λ₯Ό λ‚Έλ‹€. 확인 방법:

python -c "import dataclasses; from lerobot.policies.groot.configuration_groot import GrootConfig; \
           print(sorted(f.name for f in dataclasses.fields(GrootConfig)))"

dtype λŒ€μ‹  accelerate 의 --mixed_precision=bf16 을 μ“΄λ‹€ (FP32 master + BF16 autocast = N1.7 native). pretrained_path λŒ€μ‹  base_model_path + embodiment_tag λ₯Ό μ“΄λ‹€.


6. κ²€μ¦λœ ν™˜κ²½

Python        3.12.14
lerobot       0.6.1 @ 81db623b4409f160901b266776e6e87a87e5b1b8
torch         2.11.0+cu128
torchvision   0.26.0+cu128        <- cu128 κ°•μ œ μž¬μ„€μΉ˜ ν•„μš”
torchcodec    0.11.1
transformers  5.5.4
accelerate    1.14.0
peft          0.20.0
timm          1.0.29
ffmpeg        8.0.1 (conda-forge)
driver        535.230.02  /  A100 80GB PCIe Γ— 4

driver 535(CUDA 12.2) μ—μ„œ cu128 wheel 은 CUDA minor version compatibility 둜 정상 λ™μž‘ν•œλ‹€.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading