YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
- Cyclo-Lab โ LeRobot Sim2Real ์ํฌํ๋ก์ฐ
- ์ด ์ ์ฅ์ ๊ตฌ์กฐ (
JSHNSL/humanoid-imitation-learning) - Setup โ ํ๊ฒฝ ์ค๋น (์ต์ด 1ํ)
- ๊ฒฝ๋ก ๊ท์น (์ด repo ๊ทธ๋๋ก ๋ฐ๋ผํ ๋)
- 1. HDF5 โ LeRobot ๋ณํ (lerobot-python) โ ์ง์ ๋ฐ์ดํฐ ๋ง๋ค ๋๋ง
- 1.5 ์ฌ๋ฌ HDF5 ๋ณํฉ (์ ํ) (lerobot-python)
- 2. HuggingFace ์
๋ก๋ โ ์ ๋ถ
humanoid-imitation-learningํ repo๋ก - 2.5 ์๋ณธ HDF5 โ HDF5 ํ๋ธ repo (
push_hdf5.py) - 2.6 HF์ ์ฌ๋ฆฐ ํ์ผ ์ญ์
- 3. ํ์ต โ ACT / VQ-BeT / Diffusion (lerobot-python)
- 3.2 ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ โ Optuna (
hpo_optuna.py) - 3.5 ๊ธฐ์กด v2.1 ๋ฐ์ดํฐ์
โ v3.0 ๋ณํ (lerobot-python)
- 4. ์๋ฎฌ ๋กค์์ ํ๊ฐ (python = isaac)
- ์ต์ด 1ํ๋ง ํ์ํ๋ ํ๊ฒฝ ์์ (์ฐธ๊ณ )
- ์ ์ฑ
์ข
๋ฅ
- ์ด ์ ์ฅ์ ๊ตฌ์กฐ (
Cyclo-Lab โ LeRobot Sim2Real ์ํฌํ๋ก์ฐ
FFW_SG2 (L-Table) ๊ธฐ์ค. HF ๊ณ์ : JSHNSL.
ํต์ฌ: ๋จ๊ณ๋ง๋ค ์คํํ๋ ํ์ด์ฌ์ด ๋ค๋ฅด๋ค.
| ๋ช ๋ น | ์ค์ฒด | ์ฉ๋ |
|---|---|---|
lerobot-python |
lerobot venv (/root/lerobot_env, py3.12 / lerobot 0.5.2 / ๋ฐ์ดํฐ v3.0) |
๋ณํยท์ ๋ก๋ยทํ์ต |
python |
Isaac Sim (_isaac_sim/python.sh, py3.11 / lerobot 0.3.3 / ๋ฐ์ดํฐ v2.1) |
์๋ฎฌ ๋กค์์ (isaaclab) |
$ISAACLAB_PATH/_isaac_sim/python.sh |
์ python์ ํ ๊ฒฝ๋ก |
isaac python์ pip ์ค์นํ ๋ |
โ ๏ธ ๋ฒ์ ๋ถ๋ฆฌ: ํ์ต์ฉ venv๋ lerobot 0.5.2(v3.0). ๋กค์์์ฉ isaac python์ 3.11์ด๋ผ 0.5.2(โฅ3.12 ์๊ตฌ)๋ฅผ ๋ชป ๋ฃ์ด 0.3.3 ์ ์ง. ๋์ ๋ณ๊ฐ๋ผ ์๋ก ์ํฅ ์์.
์ด ์ ์ฅ์ ๊ตฌ์กฐ (JSHNSL/humanoid-imitation-learning)
์ฝ๋ ยท ๋ชจ๋ธ ยท ๋ฐ์ดํฐ์ ์ด ์ด repo ํ ๊ณณ์ ๋ชจ์ฌ ์์. ๋ฒ ์ด์ค๋ ROBOTIS cyclo_lab + lerobot-cyclo 0.5.2.
humanoid-imitation-learning/
โโโ README.md ์ด ๋ฌธ์ (= WORKFLOW.md)
โโโ LEROBOT_UPGRADE.md lerobot 0.3.3 โ 0.5.2 ์
๊ทธ๋ ์ด๋
โโโ DASHBOARD_CHANGES.md ๋์๋ณด๋ ์ธ์
๋ค์ด๋ฐ ๋ณ๊ฒฝ
โโโ HDF5_HUB_README.md HDF5 ํ๋ธ repo์ README (sync_docs.py๊ฐ ์
๋ก๋)
โโโ push_dataset.py LeRobot ๋ฐ์ดํฐ์
HF ์
๋ก๋ (ํ์ต์ฉ repo)
โโโ push_hdf5.py ์๋ณธ HDF5 HF ์
๋ก๋ (HDF5 ํ๋ธ repo)
โโโ merge_hdf5_demos.py HDF5 ๋ณํฉ (์ธ์
/๋จ๊ณ๋ณ)
โโโ hpo_optuna.py Optuna ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ + ํ๋๊ฐ์ผ๋ก ํ์ต
โโโ hpo_train_shim.py โ ํ๋์ด ์ฐ๋ ํ์ต ๋ฐ์ฒ (diffusion ์ํ๋ฌ ๋ฒ๊ทธ ์ฐํ)
โโโ sg2_ltable_dashboard.py ๋
นํยทํ์ดํ๋ผ์ธ ๋์๋ณด๋ (์ธ์
๋ค์ด๋ฐ)
โโโ scripts/sim2real/imitation_learning/
โ โโโ data_converter/isaaclab2lerobot.py HDF5 โ LeRobot(v3.0) ๋ณํ
โ โโโ inference/
โ โโโ eval_policy_sim.py ์๋ฎฌ ๋กค์์ ํ๊ฐ
โ โโโ convert_policy_v05_to_v03.py 0.5.2 ์ ์ฑ
โ 0.3.3 (๋กค์์์ฉ)
โโโ models/ ํ์ต ์ ์ฑ
(0.5.2 ์๋ณธ + _v03 ๋กค์์์ฉ)
โโโ datasets/ffw_sg2_ltable_merge/ v3.0 LeRobot ๋ฐ์ดํฐ์
์ฌํ ์์: โ cyclo_lab + lerobot-cyclo ์ค๋น โ โก ์ ์คํฌ๋ฆฝํธ ๋ฐฐ์น โ โข ์๋ ํ์ดํ๋ผ์ธ ์คํ.
Setup โ ํ๊ฒฝ ์ค๋น (์ต์ด 1ํ)
Prerequisites: NVIDIA Docker(Container Toolkit) ยท Isaac Sim ์ปจํ ์ด๋ ์๊ตฌ์ฌํญ ์ถฉ์กฑ ยท NVIDIA GPU + ๋๋ผ์ด๋ฒ
1. EKAIWORKER ์ค๋ฒ๋ ์ด ํด๋ก + ์ ์ โ cyclo_lab / ai_worker / robotis_applications ํ ๋ฒ์:
git clone https://github.com/Disniekie01/EKAIWORKER.git AIWORKER
cd AIWORKER
./setup.sh ~/AIWORKER
setup.sh๊ฐ ์ธ ์ ์ฅ์๋ฅผ ๊ณ ์ ์ปค๋ฐ์ผ๋ก ํด๋ก + ์๋ธ๋ชจ๋ ์ด๊ธฐํ + ์ค๋ฒ๋ ์ด ์ ์ฉ๊น์ง ์๋ ์ฒ๋ฆฌ (upstream ์ ์ฒด๋ฅผ vendoring ํ์ง ์์). ๊ตฌ์ฑ:
cyclo_labโ Isaac Sim ํ๊ฒฝ ยท ๋ นํ ยท Mimic ํ์ดํ๋ผ์ธ (+ ์ด ์ํฌํ๋ก์ฐ ์คํฌ๋ฆฝํธ)ai_workerโ ๋ชจ์ ์ ์ดrobotis_applicationsโ VR teleop ํผ๋ธ๋ฆฌ์
2. Docker ์ปจํ ์ด๋ ๊ธฐ๋:
cd ~/AIWORKER/cyclo_lab/docker && ./container.sh start # ํ์ตยท์๋ฎฌ (ํ์)
cd ~/AIWORKER/robotis_applications/docker && ./container.sh start # VR teleop (๋
นํ ์)
cd ~/AIWORKER/ai_worker/docker && ./container.sh start # ๋ชจ์
์ ์ด (๋
นํ ์)
์ปจํ ์ด๋ ์ง์ (์ดํ ๋ชจ๋ ์์ ์ ์ด ์์์):
cd ~/AIWORKER/cyclo_lab && ./docker/container.sh enter
ํฌํจ๋ ๊ฒ: Isaac Sim 5.1.0 ยท Isaac Lab v2.3.0 ยท CycloneDDS 0.10.2 ยท LeRobot venv
3. LeRobot 0.5.2(v3.0) ์ค์น (ํ์ต venv /root/lerobot_env, ์์ธํ๋ LEROBOT_UPGRADE.md):
(a) venv๊ฐ ์ด๋ฏธ ์์ผ๋ฉด (lerobot-python alias ๋์) โ ์
๊ทธ๋ ์ด๋๋ง:
lerobot-pip install "lerobot[training,av-dep] @ git+https://github.com/ROBOTIS-GIT/lerobot-cyclo.git"
(b) venv๊ฐ ์์ผ๋ฉด โ ์ฒ์๋ถํฐ ์์ฑ. โ ๏ธ python3๋ isaac 3.11 alias๋ผ ์ ๋จ โ ์์คํ
python3.12๋ก:
/usr/bin/python3.12 -m venv /root/lerobot_env
/root/lerobot_env/bin/pip install --upgrade pip
/root/lerobot_env/bin/pip install "lerobot[training,av-dep] @ git+https://github.com/ROBOTIS-GIT/lerobot-cyclo.git" h5py
# alias ๋ฑ๋ก
cat >> ~/.bashrc <<'EOF'
export LEROBOT_VENV=/root/lerobot_env
alias lerobot-python='${LEROBOT_VENV}/bin/python3'
alias lerobot-pip='${LEROBOT_VENV}/bin/pip'
alias lerobot-hf='${LEROBOT_VENV}/bin/hf'
alias lerobot-activate='source ${LEROBOT_VENV}/bin/activate'
EOF
source ~/.bashrc
lerobot-python -c "import lerobot; print(lerobot.__version__)" # 0.5.2 ํ์ธ
โ ๏ธ (ํ์) torch/torchvision ๋ฒ์ ๋ง์ถ๊ธฐ โ ์ ๋ง์ผ๋ฉด ํ์ต์ด mismatch๋ก ์ ๋:
lerobot-python -c "import torch,torchvision; print(torch.__version__, torchvision.__version__)" # ๋ฐ๋์ 2.7.1+cu128 / 0.22.1+cu128 ์ด์ด์ผ ํจ. # ๋ค๋ฅด๋ฉด(์: 2.7.0/0.22.0) ๊ฐ์ ์ฌ์ค์น: lerobot-pip install --index-url https://download.pytorch.org/whl/cu128 \ --force-reinstall "torch==2.7.1" "torchvision==0.22.1"
๋กค์์์ฉ isaac python(3.11)์ 0.3.3 ์ ์ง (4-a ์ฐธ๊ณ ).
4. (๋ นํ ์) VR teleop ๋์๋ณด๋:
cd ~/AIWORKER/cyclo_lab && python3 sg2_ltable_dashboard.py # http://localhost:8765
5. ์ด repo์ ์คํฌ๋ฆฝํธ ๋ฐ๊ธฐ (์ปจํ
์ด๋ ์, /workspace/cyclo_lab ์์):
cd /workspace/cyclo_lab
# ๋ฃจํธ ์คํฌ๋ฆฝํธ (๋ณํยท์
๋ก๋ยท๋ณํฉยทํ๋)
lerobot-hf download JSHNSL/humanoid-imitation-learning \
push_dataset.py push_hdf5.py merge_hdf5_demos.py \
hpo_optuna.py hpo_train_shim.py sync_docs.py \
--local-dir .
# ๋กค์์/๋ณํ ์คํฌ๋ฆฝํธ (๊ฒฝ๋ก ๊ตฌ์กฐ ๊ทธ๋๋ก ์ฌํ๋จ)
lerobot-hf download JSHNSL/humanoid-imitation-learning \
--include "scripts/sim2real/imitation_learning/**" \
--local-dir .
--local-dir .์ด๋ผ repo ์์ ๊ฒฝ๋ก๊ฐ ๊ทธ๋๋ก ์ฌํ๋๋ค โscripts/sim2real/imitation_learning/inference/eval_policy_sim.py๋ฑ์ด ์ ์๋ฆฌ์ ๋จ์ด์ง๋ค.โ ๏ธ ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ด๋ค. ๋ก์ปฌ์์ ๊ณ ์น ๊ฒ ์์ผ๋ฉด ๋จผ์ ๋ฐฑ์ ํ ๊ฒ. โ ๏ธ model repo๋ผ
--repo-type์ด ํ์ ์๋ค (๊ธฐ๋ณธ๊ฐ์ด model).
6. (์ ํ) ๋ฐ์ดํฐ์
ยท๋ชจ๋ธ: JSHNSL/humanoid-imitation-learning ์ models/ ยท ๋ฐ์ดํฐ์
repo ffw_sg2_ltable_merge ยท HDF5 ํ๋ธ ffw_sg2_hdf5 ์์.
โ ์ดํ ๋งค๋ฒ์ ./docker/container.sh enter ๋ก ์ ์ํด์ ์๋ 1~4๋จ๊ณ ์คํ.
๊ฒฝ๋ก ๊ท์น (์ด repo ๊ทธ๋๋ก ๋ฐ๋ผํ ๋)
์ด repo์๋ scripts/ ยท datasets/ffw_sg2_ltable_merge/ ยท models/ ๊ฐ ๋ค์ด์์.
์๋ ๋ช
๋ น์ cyclo_lab ๋ฃจํธ(/workspace/cyclo_lab)์์ ์คํ ๊ธฐ์ค์ด๋ฉฐ, repo์ ํด๋๋ฅผ cyclo_lab์ ๋ฐฐ์นํ๋ค๊ณ ๊ฐ์ ํ๋ค:
| repo ํด๋ | cyclo_lab์ ๋๋ ์์น | ๋ช ๋ น์์ ์ฐ๋ ๊ฒฝ๋ก |
|---|---|---|
scripts/ |
๊ทธ๋๋ก | scripts/sim2real/... |
datasets/ffw_sg2_ltable_merge/ |
./datasets/ ์๋ |
--dataset.root=./datasets/ffw_sg2_ltable_merge |
models/<์ด๋ฆ>/ |
./models/ ์๋ |
๋กค์์ --policy ./models/<์ด๋ฆ> |
์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ: ๋ณํ ์ถ๋ ฅ(
./datasets/lerobot/<ํ์์คํฌํ>)ยทํ์ต ์ถ๋ ฅ(./outputs/train/<NAME>)์ ๋์ ์ฐ๋ฉด ๋๋ค.
1. HDF5 โ LeRobot ๋ณํ (lerobot-python) โ ์ง์ ๋ฐ์ดํฐ ๋ง๋ค ๋๋ง
lerobot-python scripts/sim2real/imitation_learning/data_converter/isaaclab2lerobot.py \
--task=Cyclo-Real-Pick-Place-LTable-FFW-SG2-v0 \
--robot_type FFW_SG2 \
--dataset_file ./datasets/ffw_sg2_l_table_raw.hdf5
๊ฒฐ๊ณผ: ./datasets/lerobot/<ํ์์คํฌํ>/ (data/ videos/ meta/)
1.5 ์ฌ๋ฌ HDF5 ๋ณํฉ (์ ํ) (lerobot-python)
์ฌ๋ฌ ์ธ์
/๋จ๊ณ์ HDF5๋ฅผ ํ๋๋ก ํฉ์ณ์ ๋ณํํ๊ณ ์ถ์ ๋. ์คํฌ๋ฆฝํธ: merge_hdf5_demos.py
(์ ์ฅ์ ๋ฃจํธ์ ์์ โ ์ปจํ
์ด๋ /workspace/cyclo_lab์์ ์คํ).
lerobot-python merge_hdf5_demos.py \
--inputs <ํ์ผ1.hdf5> <ํ์ผ2.hdf5> ... \
--output <๋ณํฉ๊ฒฐ๊ณผ.hdf5>
--inputs: ํฉ์น HDF5๋ค (์ํ๋ ์์๋๋ก, ํ์)--output: ๊ฒฐ๊ณผ ํ์ผ (ํ์)--prefix: ์ถ๋ ฅ ๋ฐ๋ชจ ๋ผ๋ฒจ ์ ๋์ฌ (๊ธฐ๋ณธdemo)
์ โ ํ ํ์คํฌ์ ๋ชจ๋ joint ์ธ์ ์ glob์ผ๋ก:
lerobot-python merge_hdf5_demos.py \
--inputs datasets/ffw_sg2_l_table/*/*_joint.hdf5 \
--output datasets/ffw_sg2_l_table_merged_joint.hdf5
- ๋ฐ๋ชจ ๋ผ๋ฒจ(
demo_0..demo_N)์ ์ซ์์ ์ ๋ ฌ + ์์ฐจ ์ฌ๋ฒํธ ์ฒ๋ฆฌ๋จ - ํฉ์น๋ ํ์ผ๋ผ๋ฆฌ ๋ก๋ดยทํ์คํฌยท์ฐจ์ยท์นด๋ฉ๋ผ๊ฐ ๊ฐ์์ผ ํจ (๋ณดํต
joint๋ผ๋ฆฌ) - ๋ณํฉ ํ
isaaclab2lerobot(1๋จ๊ณ)์--dataset_file๋ก ๋๊ฒจ ๋ณํ - raw๋ฅผ ์์ ๋ ๋จผ์
action_data_converter --action_type joint๋ก ํต์ผ
2. HuggingFace ์
๋ก๋ โ ์ ๋ถ humanoid-imitation-learning ํ repo๋ก
๋ณ๋ ๋ฐ์ดํฐ์
/๋ชจ๋ธ repo๋ฅผ ๋ง๋ค์ง ์๊ณ ์ด repo์ ํ์ํด๋(datasets/, models/)์ ๋ชจ์๋ค.
๋ก๊ทธ์ธ (1ํ):
export HF_TOKEN=hf_writeํ ํฐ # ๋๋: lerobot-python -c "from huggingface_hub import login; login()"
unset HF_HUB_OFFLINE # ์คํ๋ผ์ธ ๋ณ์ ๋จ์์์ผ๋ฉด ํด์
๋ฐ์ดํฐ์
โ ๋ณ๋ dataset repo (ํ์ต์์ --dataset.repo_id๋ก ๋ฐ๋ก ๋น๊ธฐ๋ ค๋ฉด dataset ํ์
repo์ฌ์ผ ํจ):
lerobot-python push_dataset.py \
--repo_id JSHNSL/ffw_sg2_ltable_merge \
--root ./datasets/lerobot/<ํ์์คํฌํ> # 1๋จ๊ณ ๋ณํ ์ถ๋ ฅ ํด๋
โ https://huggingface.co/datasets/JSHNSL/ffw_sg2_ltable_merge (3๋จ๊ณ ํ์ต์ด ์ด๊ฑธ ์)
๋ชจ๋ธ(ํ์ต ๊ฒฐ๊ณผ) โ models/<์ด๋ฆ>/:
lerobot-python -c "
from huggingface_hub import upload_folder
upload_folder(folder_path='./outputs/train/act_merge/checkpoints/last/pretrained_model',
repo_id='JSHNSL/humanoid-imitation-learning', repo_type='model',
path_in_repo='models/act_merge')
"
๊ทธ๋์ ํ์ต์
--policy.push_to_hub=false๋ก ๋๊ณ (๋ณ๋ repo ์ ๋ง๋ค๊ฒ), ์ฌ๊ธฐ์ฒ๋ผ ์๋ ์ ๋ก๋ํ๋ค.
2.5 ์๋ณธ HDF5 โ HDF5 ํ๋ธ repo (push_hdf5.py)
push_dataset.py๋ ๋ณํ๋ LeRobot ๋ฐ์ดํฐ์
(meta/ data/ videos/)๋ง ์ฌ๋ฆฐ๋ค.
Isaac Sim์์ ๋์จ ์๋ณธ HDF5(raw / annotate / ik / generate / joint)๋ ๋ณ๋ "ํ๋ธ" dataset repo์ ์๋๋ค.
์ ๋ฐ๋ก?
- ํ์ต์ฉ repo(
ffw_sg2_ltable_merge)๋ ํ์ต ๋๋ง๋ค ํต์งธ๋ก ๋ฐ์ผ๋ฏ๋ก ๊ฐ๋ณ๊ฒ ์ ์งํด์ผ ํจ (HDF5๋ ์ GB) - ํ๋ธ repo์ ์์ผ๋ก ๋ค๋ฅธ ํ์คํฌ HDF5๋ ๊ณ์ ๋์ ๊ฐ๋ฅ
ํ๋ธ repo: JSHNSL/ffw_sg2_hdf5 (dataset ํ์
, public)
โ ์
๋ก๋/๋ค์ด๋ก๋ ๋ฐฉ๋ฒ์ ๊ทธ repo์ README์๋ ์ ๋ฆฌ๋์ด ์์ (HDF5_HUB_README.md)
export HF_TOKEN=hf_writeํ ํฐ
unset HF_HUB_OFFLINE
# 1) ๋ญ๊ฐ ์ฌ๋ผ๊ฐ์ง ๋จผ์ ํ์ธ (์
๋ก๋ ์ ํจ)
lerobot-python push_hdf5.py \
--repo_id JSHNSL/ffw_sg2_hdf5 \
--paths datasets/ffw_sg2_l_table \
--dry_run
# 2) ์ค์ ์
๋ก๋ (repo ์์ผ๋ฉด ์๋ ์์ฑ)
lerobot-python push_hdf5.py \
--repo_id JSHNSL/ffw_sg2_hdf5 \
--paths datasets/ffw_sg2_l_table
ํด๋ ๊ตฌ์กฐ๊ฐ repo ์์ ๊ทธ๋๋ก ๋ณด์กด๋๋ค โ ํ์คํฌ๋ณ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋ถ๋ฆฌ๋จ:
ffw_sg2_l_table/20260710/1421_58_ffw_sg2_l_table_raw.hdf5
ffw_sg2_l_table/20260710/1425_58_ffw_sg2_l_table_ik.hdf5
...
์ฃผ์ ์ต์ :
| ์ต์ | ์ค๋ช |
|---|---|
--paths |
ํ์ผ/๋๋ ํ ๋ฆฌ ์ฌ๋ฌ ๊ฐ ๊ฐ๋ฅ. ๋๋ ํ ๋ฆฌ๋ ์ฌ๊ท ํ์(*.hdf5), ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ด repo ์ ์ต์์ ํด๋๊ฐ ๋จ |
--dry_run |
์ฌ๋ฆด ๋ชฉ๋ก + ์ด ์ฉ๋๋ง ์ถ๋ ฅํ๊ณ ์ข ๋ฃ (ํญ์ ๋จผ์ ์คํ ๊ถ์ฅ) |
--path_in_repo |
repo ์ ์ ๋ ๊ฒฝ๋ก (์: --path_in_repo hdf5). ๊ธฐ๋ณธ์ repo ๋ฃจํธ |
--private |
๋น๊ณต๊ฐ repo๋ก ์์ฑ |
ํ์ผ ํ๋๋ง ์ฌ๋ฆฌ๊ธฐ / ์ฌ๋ฌ ๊ฒฝ๋ก ํ ๋ฒ์:
lerobot-python push_hdf5.py --repo_id JSHNSL/ffw_sg2_hdf5 \
--paths datasets/ffw_sg2_l_table_joint.hdf5 datasets/other_dataset --dry_run
๋ค์ ๋ฐ๊ธฐ (lerobot-hf = venv์ hf CLI. --repo-type dataset ํ์):
# ํ์ผ ํ๋
lerobot-hf download JSHNSL/ffw_sg2_hdf5 --repo-type dataset \
0713_ffw_sg2_l_table_annotate_merge_num96.hdf5 \
--local-dir ./datasets
# ํจํด์ผ๋ก (์: joint ๋จ๊ณ๋ง)
lerobot-hf download JSHNSL/ffw_sg2_hdf5 --repo-type dataset \
--include "*_joint.hdf5" --local-dir ./datasets
โ ๏ธ HDF5๋ ํฌ๋ค(๋จ์ผ 3~5GB๋ ์์). ์ ๋ก๋ ์
--dry_run์ผ๋ก ์ด ์ฉ๋ ํ์ธ ํ์.
2.6 HF์ ์ฌ๋ฆฐ ํ์ผ ์ญ์
์๋ชป ์ฌ๋ ธ์ ๋. lerobot-hf repos delete-files ์ฌ์ฉ (write ํ ํฐ ํ์).
lerobot-hf auth login # ์ ํ์ผ๋ฉด
dataset repo (HDF5 ํ๋ธ ๋ฑ) โ --repo-type dataset ํ์:
# ํ์ผ ํ๋
lerobot-hf repos delete-files JSHNSL/ffw_sg2_hdf5 \
1425_58_ffw_sg2_l_table_ik.hdf5 --repo-type dataset
# ์ฌ๋ฌ ๊ฐ (๊ณต๋ฐฑ ๊ตฌ๋ถ)
lerobot-hf repos delete-files JSHNSL/ffw_sg2_hdf5 \
a.hdf5 b.hdf5 --repo-type dataset
# ํจํด (fnmatch, '*'๋ ์ฌ๊ท)
lerobot-hf repos delete-files JSHNSL/ffw_sg2_hdf5 \
"*_ik.hdf5" --repo-type dataset
# ํด๋ ํต์งธ๋ก
lerobot-hf repos delete-files JSHNSL/ffw_sg2_hdf5 \
"ffw_sg2_l_table/*" --repo-type dataset
model repo (humanoid-imitation-learning) โ --repo-type ์๋ต (๊ธฐ๋ณธ์ด model):
lerobot-hf repos delete-files JSHNSL/humanoid-imitation-learning "models/act_8ep/*"
repo ์์ฒด ์ญ์ :
lerobot-hf repos delete JSHNSL/์ด๋คrepo --repo-type dataset
์ฃผ์์ฌํญ:
- โ ๏ธ
--repo-type dataset๋นผ๋จน์ผ๋ฉด model repo๋ฅผ ์ฐพ์์ ์๋ฑํ๊ฒ ์คํจํ๋ค (๋ค์ด๋ก๋ ๋์ ๊ฐ์ ํจ์ ) - ํจํด์ด ๋ญ ์ง์ธ์ง ์ ๋งคํ๋ฉด repo์ Files and versions ํญ์์ ๋จผ์ ํ์ธ
--create-pr๋ถ์ด๋ฉด ๋ฐ๋ก ์ ์ง์ฐ๊ณ PR๋ก ๋ง๋ค์ด ๊ฒํ ํ ๋จธ์ง ๊ฐ๋ฅ (์ค์ ๋ฐฉ์ง)
โ ๏ธ ์ญ์ ํด๋ ์ฉ๋์ ์ ์ค์ด๋ ๋ค โ ์ค์ฟผ์๋ก ํ์
HF๋ git ๊ธฐ๋ฐ์ด๋ผ delete-files๋ก ์ง์๋ ํ์คํ ๋ฆฌ์ blob์ด ๊ทธ๋๋ก ๋จ์ ์ ์ฅ์ ์ฉ๋์ ์ ์ค์ด๋ ๋ค.
repo๋ฅผ ์ ์ง์ฐ๊ณ ์ฉ๋์ ํ์ํ๋ ค๋ฉด ํ์คํ ๋ฆฌ๋ฅผ ์ค์ฟผ์ํ๋ค (์ปค๋ฐ์ ํ๋๋ก ๋๋ฌ ์ blob ์ ๊ฑฐ).
# โ ๋จผ์ ํ์ผ์ ์ค์ ๋ก ์ญ์ (์์ง ํ์คํ ๋ฆฌ์ ๋จ์์์)
lerobot-hf repos delete-files JSHNSL/ffw_sg2_hdf5 "์ง์ธํ์ผ.hdf5" --repo-type dataset
# โก ํ์คํ ๋ฆฌ ์ค์ฟผ์ โ ์ฌ๊ธฐ์ ์ฉ๋์ด ์ค์ ๋ก ํ์๋จ
lerobot-python -c "
from huggingface_hub import HfApi
HfApi().super_squash_history(repo_id='JSHNSL/ffw_sg2_hdf5', repo_type='dataset')
print('squashed')
"
์์๊ฐ ์ค์ํ๋ค: โ ๋ก ์ง์ฐ๊ณ โ โก๋ก ์ค์ฟผ์. ์ค์ฟผ์๋ ํ์ฌ HEAD ์ํ๋ง ๋จ๊ธฐ๊ณ ์ด์ ์ปค๋ฐ์ ์ ๋ถ ๋ฒ๋ฆฌ๋ฏ๋ก, ์ด๋ฏธ ์ญ์ ๋ ํ์ผ์ blob์ด ํจ๊ป ์ฌ๋ผ์ง๋ค.
๋๊ฐ:
- โ ๏ธ ์ปค๋ฐ ํ์คํ ๋ฆฌ ์๊ตฌ ์๋ฉธ โ ๋๋๋ฆด ์ ์๋ค
- โ ๏ธ ์ค์ฟผ์ํ ๋ธ๋์น๋ ๋ค๋ฅธ ๋ธ๋์น์ ํ์คํ ๋ฆฌ๊ฐ ๊ฐ๋ผ์ ธ ๋จธ์ง ๋ถ๊ฐ
- ๊ณผ๊ฑฐ ๋ฒ์ ์ ์ ๊ทผํ ์ผ์ด ์์ ๋๋ง. (HDF5 ์๋ณธ ๋ณด๊ด repo๋ฉด ํ์คํ ๋ฆฌ๊ฐ ๋ณ ์๋ฏธ ์์ด ๋ถ๋ด์ด ์ ๋ค)
- CLI ๋ช ๋ น์ ์๋ค โ ํ์ด์ฌ์ผ๋ก๋ง ๊ฐ๋ฅ. write ํ ํฐ ํ์.
| ๋ฐฉ๋ฒ | ์ฉ๋ ํ์ | ํ์คํ ๋ฆฌ | repo |
|---|---|---|---|
delete-files ๋ง |
โ | ์ ์ง | ์ ์ง |
delete-files + super_squash_history |
โ | ์๋ฉธ | ์ ์ง โ ๋ณดํต ์ด๊ฑธ ์ํจ |
| repo ์ญ์ ํ ์ฌ์์ฑ | โ | ์๋ฉธ | ์๋ก ๋ง๋ค์ด์ผ ํจ (READMEยท์ค์ ๋ค์) |
3. ํ์ต โ ACT / VQ-BeT / Diffusion (lerobot-python)
๋ฐ์ดํฐ๋ dataset repo
JSHNSL/ffw_sg2_ltable_merge์์ ์๋์ผ๋ก ๋ฐ์ (์์ผ๋ฉด 2๋จ๊ณ์์ ๋จผ์ ์์ฑ).
๊ณตํต ๋ช
๋ น (<POLICY>, <NAME>๋ง ๋ฐ๊ฟ):
unset HF_HUB_OFFLINE
lerobot-python -m lerobot.scripts.lerobot_train \
--dataset.repo_id=JSHNSL/ffw_sg2_ltable_merge \
--policy.type=<POLICY> \
--output_dir=./outputs/train/<NAME> \
--policy.device=cuda \
--policy.push_to_hub=false \
--num_workers=8 --dataset.video_backend=pyav \
--steps=100000 --save_freq=20000
| ์ ์ฑ | <POLICY> |
<NAME> |
ํน์ง |
|---|---|---|---|
| ACT | act |
act_merge |
๊ธฐ๋ณธยท๋น ๋ฆยท์์ ์ |
| VQ-BeT | vqbet |
vqbet_merge |
๋ฉํฐ๋ชจ๋ฌ |
| Diffusion | diffusion |
diffusion_merge |
๋ฉํฐ๋ชจ๋ฌยท๋๋ฆผยท๋ชจ๋ธ ํผ, diffusers ํ์ |
- ๋ชจ๋๋ช
(0.5.x):
lerobot.scripts.lerobot_train(๊ตฌ๋ฒ์ ...train์๋) --dataset.repo_id: dataset repoJSHNSL/ffw_sg2_ltable_mergeโ HF์์ ์๋ ๋ค์ด๋ก๋ยท์บ์ (์จ๋ผ์ธยท๋ก๊ทธ์ธ ํ์)- โ ๏ธ model repo(
JSHNSL/humanoid-imitation-learning)๋ฅผ ๋ฃ์ผ๋ฉด dataset ์กฐํ 404 โ ๋ฐ๋์ dataset repo๋ง - ๋ก์ปฌ ํด๋๋ก ์ฐ๋ ค๋ฉด โ
--dataset.root=<meta/info.json ์๋ ํด๋>์ถ๊ฐ (์: ์ง์ ๋ณํํ./datasets/lerobot/<ํ์์คํฌํ>) --num_workers=8 --dataset.video_backend=pyav: ์์ปค ์ธ๊ทธํดํธ ํํผ. (์์ ๋นต์--num_workers=0, ๋์ ๋๋ฆผ)--policy.push_to_hub=false: ์ ๋ก๋๋ 2๋จ๊ณ์์ humanoid๋ก ์๋- diffusion
ModuleNotFoundError: diffusersโlerobot-pip install diffusers - ํ๋์ฉ ๋๋ฆฌ๊ธฐ (๋์ ์คํ ์ GPU OOM). ๋ฐ์ดํฐ์ ์ v3.0 ํ์ (v2.1์ด๋ฉด 3.5๋ก ๋ณํ)
ํ์ต ๊ฒฐ๊ณผ ํ์ธ
- ํ์ต ์ค(ํฐ๋ฏธ๋):
step:200 ... loss:0.12 grdn:0.30 updt_s:0.01 ...โ loss๊ฐ ๊พธ์คํ ๋ด๋ ค๊ฐ๋ฉด ์ ์ - ์ฒดํฌํฌ์ธํธ:
outputs/train/<NAME>/checkpoints/(020000/,last/...) - ์ต์ข
์ ์ฑ
ํ์ผ:
outputs/train/<NAME>/checkpoints/last/pretrained_model/(config.json+model.safetensors) - ์ค์ ์ฑ๋ฅ(์ฑ๊ณต๋ฅ ): 4๋จ๊ณ ์๋ฎฌ ๋กค์์์ผ๋ก ์ธก์ (์ง์ง ํ๊ฐ๋ ์ด๊ฒ)
- ํ์ธ ๋๋๋ฉด โ 2๋จ๊ณ๋ก
models/<NAME>์ ๋ก๋
3.2 ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ โ Optuna (hpo_optuna.py)
์ ์ฑ ์ด๋ฆ + ๋ฐ์ดํฐ์ ๋ง ์ฃผ๋ฉด โ ํ์ โ best ์ ์ฅ โ ๊ทธ ๊ฐ์ผ๋ก ์ ์ฒด ํ์ต โ HF ์ ๋ก๋๊น์ง.
lerobot-pip install optuna # ์ต์ด 1ํ
ํ์ผ 2๊ฐ ํ์:
hpo_optuna.py+hpo_train_shim.py(๊ฐ์ ํด๋์). shim์ trial ํ์ต์ ์คํํ๋ ๋ฐ์ฒ๋ค.
ํ ๋ฐฉ์: ํ์ โ ํ์ต โ ๋ฐฐํฌ
lerobot-hf auth login # ์
๋ก๋ํ๋ ค๋ฉด ๋จผ์ (1ํ)
lerobot-python hpo_optuna.py \
--policy diffusion \
--repo_id JSHNSL/ffw_sg2_ltable_merge \
--n_trials 12 \
--steps 5000 \
--num_workers 8 \
--then_train \
--full_steps 100000 \
--push_to_hub \
--hub_name diffusion_tuned \
--fresh
--policy: act | vqbet | diffusion
๊ฒฐ๊ณผ๋ฌผ
- best ํ๋ผ๋ฏธํฐ โ
outputs/hpo/<policy>/best_params.json - ํ์ต ๊ฒฐ๊ณผ โ
outputs/train/<policy>_tuned/checkpoints/last/pretrained_model/ - ์
๋ก๋ โ
JSHNSL/humanoid-imitation-learning์models/<hub_name>/(๊ฐ์ค์น +hpo_best_params.json)
๋๋ ์ ์คํ
| ํ๊ณ ์ถ์ ๊ฒ | ๋ช ๋ น |
|---|---|
| ํ์๋ง | hpo_optuna.py --policy act --n_trials 12 --steps 5000 |
| ์ ์ฅ๋ best๋ก ํ์ต๋ง | hpo_optuna.py --policy act --train_best |
| ์ ์ฅ๋ best๋ก ํ์ต + ๋ฐฐํฌ | hpo_optuna.py --policy act --train_best --push_to_hub |
| ๊ฒฐ๊ณผ ๋ณด๊ธฐ | hpo_optuna.py --policy act --report_only |
| ์ฒ์๋ถํฐ ๋ค์ | ์ ๋ช
๋ น์ --fresh ์ถ๊ฐ |
--then_train = "ํ์ต๊น์ง", --push_to_hub = "๋ฐฐํฌ๊น์ง". ๋ ๋ค ์์ผ๋ฉด ํ์๋ง ํ๋ค.
--fresh ์์ด ์ฌ์คํํ๋ฉด ๊ธฐ์กด study์ trial์ด ๋์ ๋๋ค.
์ฃผ์ ์ต์
| ์ธ์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
--n_trials |
20 |
์๋ํ ์กฐํฉ ์. core ๊ณต๊ฐ(4 |
--steps |
8000 |
trial๋น ํ์ต ์คํ . ๋๋ฌด ์ค์ด์ง ๋ง ๊ฒ (์๋ ์ฐธ๊ณ ) |
--num_workers |
8 |
dataloader ์์ปค. 8์ด๋ฉด GPU๊ฐ ์ด๋ฏธ ํฌํ โ ๋ ๋๋ ค๋ ์ด๋ ์๋ค |
--val_ratio |
0.2 |
์ํผ์๋์ 20%๋ฅผ val๋ก ๋ถ๋ฆฌ |
--fresh |
โ | ๊ธฐ์กด study๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ฒ์๋ถํฐ |
--space |
core |
์๋ ์ฐธ๊ณ |
| ์ ์ฒด ํ์ต | ||
--full_steps |
100000 |
์ ์ฒด ํ์ต ์คํ |
--save_freq |
full_steps/5 |
์ฒดํฌํฌ์ธํธ ์ฃผ๊ธฐ |
--full_batch_size |
ํ๋๋ ๊ฐ | OOM ๋ ๋ ๋ฎ์ด์ฐ๊ธฐ |
--full_num_workers |
--num_workers |
์ ์ฒด ํ์ต์ฉ ์์ปค |
--hub_name / --hub_repo_id |
<policy>_tuned / humanoid repo |
์ ๋ก๋ ์์น |
--train_extra |
โ | ๋๋จธ์ง๋ฅผ lerobot_train์ ๊ทธ๋๋ก ์ ๋ฌ (๋งจ ๋ค์) |
๋ฌด์์ ํ๋ํ๋๊ฐ โ --space core (๊ธฐ๋ณธ)
| ์ ์ฑ | ํ์ ๋์ |
|---|---|
| ACT | optimizer_lr, optimizer_lr_backbone, optimizer_weight_decay, dropout, batch_size |
| VQ-BeT | optimizer_lr, optimizer_vqvae_lr, optimizer_weight_decay, dropout, batch_size |
| Diffusion | optimizer_lr, optimizer_weight_decay, scheduler_warmup_steps, batch_size |
chunk_size ยท horizon ยท n_action_steps ยท kl_weight ยท offset_loss_weight ๋ฑ์ ํ์ํ์ง ์๊ณ lerobot ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๊ณ ์ ํ๋ค. ์ด์ :
๋ชฉ์ ํจ์๊ฐ val loss์ธ๋ฐ, ์ด ๊ฐ๋ค์ ์์ค์ ์ ์ ์์ฒด๋ฅผ ๋ฐ๊พผ๋ค.
- ์์ธก ๊ธธ์ด(
horizon/chunk_size): 8์คํ ์ ์์ธก์ด 32์คํ ์๋ณด๋ค ์ฌ์ฐ๋ loss๊ฐ ๋ฎ๋ค โ ํ์์ด ๋ฌด์กฐ๊ฑด ์งง์ chunk๋ฅผ ๊ณ ๋ฅธ๋ค. ์ ์ ๊ธด chunk๊ฐ ํ์คํฌ ์ฑ๊ณต์ ๋ ์ข์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.- ์์ค ๊ฐ์ค์น(
kl_weight,offset_loss_weight): ์์ค ํญ์ ๊ณฑํด์ง๋ ๊ฐ์ด๋ผ ์์์๋ก ์ซ์๊ฐ ์์์ง๋ค. ํ์ง๊ณผ ๋ฌด๊ดํ๊ฒ ์ต์๊ฐ์ด ๋ฝํ๋ค.์ฆ ์ด๊ฒ๋ค์ ๋ฃ์ผ๋ฉด ํ์์ด ๋ชฉ์ ํจ์๋ฅผ ์์ธ๋ค. ๋จ์ ๊ฒ(ํ์ต๋ฅ ยทweight decayยทdropoutยทbatch)์ ๊ฐ์ ๋ชฉ์ ํจ์๋ฅผ ์ผ๋ง๋ ์ ์ต์ ํํ๋์ง๋ง ๋ฐ๊พธ๋ฏ๋ก ๊ณต์ ํ๋ค.
--space full ๋ก ์ ๋ถ ํ์ํ ์๋ ์์ง๋ง, ์ ํธํฅ ๊ฒฝ๊ณ ๊ฐ ์ถ๋ ฅ๋๋ค.
๋ชฉ์ ํจ์ = held-out validation loss
lerobot์ validation split์ด ์๊ณ ๋ด์ฅ eval_freq๋ gym ํ๊ฒฝ ์ ์ฉ์ด๋ผ, ์ํผ์๋๋ฅผ ๋๋ (--dataset.episodes) val์ ์ง์ ๋ง๋ ๋ค. ๊ฐ trial์ train ์ํผ์๋๋ก ์งง๊ฒ ํ์ต โ ๊ทธ ์ฒดํฌํฌ์ธํธ๋ฅผ val ์ํผ์๋์์ ์ฑ์ (lerobot๊ณผ ๋์ผํ preprocessor) โ Optuna๊ฐ val loss๋ฅผ ์ต์ํํ๋ค.
โ ๏ธ val loss๋ ์์๋ฅผ ๋งค๊ธฐ๋ ํ๋ก์์ผ ๋ฟ, ํ์คํฌ ์ฑ๊ณต์ ๋ณด์ฅํ์ง ์๋๋ค. ์ต์ข ์ ํ์ 4๋จ๊ณ ์๋ฎฌ ๋กค์์ ์ฑ๊ณต๋ฅ ๋ก ํ ๊ฒ.
์์ฐ ์ ํ๊ธฐ
diffusion ์ค์ธก 5.7 step/s (RTX PRO 5000, batch 16):
| ์ค์ | ์ด ์ฐ์ฐ | ํ์ ์๊ฐ |
|---|---|---|
--n_trials 12 --steps 5000 (๊ถ์ฅ) |
60k ์คํ | ~3์๊ฐ |
--n_trials 20 --steps 8000 |
160k ์คํ | ~8์๊ฐ |
์ฌ๊ธฐ์ --full_steps 100000 ์ ์ฒด ํ์ต์ด ~5์๊ฐ ์ถ๊ฐ๋๋ค. (pruning์ด ๊ฐ๋ง ์๋ trial์ ์กฐ๊ธฐ ์ข
๋ฃํ๋ฏ๋ก ์ค์ ๋ก๋ ๋ ์งง๋ค)
โ ๏ธ ์๊ฐ์ ์ค์ด๋ ค๋ฉด
--n_trials๋ฅผ ๋ฎ์ถ ๊ฒ.--steps๋ ๊ฑด๋๋ฆฌ์ง ๋ง ๊ฒ. ์งง๊ฒ ํ์ตํ๋ฉด ์ด๋ฐ์๋ง ๋น ๋ฅธ ๋์ ํ์ต๋ฅ ์ด ์ ๋ฆฌํด ๋ณด์ธ๋ค โ ์ ์ ์ ์ฒด ํ์ต์์ ๋์ ๊ฐ์ ๊ณ ๋ฅด๊ฒ ๋๋ค.โ ๏ธ ๋ณ๋ ฌ(
--n_jobs)์ ์ด GPU์์ ์ด๋์ด ์๋ค. ํ์ต 1๊ฐ๊ฐ ์ด๋ฏธ GPU 100% / 10.5GB๋ฅผ ์ด๋ค.
๊ธด ํ์ต์ tmux ์์์ (ํนํ EC2)
SSH๊ฐ ๋๊ธฐ๋ฉด ํ์ต์ด ๊ฐ์ด ์ฃฝ๋๋ค (connection reset by peer).
tmux new -s hpo
# ... ์ปจํ
์ด๋ ์ง์
ํ ์ ๋ช
๋ น ์คํ ...
# ๋น ์ ธ๋์ค๊ธฐ: Ctrl+B ๋๋ฅด๊ณ D (ํ์ต์ ๊ณ์ ๋์๊ฐ)
tmux attach -t hpo # ์ฌ์ ์ ํ ์ด์ด์ ๋ณด๊ธฐ
3.5 ๊ธฐ์กด v2.1 ๋ฐ์ดํฐ์ โ v3.0 ๋ณํ (lerobot-python)
์์ ์ ๋ง๋ standalone v2.1 ๋ฐ์ดํฐ์ repo๊ฐ ์์ ๋๋ง ํ์. (์ด repo์ ๋ฐ์ดํฐ๋ ์ด๋ฏธ v3.0์ด๋ผ ๋ถํ์)
lerobot-python -m lerobot.scripts.convert_dataset_v21_to_v30 \
--repo-id <์์ -v2.1-๋ฐ์ดํฐ์
-repo> \
--push-to-hub true
- HF ๋ก๊ทธ์ธยท์จ๋ผ์ธ ํ์ (
HF_HUB_OFFLINE์ค์ ๋ผ ์์ผ๋ฉด ํด์ ) - ์ด๋ฏธ v3.0์ด๋ฉด
--force-conversion - ์๋ก ๋ฝ๋ ๋ฐ์ดํฐ๋ (0.5.2 ๋ณํ๊ธฐ๋ผ) ์ฒ์๋ถํฐ v3.0 โ ๋ณํ ๋ถํ์
4. ์๋ฎฌ ๋กค์์ ํ๊ฐ (python = isaac)
์ ๋ณํ์ด ํ์ํ๊ฐ: ๋กค์์์ Isaac Sim(py3.11 / lerobot 0.3.3) ์์์ ์ ์ฑ ์ ๋ก๋ํจ. Isaac Sim์ด 3.11์ด๋ผ 0.5.2(โฅ3.12)๋ฅผ ๋ชป ๋ฃ์ โ 0.5.2๋ก ํ์ตํ ์ ์ฑ ์ 0.3.3์ฉ์ผ๋ก ๋ณํ ํ ๋กค์์. (์์ 0.3.3 ์ ์ฑ ์ ๋ณํ ์์ด ๋ฐ๋ก repo_id ์ฌ์ฉ)
4-a. isaac python ํ๊ฒฝ ์ธํ (1ํ)
$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install --no-deps lerobot==0.3.3
$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install \
draccus deepdiff jsonlines termcolor packaging imageio datasets \
einops safetensors huggingface_hub
# diffusion ์ธ ๋๋ง ์ถ๊ฐ: diffusers
$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install diffusers
# โ ๏ธ ๋ง์ง๋ง์ ๋ฐ๋์ numpy๋ฅผ ๋๋๋ฆฐ๋ค (์๋ ์ฐธ๊ณ )
$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install "numpy==1.26.0"
โ ๏ธ (ํ์) numpy๋ ๋ฐ๋์
1.xโ ์ ๊ทธ๋ฌ๋ฉด ๋กค์์์ด Segmentation fault ๋ก ์ฃฝ๋๋ค.
datasets๋ฅผ ์ค์นํ๋ฉด numpy๊ฐ 2.x๋ก ๋ธ๋ ค ์ฌ๋ผ๊ฐ๋ค. ๊ทธ๋ฐ๋ฐ Isaac Sim์ ์ปดํ์ผ๋ ๋ชจ๋๋ค์ numpy 1.x์ ๋ง์ถฐ ๋น๋๋ผ ์๋ค (isaaclab,isaaclab-tasks,nvidia-srl-usd๊ฐ ์ ๋ถnumpy<2๋ฅผ ์๊ตฌ). numpy 2.x์ 1.x๋ C ABI๊ฐ ํธํ๋์ง ์์ ์ํฌํธ/์คํ ์ค segfault ๊ฐ ๋๋ค. (ModuleNotFoundError๊ฐ ์๋๋ผ ์๋ฌด ๋ฉ์์ง ์์ด ์ฃฝ๋๋ค โ ๊ทธ๋์ ์์ธ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค.)์ค์น ํ ๋ฐ๋์ ํ์ธ โ ์ ์ ๊ฐ:
$ISAACLAB_PATH/_isaac_sim/python.sh -c " import numpy, lerobot, torch print('numpy :', numpy.__version__) # 1.26.0 โ 2.x๋ฉด segfault! print('lerobot:', lerobot.__version__) # 0.3.3 print('torch :', torch.__version__) # 2.7.0+cu128 "2.x๋ฉด ๋๋๋ฆฐ๋ค:
$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install "numpy==1.26.0"
packaging๋ 26.x๋ก ์ฌ๋ผ๊ฐ ์์ผ๋ฉด lerobot๊ณผ ์ถฉ๋ํ๋ ๋๋๋ฆฐ๋ค:$ISAACLAB_PATH/_isaac_sim/python.sh -m pip install "packaging>=24.2,<26"
โ ๏ธ
ModuleNotFoundError: No module named 'pip._vendor.packaging._structures'๊ฐ ๋๋ฉด Isaac Sim ๋ด์ฅ pip ์์ฒด๊ฐ ์์๋ ๊ฒ์ด๋ค.-m pip๋ก๋ ๋ชป ๊ณ ์น๋ ํ์ค ๋ชจ๋ensurepip์ผ๋ก ๋ณต๊ตฌํ๋ค:$ISAACLAB_PATH/_isaac_sim/python.sh -m ensurepip --upgrade $ISAACLAB_PATH/_isaac_sim/python.sh -m pip --version # ๋ณต๊ตฌ ํ์ธ๊ทธ๋๋ ์ ๋๋ฉด
get-pip.py๋ก ๋ณต๊ตฌํ๋ค (pip ์์ด๋ ๋์ โ ์๊ธฐ ์์ pip wheel์ ํ๊ณ ์์):curl -sS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py $ISAACLAB_PATH/_isaac_sim/python.sh /tmp/get-pip.py --ignore-installed $ISAACLAB_PATH/_isaac_sim/python.sh -m pip --versionโ ๏ธ
--force-reinstall์ ์ฐ์ง ๋ง ๊ฒ. ๊ทธ๊ฑด ๊ธฐ์กด pip์ ์ ๊ฑฐํ ๋ค ์ฌ์ค์นํ๋๋ฐ, ์ ๊ฑฐ ๊ณผ์ ์์ ์ด๋ฏธ ์ฌ๋ผ์ง_structures.py๋ฅผ ์ฎ๊ธฐ๋ ค๋ค ๋ ์ฃฝ๋๋ค:ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '.../pip/_vendor/packaging/_structures.py'
--ignore-installed๋ ์ ๊ฑฐ ์์ด ๋ฎ์ด์ฐ๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ํผํ๋ค.๊ทธ๊ฒ๋ง์ ์ ๋๋ฉด ๊นจ์ง pip์ ํต์งธ๋ก ์ง์ฐ๊ณ ์๋ก ์ค์น:
SP=$ISAACLAB_PATH/_isaac_sim/kit/python/lib/python3.11/site-packages rm -rf "$SP/pip" "$SP"/pip-*.dist-info $ISAACLAB_PATH/_isaac_sim/python.sh /tmp/get-pip.py $ISAACLAB_PATH/_isaac_sim/python.sh -m pip --version๋ณต๊ตฌ ํ ์ ์ค์น ๋ช ๋ น์ ๋ค์ ์คํํ๋ฉด ๋๋ค.
4-b. 0.5.2 ์ ์ฑ โ 0.3.3 ๋ณํ (์ง์ ํ์ตํ ์ ์ฑ ๋ง, lerobot-python)
์ด repo์
models/*_v03๋ ์ด๋ฏธ ๋ณํ๋ณธ โ ์ด ๋จ๊ณ ๊ฑด๋๋ฐ๊ณ 4-c๋ก ๋ฐ๋ก. (์ง์ ํ์ตํ์ ๋๋ง ํ์)
# --policy: ์ง์ ํ์ต ์ถ๋ ฅ ํด๋ (๋๋ repo_id / ๋ฐ์ ํด๋)
lerobot-python scripts/sim2real/imitation_learning/inference/convert_policy_v05_to_v03.py \
--policy ./outputs/train/vqbet_merge/checkpoints/last/pretrained_model \
--out ./models/vqbet_merge_v03
- config ์ ๋ฆฌ + ์ ๊ทํ ํต๊ณ ์ฃผ์ โ 0.3.3๊ฐ ๋ก๋ ๊ฐ๋ฅํ๊ฒ (์ํคํ ์ฒ weight๋ ๊ทธ๋๋ก๋ผ ๋ฌธ์ ์์)
- ์ config ํ๋ ์๋ฌ ๋๋ฉด ์คํฌ๋ฆฝํธ
_STRIP_KEYS์ ๊ทธ ํ๋ ์ถ๊ฐ (diffusion ๋์์ฒ๋ผ) - ๋ณํ ํ shape mismatch๋ฉด ์ํคํ ์ฒ๊ฐ ๋ฐ๋ ๊ฒ โ DDS ํ์ (ACT/VQ-BeT/Diffusion์ OK ํ์ธ๋จ)
- ๋ณํ๋ณธ์ humanoid์ ๋๋ ค๋ฉด โ
models/<์ด๋ฆ>_v03๋ก ์ ๋ก๋(2๋จ๊ณ ๋ฐฉ์)
4-c. ๋กค์์ ์คํ (python = isaac)
HF_HUB_OFFLINE=1 python scripts/sim2real/imitation_learning/inference/eval_policy_sim.py \
--task Cyclo-Real-Pick-Place-LTable-FFW-SG2-v0 \
--robot_type FFW_SG2 \
--policy ./models/vqbet_merge_v03 --policy_type vqbet \
--num_rollouts 10 --enable_cameras \
--scripted_l_motion
--policy: ์ด repo์./models/<์ด๋ฆ>_v03(๋๋ ์ง์ ๋ณํํ ํด๋) / repo_id(์์ 0.3.3 ์ ์ฑ )- ์ ์ฑ
๋ฐ๊พธ๊ธฐ:
--policy_type act | vqbet | diffusion+--policyํด๋๋ ๊ทธ ์ ์ฑ ๊ฒ์ผ๋ก (์:./models/diffusion_merge_v03 --policy_type diffusion) --scripted_l_motion: L-Table์ ์ด๋์ด ์คํฌ๋ฆฝํธ๋ผ ํ์ (์ ์ฑ ์ ํ์ง/๋๊ธฐ๋ง ํ์ต)- ๊ฐ์ ์ข
๋ฃ: ๋ค๋ฅธ ํฐ๋ฏธ๋์์
pkill -9 -f eval_policy_sim.py
4-d. (๋์) ๋ณํ ์์ด 0.5.2 ๊ทธ๋๋ก โ DDS 2-ํ๋ก์ธ์ค
0.5.2 ์ ์ฑ ์ ๊ทธ๋๋ก ์ฐ๋ ค๋ฉด ์ ์ฑ ์ ๋ณ๋ 3.12 ํ๋ก์ธ์ค๋ก ์๋น + Isaac Sim(3.11)๊ณผ DDS ํต์ (cyclo_intelligence ๋ฐฉ์). ๋ณํ ๋ถํ์ํ๋ ์ ์ ์ด ๋ฌด๊ฑฐ์ โ ์ค๋ฌผ/์ ์ ๋ฐฐํฌ์ฉ. ๋น ๋ฅธ ์๋ฎฌ ํ์ธ์ 4-b(๋ณํ) ๋ฐฉ์์ด ์ค์ฉ์ .
์ต์ด 1ํ๋ง ํ์ํ๋ ํ๊ฒฝ ์์ (์ฐธ๊ณ )
| ๋ฌธ์ | ํด๊ฒฐ (์ด๋์, ์ ๋ถ lerobot venv) |
|---|---|
| lerobot 0.5.2(v3.0)๋ก ์ ๊ทธ๋ ์ด๋ | lerobot-pip install "lerobot @ git+https://github.com/ROBOTIS-GIT/lerobot-cyclo.git" |
0.5.2 av ์ถฉ๋ (av.option) |
lerobot-pip install "av>=15.0.0,<16.0.0" |
| 0.5.2 ํ์ต์ accelerate ํ์ | lerobot-pip install "lerobot[training] @ git+https://github.com/ROBOTIS-GIT/lerobot-cyclo.git" |
| Blackwell GPU(sm_120) torch | 0.5.2๋ cu128 ๊ธฐ๋ณธ์ด๋ผ ์๋ ํด๊ฒฐ. (๊ตฌ๋ฒ์ 0.3.3: lerobot-pip install --index-url https://download.pytorch.org/whl/cu128 --force-reinstall "torch==2.7.1" "torchvision==0.22.1") |
| ํ์ต ์ ์์ ๋์ฝ๋ฉ ์ธ๊ทธํดํธ | --num_workers=0 (๋๋ apt install ffmpeg) |
| isaac python ์ lerobot ์์กด์ฑ ์์ | ์ 4-a (๋กค์์์ฉ 0.3.3) |
์ ์ฑ ์ข ๋ฅ
act (๊ธฐ๋ณธ, ๋ฌด๋) ยท vqbet (๋ฉํฐ๋ชจ๋ฌ) ยท diffusion (๋ฉํฐ๋ชจ๋ฌ, ์ถ๋ก ๋๋ฆผ)
์ด๋ ๋จ๊ณ๋ --policy.type / --policy_type ๋ง ๋ฐ๊พธ๋ฉด ๋์ผํ๊ฒ ๋์.
ํ ์ค ์์ฝ: ๋ณํ(lerobot-python) โ ์ ๋ก๋(lerobot-python) โ ํ์ต(lerobot-python) โ ๋กค์์(python + HF_HUB_OFFLINE=1)