# SmolVLA

SmolVLA 是 Hugging Face 推出的轻量级机器人基础模型。它专为在 LeRobot 数据集上进行便捷的微调而设计，助力加速您的开发进程！

  <img
    src="https://cdn-uploads.huggingface.co/production/uploads/640e21ef3c82bd463ee5a76d/aooU0a3DMtYmy_1IWMaIM.png"
    alt="SmolVLA architecture."
    width="500"
  />
  
  
    图 1。SmolVLA 的输入包括 (i) 多个摄像头视角，(ii) 机器人当前的感觉运动状态，以及 (iii) 自然语言指令。这些输入被编码为上下文特征，用于在生成动作块时条件化动作专家。
  

## 设置您的环境

1. 按照我们的[安装指南](./installation)安装 LeRobot。
2. 运行以下命令安装 SmolVLA 依赖项：

   ```bash
   pip install -e ".[smolvla]"
   ```

## 收集数据集

SmolVLA 是一个基础模型，因此需要在您自己的数据上进行微调，才能在您的环境中获得最佳性能。我们建议从录制约 50 个任务片段开始。请按照我们的指南开始操作：[录制数据集](./il_robots)

在您的数据集中，请确保为引入的每种变化（例如，在方块拾取-放置任务中，方块在桌面上的位置）都提供足够的演示。

我们建议参考 [SmolVLA 论文](https://huggingface.co/papers/2506.01844) 中使用的数据集，链接如下：

🔗 [SVLA SO100 PickPlace](https://huggingface.co/spaces/lerobot/visualize_dataset?path=%2Flerobot%2Fsvla_so100_pickplace%2Fepisode_0)

在该数据集中，我们记录了 50 个 episode，涵盖 5 个不同的立方体位置。对于每个位置，我们收集了 10 个 pick-and-place 交互的 episode。这种将每种变化重复多次的结构有助于模型更好地泛化。我们尝试了类似的包含 25 个 episode 的数据集，但数量不足，导致性能不佳。因此，数据的质量和数量绝对是关键。当您的数据集在 Hub 上可用后，您就可以使用我们的微调脚本将 SmolVLA 适配到您的应用场景中。

## 使用您的数据微调 SmolVLA

使用 [`smolvla_base`](https://hf.co/lerobot/smolvla_base)，即我们预训练的 450M 模型，并在您的数据上进行微调。在单个 A100 GPU 上训练该模型 20k 步大约需要 4 小时。您应根据性能和具体用例调整训练步数。

如果没有 GPU 设备，您可以使用我们的 notebook 在 [![Google Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/huggingface/notebooks/blob/main/lerobot/training-smolvla.ipynb) 上进行训练

使用 `--dataset.repo_id` 将数据集传递给训练脚本。如果您想测试安装，请运行以下命令，其中我们使用了为 [SmolVLA Paper](https://huggingface.co/papers/2506.01844) 收集的数据集之一。请将其替换为您自己的数据集，以便在您的数据上进行微调。

```bash
lerobot-train \
  --policy.path=lerobot/smolvla_base \
  --dataset.repo_id=lerobot/svla_so100_pickplace \
  --policy.repo_id=${HF_USER}/my_smolvla \
  --rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
  --batch_size=64 \
  --steps=20000 \
  --output_dir=outputs/train/my_smolvla \
  --job_name=my_smolvla_training \
  --policy.device=cuda \
  --trackio.enable=true
```

- `--policy.repo_id` 是微调后的模型推送到的 Hub 仓库。
- `--rename_map` 将数据集的相机名称映射为 `smolvla_base` 所期望的 `camera1`、`camera2` 和 `camera3` 名称。如果不使用该参数，训练会因特征不匹配错误而停止。请以相同方式映射您自己的相机名称（参见 [重命名映射](./rename_map)）。

  您可以从较小的批次大小开始，如果 GPU 允许，并且加载时间仍然较短，则可以逐步增加批次大小。

微调是一门艺术。若要全面了解微调的各种选项，请运行

```bash
lerobot-train --help
```

  <img
    src="https://cdn-uploads.huggingface.co/production/uploads/640e21ef3c82bd463ee5a76d/S-3vvVCulChREwHDkquoc.gif"
    alt="Comparison of SmolVLA across task variations."
    width="500"
  />
  
  
    图 2：SmolVLA 在不同任务变体上的对比。从左到右依次为：(1) 拾取-放置方块计数，(2) 拾取-放置方块计数，(3) 在扰动条件下的拾取-放置方块计数，以及 (4) 在真实世界 SO101 上对乐高积木进行拾取-放置的泛化能力。
  

## 评估微调后的模型并实时运行

同样，在录制剧集时，建议您已登录 HuggingFace Hub。您可以按照相应的步骤操作：[录制数据集](./il_robots#record-a-dataset)。登录之后，您可以通过以下方式在您的环境中运行推理：

```bash
lerobot-rollout \
  --strategy.type=base \
  --robot.type=so101_follower \
  --robot.port=/dev/ttyACM0 \
  --robot.id=my_blue_follower_arm \
  --robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}}" \
  --rename_map='{"observation.images.top": "observation.images.camera1", "observation.images.wrist": "observation.images.camera2"}' \
  --task="Grasp a lego block and put it in the bin." \
  --policy.path=${HF_USER}/FINETUNE_MODEL_NAME
```

将 `--robot.port`、`--robot.id`、`--robot.cameras` 和 `--policy.path` 替换为您自己的端口、机器人 ID、相机（与数据集中相同的相机名称和分辨率）以及微调后的模型。传入与训练时相同的 `--rename_map`，以及与数据集录制时相同的 `--task` 描述。

您可以向上述命令添加的可选标志：

- **RTC**（在推理速度较慢时实现更流畅的动作，例如在低功耗硬件上）：`--inference.type=rtc --inference.rtc.execution_horizon=10 --inference.rtc.max_guidance_weight=10.0`
- **查看摄像头流**：`--display_data=true`
- **自动停止**：`--duration=60`（以秒为单位）。默认情况下，策略会一直运行，直到你按下 Ctrl+C。

要记录评估回合，并可选使用遥操作者在回合之间重置场景，请改用 `--strategy.type=episodic`。有关所有策略，请参阅 [策略部署](./inference)。

