# LeRobot 학습용 Compute HW 가이드

LeRobot 정책 학습을 위한 대략적인 규모 설정: 각 정책에 필요한 VRAM 양, 예상 학습 시간, 그리고 로컬 하드웨어가 부족할 경우 어디에서 실행해야 하는지

아래의 수치는 **참고용**입니다. 하드웨어를 선택하기 위한 규모 수준의 수치이며, 정확한 예측 값이 아닙니다. 처리량은 데이터셋 I/O, 이미지 해상도, 배치 크기, GPU 수에 크게 의존합니다.

## 정책 그룹별 메모리

Policies는 backbone 크기로 그룹화됩니다. 아래 그룹화는 각 정책별로 수치를 반복하는 대신 그룹당 단일 VRAM 범위를 제공합니다. 메모리는 배치 크기에 따라 대략 선형적으로 증가하며, AdamW(LeRobot의 기본값)는 forward+backward pass만으로 발생하는 것보다 약 30–100% 더 많은 optimizer state를 포함합니다.

| 그룹      | 정책                                    | 피크 VRAM (BS 8, AdamW) | 적합한 입문용 GPU             |
| ---------- | ------------------------------------------- | ----------------------: | --------------------------------- |
| Light BC   | `act`, `vqbet`, `tdmpc`                     |                  ~2–6GB | Laptop GPU (RTX 3060), L4, A10G   |
| Diffusion  | `diffusion`, `multi_task_dit`               |                 ~8–14GB | RTX 4070+ / L4 / A10G             |
| 소형 VLA  | `smolvla`                                   |                ~10–16GB | RTX 4080+ / L4 / A10G             |
| 대형 VLA  | `pi0`, `pi0_fast`, `pi05`, `xvla`, `wall_x` |                ~24–40GB | A100 40 GB 이상 (24 GB는 BS 1에서 빠듯함) |
| 멀티모달 | `groot`, `eo1`                              |                ~24–40GB | A100 40 GB 이상                       |
| RL         | `sac`                                       |             config-dep. | [HIL-SERL 가이드](./hilserl)를 참조하세요.   |

메모리 병목이 발생합니까? 배치 크기를 줄이세요(대략 선형적으로), 유효 배치를 회복하기 위해 그라디언트 축적을 사용하거나, SmolVLA의 경우 `freeze_vision_encoder=True`를 유지하세요.

## 학습 시간

로보틱스 모방 학습은 일반적으로 수십만 개의 원시 스텝이 아니라 **데이터셋에 대해 5~10개의 에포크**에서 수렴합니다. 에포크 수를 알면 실제 소요 시간은 기본적으로 다음과 같습니다:

```text
total_frames    = sum of frames over all episodes      # 50 ep × 30 fps × 30 s ≈ 45,000
steps_per_epoch = ceil(total_frames / (num_gpus × batch_size))
total_steps     = epochs × steps_per_epoch
wall_clock      ≈ total_steps × per_step_time
```

Per-step time는 정책과 GPU에 따라 달라집니다. 아래 표의 수치는 기준점입니다. 사용 중인 환경에 가장 가까운 행을 선택하고, 학습 기간이 더 길거나 짧다면 `total_steps`에 따라 선형적으로 조정하세요.

### 일반적인 시나리오

**~50에피소드 데이터셋(~45k 프레임, 30 fps × 30 s)에서 5 epochs**에 걸리는 대략적인 실제 시간, 기본 옵티마이저(AdamW), 640×480 이미지:

| 설정                                | 정책         | 배치 | 실시간 |
| ------------------------------------ | -------------- | ----- | ---------: |
| 단일 RTX 4090 / RTX 3090 (24 GB)   | `act`          | 8     |  ~30–60분 |
| 단일 RTX 4090 / RTX 3090 (24 GB)   | `diffusion`    | 8     |      ~2–4h |
| 단일 L4 / A10G (24 GB)             | `act`          | 8     |      ~1–2h |
| 단일 L4 / A10G (24 GB)             | `smolvla`      | 4     |      ~3–6h |
| 단일 A100 40 GB                    | `smolvla`      | 16    |      ~1–2h |
| 단일 A100 40 GB                    | `pi0` / `pi05` | 4     |      ~4–8h |
| 4× H100 80 GB 클러스터(`accelerate`) | `diffusion`    | 32    |  ~30–60분 |
| 4× H100 80 GB 클러스터(`accelerate`) | `smolvla`      | 32    |      ~1–2h |
| Apple Silicon M1/M2/M3 Max (MPS)     | `act`          | 4     |     ~6–14h |

이것들은 대략적인 규모(order-of-magnitude) 수치입니다. 실제 실행은 이미지 해상도, 데이터셋 I/O, dataloader 스레딩, 정확한 GPU SKU에 따라 ±50% 범위 내에서 편차가 발생할 수 있습니다. 이들은 SLA가 아니라 "이번 실행이 1시간이 걸릴지 하루가 걸릴지"를 가늠하는 직관적 기준으로 유용합니다.

### 멀티 GPU는 매우 중요합니다

