# LeRobot 训练的硬件计算指南

训练 LeRobot 策略的大致规模估算：每种策略所需的 VRAM 量、训练时长大概是多少，以及在本地硬件不足时应该在哪里运行。

以下数字仅为**参考值**——用于选择硬件的数量级估算，而非精确预测。吞吐量在很大程度上取决于数据集 I/O、图像分辨率、批处理大小以及 GPU 数量。

## 按策略组划分的内存

策略按骨干网络大小进行聚类；以下分组为每个组提供单一的 VRAM 上限，而非为每个策略重复列出数值。内存大致随批处理大小线性扩展；AdamW（LeRobot 的默认优化器）携带的优化器状态会在仅前向+反向传播的基础上额外增加约 30–100% 的内存开销。

| 组      | 策略                                    | 峰值 VRAM（BS 8，AdamW） | 适合入门的 GPU             |
| ---------- | ------------------------------------------- | ----------------------: | --------------------------------- |
| Light BC   | `act`, `vqbet`, `tdmpc`                     |                  ~2–6GB | 笔记本电脑 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 个 epoch** 即可收敛，而非数十万个原始训练步。一旦确定了 epoch 数量，实际耗时基本上为：

```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
```

单步耗时取决于策略和 GPU。下表中的数值为参考基准——请选择与您配置最接近的一行，并根据 `total_steps` 进行线性缩放，以适配更长或更短的训练时长。

### 常见场景

在 **约 50 个 episode 的数据集（约 45k 帧，30 fps × 30 秒）上训练 5 个 epoch** 的大致实际耗时，使用默认优化器（AdamW），图像分辨率为 640×480：

| 设置                                | 策略         | Batch | 实际时间 |
| ------------------------------------ | -------------- | ----- | ---------: |
| 单张 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 |

这些是数量级估算值。实际运行时间会根据图像分辨率、数据集 I/O、dataloader 线程数以及具体的 GPU 型号而波动 ±50%。它们有助于建立“这次运行需要一小时还是一天？”的直觉，而非作为 SLA 使用。

### 多 GPU 至关重要

`accelerate launch --num_processes=N` 是缩短训练时间最简单的方法。每个优化器步骤在大约与单 GPU 步骤相同的墙钟时间内处理 `N × batch_size` 个样本，因此对于计算密集型任务，4 个 GPU 约等于 4 倍加速。完整的设置请参阅 [多 GPU 训练](./multi_gpu_training) 指南。

在 4×H100 80 GB 集群上的参考数据点（`accelerate launch --num_processes=4`），5000 步，batch 32，AdamW，数据集 [`imstevenpmwork/super_poulain_draft`](https://huggingface.co/datasets/imstevenpmwork/super_poulain_draft)（约 50 个 episode，约 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`，视觉编码器 + 专家模型已训练 |

训练日志将完整的迭代拆分为 `dataloading_s`（`next(dl_iter)`）、`preprocessing_s`（图像转换和策略流水线）以及 `update_s`（优化器更新）。`step_s` 涵盖以上三个阶段，并驱动 `samples_per_s`。上述基准测试早于该拆分，因此其 `dataloading_s` 包含了预处理。

### 调度和检查点

如果缩短了训练（例如在小数据集上训练 5k–10k 步），也请相应缩短学习率调度，使用 `--policy.scheduler_decay_steps≈--steps`。否则学习率会一直保持在峰值附近，无法衰减。`--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) 允许您在托管的 HF 基础设施上运行训练，按秒计费，无需拥有 GPU。`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`（或任何其他有效的时长字符串）可以缩短或延长超时时间。命令执行完成后，任务会自动停止。
- 如需了解完整流程——包括数据集上传、检查点流式传输以及在任务上恢复运行——请参阅[模仿学习训练指南](./il_robots#train-using-hugging-face-jobs)。

