Downloads · 30 days
0
SangMin9806/LaWAM-LIBERO_immigration
LaWAM-LIBERO_immigration is a machine learning model from SangMin9806. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
이 디렉토리는 LaWAM stage3 LIBERO SFT 체크포인트로 LIBERO 벤치마크를 재현하기 위한 파일 묶음입니다. 학습은 필요 없고, 벤치마크 실행만 하면 됩니다.
Downloads · 30 days
0
Access
Public
Updated Sep 10, 2026
Repo size
7.2 GB
Likes
0
Public
Click a slice to open those files.
.pt7.2 GB · 100%
From the Hugging Face model README
이 디렉토리는 LaWAM stage3 LIBERO SFT 체크포인트로 LIBERO 벤치마크를 재현하기 위한 파일 묶음입니다. 학습은 필요 없고, 벤치마크 실행만 하면 됩니다.
lawam_pretrain (stage2 pretrain) → LIBERO SFTlibero mix (1,693 trajectories / 273,465 transitions)batch256은 계획값이며 실제와 다릅니다이 패키지 용량: 6.7GB (+ Hub에서 별도로 받는 7.1GB → 최종 13.8GB)
이 디렉토리 안의 레이아웃은 LaWAM repo root 기준 상대경로를 그대로 재현한 것입니다. 따라서 이관 작업은 "clone → Hub에서 공개 가중치 3개 다운로드 → 이 디렉토리 덮어쓰기" 순서입니다.
immigration/
├── README.md ← 이 문서
├── results/Checkpoints/libero/20260826_133008+libero_sft_full_batch256/
│ ├── final_model/pytorch_model.pt 6.7GB SFT 가중치
│ ├── config.yaml 학습/추론 설정
│ └── dataset_statistics.json 액션 역정규화 통계
└── latent_action_model/logs/dino_large_vae/lam_release/
└── dino_large_vae.yaml 2KB LAM 구조 설정 (아래 주의 참고)
dino_large_vae.yaml은 2KB짜리 설정 파일인데도 굳이 포함했습니다.
LaWAM 공식 README가 경고하듯, Hub에서 받은 LAM YAML은 model.vision_model_id가
HF model id나 존재하지 않는 절대경로를 가리킬 수 있습니다. 이 패키지의 사본은
weights/dinov3-vitb16-pretrain-lvd1689m으로 맞춰진 검증된 버전이므로,
Hub에서 받은 것 대신 이걸 쓰면 그 문제를 건너뛸 수 있습니다.
용량과 원본 재배포를 피하려고 제외했습니다. 2-3 단계에서 받습니다.
| 대상 | Hub 경로 | 용량 | 놓을 위치 |
|---|---|---|---|
| 베이스 VLM | Qwen/Qwen3-VL-2B-Instruct | 4.0GB | results/Checkpoints/qwen3_weights |
| LAM 비전 백본 | facebook/dinov3-vitb16-pretrain-lvd1689m | 327MB | weights/dinov3-vitb16-pretrain-lvd1689m |
| LAM 체크포인트 | jialei02/lawam_lam | 2.8GB | latent_action_model/logs/dino_large_vae/lam_release |
절대로 파일 위치를 임의로 바꾸지 마세요. 세 곳에서 경로가 하드코딩되어 있습니다.
starVLA/model/tools.py:232 — run_dir = checkpoint_pt.parents[1]
체크포인트 .pt 경로에서 두 단계 위를 run 디렉토리로 역산해서 config.yaml과
dataset_statistics.json을 찾습니다. 즉 <run_dir>/final_model/pytorch_model.pt
구조가 반드시 유지되어야 하고, .pt만 다른 곳으로 옮기면 assert에서 실패합니다.
config.yaml 안의 상대경로 — repo root(CWD) 기준으로 해석됩니다.
framework.qwenvl.base_vlm: results/Checkpoints/qwen3_weights
framework.action_model.lam_ckpt_path: latent_action_model/logs/dino_large_vae/lam_release/checkpoints/pytorch_model.pt
framework.action_model.lam_yaml_path: latent_action_model/logs/dino_large_vae/lam_release/dino_large_vae.yaml
dino_large_vae.yaml 안의 model.vision_model_id: weights/dinov3-vitb16-pretrain-lvd1689m
— LAM 설정에 한 단계 중첩되어 숨어 있는 의존성입니다. 가장 놓치기 쉽습니다.
레이아웃을 바꾸고 싶다면 위 4개 경로 값을 직접 수정해야 합니다.
git clone https://github.com/RLinf/LaWAM.git LaWAM
cd LaWAM
# 이 패키지를 만든 시점의 커밋으로 맞추기 (권장)
git checkout 4ea6fdadce6c9b8746028307a246b79ee2c4fd55
원본 서버에는 학습 스크립트 쪽에 커밋되지 않은 수정이 몇 개 있었지만 (
train_starvla.py,mixtures.py,train_libero.yaml등), 모두 학습 경로 전용이라 벤치마크 실행에는 영향이 없습니다. clone 상태 그대로 벤치마크가 돌아갑니다.
lawam)conda create -n lawam python=3.10 -y
conda activate lawam
pip install -U pip
pip install -r requirements.txt
pip install flash-attn==2.8.3 --no-build-isolation
pip install -e .
flash-attn==2.8.3이 로컬 CUDA/PyTorch 빌드와 안 맞으면, 맞는 wheel을 수동으로 설치한 뒤
pip install -e .를 다시 실행하세요.
동작 확인:
python - <<'PY'
import torch, starVLA
print("torch", torch.__version__, "cuda", torch.version.cuda)
print("gpus", torch.cuda.device_count())
PY
hf CLI가 필요합니다 (pip install -U huggingface_hub). 총 7.1GB.
cd /path/to/LaWAM
# 베이스 VLM (4.0GB)
hf download Qwen/Qwen3-VL-2B-Instruct \
--local-dir results/Checkpoints/qwen3_weights
# LAM 비전 백본 (327MB)
hf download facebook/dinov3-vitb16-pretrain-lvd1689m \
--local-dir weights/dinov3-vitb16-pretrain-lvd1689m
# LAM 체크포인트 (2.8GB)
hf download jialei02/lawam_lam \
--local-dir latent_action_model/logs/dino_large_vae/lam_release
--local-dir 경로는 config.yaml과 LAM YAML에 기록된 값이라 정확히 그대로 써야 합니다.
repo root에서 이 디렉토리 내용을 덮어씁니다. (README.md는 제외)
cd /path/to/LaWAM
rsync -av --exclude='/README.md' /path/to/immigration/ ./
/README.md처럼 슬래시로 앵커링해야 repo root의 LaWAM README.md가 이 문서로
덮어써지지 않습니다.
순서가 중요합니다. 2-3(다운로드)을 먼저 하고 2-4(덮어쓰기)를 나중에 해야 합니다. 이 패키지의
dino_large_vae.yaml이 Hub에서 받은 것을 덮어써서, 위에서 설명한vision_model_id문제를 자동으로 해결합니다. 순서를 뒤집으면 Hub 버전이 남습니다.
배치 확인:
ls results/Checkpoints/qwen3_weights/model.safetensors
ls results/Checkpoints/libero/20260826_133008+libero_sft_full_batch256/final_model/pytorch_model.pt
ls results/Checkpoints/libero/20260826_133008+libero_sft_full_batch256/config.yaml
ls results/Checkpoints/libero/20260826_133008+libero_sft_full_batch256/dataset_statistics.json
ls latent_action_model/logs/dino_large_vae/lam_release/checkpoints/pytorch_model.pt
ls latent_action_model/logs/dino_large_vae/lam_release/dino_large_vae.yaml
ls weights/dinov3-vitb16-pretrain-lvd1689m/model.safetensors
7개가 모두 나와야 합니다. 추가로 LAM YAML이 로컬 DINOv3를 가리키는지 확인하세요:
grep vision_model_id latent_action_model/logs/dino_large_vae/lam_release/dino_large_vae.yaml
# 기대 출력: vision_model_id: weights/dinov3-vitb16-pretrain-lvd1689m
다른 값이 나오면 (HF model id나 절대경로) 이 패키지의 dino_large_vae.yaml을
다시 덮어쓰거나, 해당 줄을 위 값으로 직접 수정하세요.
정책 서버와 시뮬레이터는 환경을 분리해서 씁니다.
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git ../LIBERO
conda create -n libero python=3.10 -y
conda activate libero
# LIBERO 공식 문서에 따라 설치한 뒤:
pip install mujoco==3.3.2
mujoco==3.3.2는 이 repo가 사용하는 버전이라 반드시 맞춰야 합니다.
cd /path/to/LaWAM
conda activate lawam
export CKPT_PATH=results/Checkpoints/libero/20260826_133008+libero_sft_full_batch256/final_model/pytorch_model.pt
export LIBERO_HOME=/path/to/LIBERO
export LIBERO_PYTHON=/path/to/miniconda3/envs/libero/bin/python
export STAR_VLA_PYTHON="$(which python)"
SUITES="libero_10 libero_goal libero_object libero_spatial" \
NUM_TRIALS_PER_TASK=50 \
NUM_WORKERS=4 \
GPU_IDS="0 1 2 3" \
OUTPUT_ROOT=results/eval_runs/libero \
LIBERO_CKPT_ALIAS=lawam_libero_sft_20260826 \
bash examples/LIBERO/eval_files/auto_eval_scripts/run_libero_benchmark.sh "$CKPT_PATH"
LIBERO_PYTHON과 STAR_VLA_PYTHON은 실행 가능한 python 바이너리 절대경로여야 합니다.
스크립트가 -x 체크를 하고 아니면 바로 종료합니다.
| 변수 | 기본값 | 설명 |
|---|---|---|
SUITES | 4개 suite 전부 | libero_10 / libero_goal / libero_object / libero_spatial |
NUM_TRIALS_PER_TASK | 50 | task별 롤아웃 횟수 |
NUM_WORKERS | 25 | 병렬 워커 수 (GPU 메모리에 맞춰 조절) |
GPU_IDS | 자동 감지 | 정책 서버용 GPU. 공백 또는 콤마 구분 |
MAX_TASKS | 없음 | 스모크 테스트용 task 수 제한 |
SAVE_VIDEOS | False | 롤아웃 비디오 저장 |
EVAL_ACTION_CHUNK_LEN | 없음 | 액션 청크 사용 길이 제한 |
LIBERO_CKPT_ALIAS | 경로에서 자동 추론 | 결과 디렉토리 이름 |
results/eval_runs/libero/<ckpt_alias>/<run_tag>/
run_meta.json
suites/<suite_name>/eval.log
전체 4-suite × 50 trial은 오래 걸립니다. 배치가 제대로 됐는지부터 확인하세요.
SUITES="libero_10" NUM_TRIALS_PER_TASK=2 MAX_TASKS=2 NUM_WORKERS=2 GPU_IDS="0" \
bash examples/LIBERO/eval_files/auto_eval_scripts/run_libero_benchmark.sh "$CKPT_PATH"
정책 서버는 다음 순서로 모델을 조립합니다.
deployment/model_server/server_policy.py:33 baseframework.from_pretrained(ckpt)
└─ starVLA/model/tools.py:227 read_mode_config()
│ → config.yaml + dataset_statistics.json
└─ base_framework.py:177 build_framework(cfg)
└─ vlas/lawam.py:262 _load_vlm_and_processor()
│ └─ vlas/vlm_auto.py:108 AutoProcessor.from_pretrained(base_vlm)
│ └─ vlas/vlm_auto.py:116+ Qwen3VL...from_pretrained(base_vlm)
└─ vlas/lawam.py:267 load_latent_action_model(lam_ckpt, lam_yaml)
└─ lam_model.py:573 yaml → LatentLAMModel(**cfg)
│ └─ vjepa_encoder.py:302 AutoModel.from_pretrained(dinov3)
└─ lam_model.py:588 torch.load(lam_ckpt)
└─ base_framework.py:204 load_state_dict(SFT 가중치) ← 마지막
핵심은 load_state_dict가 맨 마지막이라는 점입니다. SFT 체크포인트가 VLM/LAM/DINOv3
가중치를 전부 덮어쓰지만, 그 전에 모델을 "조립"해야 하고 조립 재료는 아래 4곳에 흩어져 있습니다.
즉 가중치가 덮어써질 파일들도 물리적으로 존재해야 합니다.
| 파일 | 성격 | 없거나 틀리면 |
|---|---|---|
config.yaml | 모듈 트리 설계도(num_layers: 16, hidden_dim: 1024, num_action_queries: 8 …) + 추론 파라미터(horizon_sec: 0.4, action_horizon: 50, num_inference_steps: 10) | assert 실패, 또는 텐서 shape mismatch. stage2 config(horizon_sec: 1.2)를 잘못 쓰면 액션 청크 길이 mismatch 에러 |
dataset_statistics.json | 액션 역정규화 테이블. 모델은 [-1,1] 정규화 액션을 출력하고, franka 키의 q01/q99(또는 min/max)로 실제 제어값으로 되돌림. proprio state는 반대로 정규화해서 입력 | assert 실패. 또는 로드는 성공하는데 성공률만 0에 수렴 — 가장 조용하게 실패하는 지점 |
qwen3_weights/ | (a) 프로세서/토크나이저/채팅 템플릿은 .pt에 없고 이 디렉토리에만 있음 (b) config.json의 model_type으로 로더 클래스를 결정하고, <ACT_PH> 토큰 추가 후 임베딩 행 수를 맞춤 | from_pretrained 실패, 또는 embedding shape mismatch |
lam_release/ | lawam.py:267에서 분기 없이 무조건 로드됨. 추론에 latent world model이 필요 없어도 우회 경로가 없음. 키 검증이 strict라 missing/unexpected/shape mismatch가 하나라도 있으면 예외 | torch.load 실패 또는 키 예외 |
dinov3-.../ | LAM 인코더의 frozen 비전 백본. hidden_size로 feature_dim을 결정하므로 config만으로는 안 되고 가중치 파일까지 실제로 읽음 | LAM 생성 중 실패 |
공개된 원본을 재배포하지 않으려고 제외했습니다. 2-3 단계에서 반드시 받아야 합니다.
| 항목 | 받는 곳 | 용량 |
|---|---|---|
results/Checkpoints/qwen3_weights | Qwen/Qwen3-VL-2B-Instruct | 4.0GB |
weights/dinov3-vitb16-pretrain-lvd1689m | facebook/dinov3-vitb16-pretrain-lvd1689m | 327MB |
lam_release/checkpoints/pytorch_model.pt | jialei02/lawam_lam | 2.8GB |
| 항목 | 이유 |
|---|---|
dataset/lerobot (LIBERO SFT 학습 데이터) | 벤치마크는 시뮬레이터에서 롤아웃하므로 불필요. 정규화 통계는 dataset_statistics.json에 이미 포함 |
checkpoints/steps_25000_pytorch_model.pt | final_model/pytorch_model.pt와 동일 내용 (마지막 save = 25000 step). 6.7GB 중복 제거 |
results/Checkpoints/pretrain/lawam_pretrain | stage2 초기화용. 추가 SFT를 할 때만 필요 |
logs/, wandb/ | 학습 기록. 실행에 무관 |
추가 SFT/재학습까지 하려는 경우에만 원본 서버에서
results/Checkpoints/pretrain/lawam_pretrain (stage2 체크포인트)과
dataset/lerobot (학습 데이터)을 별도로 받아야 합니다.
| 증상 | 원인 |
|---|---|
Missing 'config.yaml' for <run_dir> | .pt만 옮겼거나 final_model/ 계층을 없앰 → <run_dir>/final_model/pytorch_model.pt 구조 복원 |
Missing 'dataset_statistics.json' | 위와 동일 |
from_pretrained 관련 실패 | 2-3 다운로드 누락. results/Checkpoints/qwen3_weights가 repo root 기준 그 경로에 없음 |
Failed to load LAM weights: Missing keys... | LAM 체크포인트/yaml 쌍이 안 맞음. jialei02/lawam_lam 체크포인트 + 이 패키지의 dino_large_vae.yaml 조합을 사용 |
| LAM 생성 중 DINOv3 관련 실패 | weights/dinov3-vitb16-pretrain-lvd1689m 누락, 또는 dino_large_vae.yaml의 vision_model_id가 다른 값 |
Inference action chunk length mismatch | config.yaml의 horizon_sec/action_horizon이 이 SFT run 값(0.4 / 50)과 다름 |
LIBERO_PYTHON is not executable | python 바이너리 절대경로가 아님 |
| 로드는 되는데 성공률이 0 | dataset_statistics.json이 다른 run 것일 가능성이 가장 높음 |