# Руководство по вычислительному оборудованию для обучения LeRobot

Оценка ресурсов для обучения политики LeRobot: сколько VRAM требуется каждой политике, каковы ожидаемые сроки обучения и где выполнять обучение, если локального оборудования недостаточно.

Приведённые ниже цифры носят **ориентировочный** характер — это оценки порядка величины для выбора оборудования, а не точные прогнозы. Пропускная способность сильно зависит от ввода-вывода данных, разрешения изображений, размера батча и количества GPU.

## Память по группе политик

Политики группируются по размеру базовой модели; приведённые ниже группировки задают единый объём VRAM для каждой группы, а не повторяют значения для каждой политики. Потребление памяти масштабируется примерно линейно с размером батча; AdamW (по умолчанию в LeRobot) хранит состояние оптимизатора, что добавляет ~30–100% к памяти, необходимой только для прямого и обратного проходов.

| Группа      | Политики                                    | Пиковое VRAM (BS 8, AdamW) | Подходящие стартовые GPU             |
| ---------- | ------------------------------------------- | ----------------------: | --------------------------------- |
| Light BC   | `act`, `vqbet`, `tdmpc`                     |                  ~2–6 ГБ | GPU ноутбука (RTX 3060), L4, A10G   |
| Диффузия  | `diffusion`, `multi_task_dit`               |                 ~8–14 ГБ | RTX 4070+ / L4 / A10G             |
| Маленький VLA  | `smolvla`                                   |                ~10–16 ГБ | RTX 4080+ / L4 / A10G             |
| Large VLA  | `pi0`, `pi0_fast`, `pi05`, `xvla`, `wall_x` |                ~24–40 ГБ | A100 40 ГБ+ (24 ГБ впритык при BS 1) |
| Мультимодальность | `groot`, `eo1`                              |                ~24–40 ГБ | A100 40 ГБ+                       |
| 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
```

Время на шаг зависит от политики и GPU. Значения в таблице ниже являются ориентирами — выберите строку, наиболее близкую к вашей конфигурации, и масштабируйте линейно по `total_steps`, если вы обучаете дольше или короче.

### Частые сценарии

Ориентировочное время выполнения в реальном времени для **5 эпох на наборе данных из ~50 эпизодов (~45k кадров при 30 fps × 30 с)**, оптимизатор по умолчанию (AdamW), изображения 640×480:

| Настройка                                | Политика         | Пакет | Реальное время |
| ------------------------------------ | -------------- | ----- | ---------: |
| Одна RTX 4090 / RTX 3090 (24 ГБ)   | `act`          | 8     |  ~30–60 мин |
| Одна RTX 4090 / RTX 3090 (24 ГБ)   | `diffusion`    | 8     |      ~2–4h |
| Один L4 / A10G (24 ГБ)             | `act`          | 8     |      ~1–2h |
| Один L4 / A10G (24 ГБ)             | `smolvla`      | 4     |      ~3–6h |
| Один A100 40 ГБ                    | `smolvla`      | 16    |      ~1–2h |
| Один A100 40 ГБ                    | `pi0` / `pi05` | 4     |      ~4–8h |
| Кластер 4× H100 80 ГБ (`accelerate`) | `diffusion`    | 32    |  ~30–60 мин |
| Кластер 4× H100 80 ГБ (`accelerate`) | `smolvla`      | 32    |      ~1–2h |
| Apple Silicon M1/M2/M3 Max (MPS)     | `act`          | 4     |     ~6–14h |

Это оценки порядка величины. Реальные значения отклоняются на ±50% в зависимости от разрешения изображений, ввода-вывода данных, потоков загрузки данных и конкретной модели GPU. Эти цифры полезны для интуитивной оценки «займёт ли этот прогон час или день», но не являются гарантиями уровня обслуживания (SLA).

### Многопроцессорность имеет большое значение

`accelerate launch --num_processes=N` — самый простой способ сократить время обучения. Каждый шаг оптимизатора обрабатывает `N × batch_size` примеров примерно за то же время, что и один шаг на одном GPU, поэтому 4 GPU ≈ 4-кратное ускорение для вычислительно-ограниченных задач. См. руководство [Обучение на нескольких GPU](./multi_gpu_training) для полной настройки.

Точки данных для справки на кластере 4×H100 80 ГБ (`accelerate launch --num_processes=4`), 5000 шагов, batch 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`, обучены vision encoder и expert |

Журналы обучения разделяют полную итерацию на `dataloading_s` (`next(dl_iter)`), `preprocessing_s` (конвертацию изображений и конвейер политики) и `update_s` (обновление оптимизатора). `step_s` охватывает все три этапа и определяет `samples_per_s`. Приведённый выше бенчмарк был создан до этого разделения, поэтому его `dataloading_s` включает предобработку.

### График и контрольные точки

Если вы сокращаете обучение (например, 5k–10k шагов на небольшом наборе данных), также сократите расписание LR с помощью `--policy.scheduler_decay_steps≈--steps`. В противном случае LR останется на пиковом уровне и не будет снижаться. То же самое касается `--save_freq`.

## Где запускать

VRAM — это первый фильтр. В пределах одного уровня выбирайте в зависимости от бюджета и доступности — столбцы `$`–`$$$$` являются относительными; проверяйте актуальные цены на том провайдере, которым вы действительно пользуетесь.

| Класс                      | VRAM  | Уровень   | Комфортно для                                             |
| -------------------------- | ----- | ------ | ----------------------------------------------------------- |
| RTX 3090 / 4090 (потребительские) | 24 ГБ | `$`    | Light BC, Diffusion, SmolVLA. Тесно для VLAs при batch 1.    |
| L4 / A10G (облако)          | 24 ГБ | `$–$$` | Та же самая обвязка; часто встречается на Google Cloud, RunPod, AWS `g5/g6`. |
| A100 40 ГБ                 | 40 ГБ | `$$$`  | Любая политика при разумных размерах батчей.                       |
| A100 80 ГБ / H100 80 ГБ    | 80 ГБ | `$$$$` | Кластеры с несколькими GPU; большие батчи для VLAs.                 |
| **Только CPU**               | —     | —      | Не обучайте. Используйте Colab или арендуйте GPU.                       |

### Hugging Face Jobs

С помощью [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 ГБ), `a10g-small/large/largex2/largex4` (A10G 24 ГБ с горизонтальным масштабированием), `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).