`accelerate launch --num_processes=N`은 학습 시간을 줄이는 가장 쉬운 방법입니다. 각 옵티마이저 스텝은 단일 GPU 스텝과 거의 동일한 실제 시간(wall-clock) 동안 `N × batch_size`개의 샘플을 처리하므로, 4개의 GPU를 사용하면 컴퓨트 바운드(compute-bound) 실행에서 약 4배의 속도 향상을 기대할 수 있습니다. 전체 설정 방법은 [Multi GPU training](./multi_gpu_training) 가이드를 참고하세요.

4×H100 80 GB 클러스터(`accelerate launch --num_processes=4`)의 기준 데이터 포인트, 5000 스텝, 배치 32, AdamW, 데이터셋 [`imstevenpmwork/super_poulain_draft`](https://huggingface.co/datasets/imstevenpmwork/super_poulain_draft)(약 50 에피소드, 약 640×480 이미지):

| 정책      | 실시간 | `update_s` | `dataloading_s` | GPU 사용률 | 주요 플래그                                                                                                                  |
| ----------- | ---------- | ---------: | --------------: | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `diffusion` | 16m 17s    |      0.167 |           0.015 | ~90%     | 기본값(처음부터 학습)                                                                                               |
| `smolvla`   | 27m 49s    |      0.312 |           0.011 | ~80%     | `--policy.path=lerobot/smolvla_base`, `freeze_vision_encoder=false`, `train_expert_only=false`                                 |
| `pi05`      | 3h 41m     |      2.548 |           0.014 | ~95%     | `--policy.pretrained_path=lerobot/pi05_base`, `gradient_checkpointing=true`, `dtype=bfloat16`, 비전 인코더 + 전문가 학습 |

Training logs는 전체 반복을 `dataloading_s` (`next(dl_iter)`), `preprocessing_s` (이미지 변환 및 정책 파이프라인), `update_s` (옵티마이저 업데이트)로 구분합니다. `step_s`는 이 세 가지를 모두 포함하며 `samples_per_s`를 결정합니다. 위의 벤치마크는 이러한 분할 이전의 것이므로, 해당 `dataloading_s`에는 전처리 과정이 포함됩니다.

### 스케줄 및 체크포인트

학습을 단축하는 경우(예: 작은 데이터셋에서 5k~10k 스텝)에도 `--policy.scheduler_decay_steps≈--steps`로 LR 스케줄을 함께 단축해야 합니다. 그렇지 않으면 LR이 피크 값 근처에 머물러 감소하지 않습니다. `--save_freq`도 마찬가지입니다.

## 실행 위치

VRAM가 첫 번째 필터입니다. 같은 등급 내에서 예산과 가용성에 따라 선택하세요. `$`~`$$$$` 열은 상대적인 값이므로, 실제로 사용하는 제공업체의 최신 가격을 확인하세요.

| 클래스                      | VRAM  | 티어   | …에 적합                                             |
| -------------------------- | ----- | ------ | ----------------------------------------------------------- |
| RTX 3090 / 4090 (소비자용) | 24 GB | `$`    | Light BC, Diffusion, SmolVLA. batch 1에서 VLA에 대해 다소 빠듯합니다.    |
| L4 / A10G (클라우드)          | 24 GB | `$–$$` | 같은 엔벨로프; Google Cloud, RunPod, AWS `g5/g6`에서 일반적입니다. |
| A100 40 GB                 | 40 GB | `$$$`  | 합리적인 배치 크기의 모든 정책.                       |
| A100 80 GB / H100 80 GB    | 80 GB | `$$$$` | 멀티-GPU 클러스터; VLA를 위한 대규모 배치.                 |
| **CPU 전용**               | —     | —      | 학습하지 마세요. Colab을 사용하거나 GPU를 대여하세요.                       |

### Hugging Face 채용

[Hugging Face Jobs](https://huggingface.co/docs/hub/jobs)는 GPU를 소유하지 않고도 관리형 HF 인프라에서 초당 과금 방식으로 학습을 실행할 수 있습니다. `lerobot-train`은 작업을 제출하고 스트리밍해 주며, 일반적인 학습 명령에 `--job.target=<flavor>`만 추가하면 됩니다:

```bash
lerobot-train \
  --policy.type=act --dataset.repo_id=<USER>/<DATASET> \
  --policy.repo_id=<USER>/act_<task> \
  --job.target=a10g-large
```

참고:

- 제출하기 전에 `hf auth login`을 한 번 실행하세요. 작업은 사용자의 토큰으로 실행됩니다.
- `--job.target`은 위의 표에 매핑됩니다: `t4-small`/`t4-medium` (T4, ACT 전용), `l4x1`/`l4x4` (L4 24 GB), `a10g-small/large/largex2/largex4` (A10G 24 GB 스케일 아웃), `a100-large` (A100). `hf jobs hardware`를 통해 현재 카탈로그와 가격을 확인하거나, [https://huggingface.co/docs/hub/jobs](https://huggingface.co/docs/hub/jobs)를 참조하세요.
- 작업은 기본적으로 `2d`(48시간) 타임아웃을 사용합니다. `--job.timeout=4h`(또는 기타 유효한 기간 문자열)을 사용하여 타임아웃을 단축하거나 연장할 수 있습니다. 명령이 완료되면 작업이 자동으로 중지됩니다.
- 데이터셋 업로드, 체크포인트 스트리밍, 작업에서 실행 재개에 대한 전체 가이드는 [imitation-learning 학습 가이드](./il_robots#train-using-hugging-face-jobs)를 참고하세요.

