SmolVLA 模型微调
SmolVLA(Small Vision-Language-Action)是 Hugging Face 的轻量 VLA 模型(约 450M 参数) 。若你想在单卡/消费级 GPU 上先把「数据 → 训练 → 推理」跑通,SmolVLA 是较省心的起点。
本指南覆盖三部分:
- 准备 LeRobot 格式数据(本地或 Hub)
- 启动微调(单卡/多卡/省显存)
- 用训练结果做最小推理验证
先决条件
系统要求
- 操作系统:Linux(推荐 Ubuntu 20.04+)或 macOS
- Python 版本:建议 3.10+(与 LeRobot 常用依赖更匹配)
- GPU:NVIDIA GPU(推荐 RTX 3080 或更高),至少 8GB 显存
- 内存:至少 16GB RAM
- 存储空间:至少 50GB 可用空间
环境准备
1. 安装 LeRobot
# 克隆 LeRobot 仓库
git clone https://github.com/huggingface/lerobot.git
cd lerobot
# 创建虚拟环境(推荐 venv;如你偏好 conda 也可以)
python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
# 安装依赖(SmolVLA 相关依赖通常在 extras 中)
pip install -e ".[smolvla]"
1.1 数据版本与 tag 对应(务必一致)
数据集 codebase_version | 推荐 LeRobot 代码版本 |
|---|---|
v2.1 | v0.3.x |
v3.0 | v0.4+(含 v0.5.x) |
# 训练 v2.1 数据集前
git checkout v0.3.3
pip install -e ".[all]"
# 训练 v3.0 数据集前
git checkout v0.5.0
pip install -e ".[all]"
这里要注意:v2.1 / v3.0 是 LeRobotDataset 格式版本,v0.4.0 / v0.5.0 是 lerobot 代码库版本。截至 lerobot v0.5.0,新版数据格式仍然是 v3.0。
2. 安装额外依赖
# 安装 Flash Attention(可选:通常仅适用于 Linux + NVIDIA CUDA 环境;macOS/CPU 环境不适用)
pip install flash-attn --no-build-isolation
# 安装 Weights & Biases(用于实验跟踪;不用也完全没问题)
pip install wandb
提示
若暂不接入 W&B,可先不执行 wandb login,训练不受影响(命令行中把 --wandb.enable 关掉即可)。
数据准备
LeRobot 格式数据
SmolVLA 使用 LeRobot 数据集格式。目录名可能因导出方式略有差异,但核心是 meta/info.json、data/、videos/ 以及对应版本的 episode 元数据:
your_dataset/
├── meta/
│ ├── info.json
│ ├── tasks.jsonl
│ ├── episodes.jsonl # v2.1
│ └── episodes/ # v3.0
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet # v2.1
│ └── file-000.parquet # v3.0
└── videos/
└── ...
数据质量要求
根据 HuggingFace 的建议,SmolVLA 需要:
- 最少 25 个高质量 episode 才能获得良好性能
- 推荐 100+ episode 以获得最佳效果
- 每个 episode 应包含完整的任务执行过程
- 图像分辨率推荐 224x224 或 256x256
微调训练
基本训练命令
# 建议先把数据集“标识”和“路径”写清楚,后面命令就不容易写错
# - 本地数据集:DATASET_ID 建议写成 local/xxx,并提供 DATASET_ROOT
# - Hub 数据 集:DATASET_ID 写成 your-name/your-repo,同时移除 --dataset.root
DATASET_ID=local/mylerobot3
DATASET_ROOT=~/Downloads/mylerobot3
export CUDA_VISIBLE_DEVICES=0
# 启动 SmolVLA 微调
lerobot-train \
--policy.type smolvla \
--policy.pretrained_path lerobot/smolvla_base \
--dataset.repo_id ${DATASET_ID} \
--dataset.root ${DATASET_ROOT} \
--batch_size 64 \
--steps 20000 \
--output_dir outputs/train/smolvla_finetuned \
--job_name smolvla_finetuning \
--policy.device cuda \
--policy.optimizer_lr 1e-4 \
--policy.scheduler_warmup_steps 1000 \
--policy.push_to_hub false \
--save_checkpoint true \
--save_freq 5000 \
--wandb.enable true \
--wandb.project smolvla_finetuning
备注
若使用 Hub 数据集(如 your-name/your-repo),将 DATASET_ID 改为该值,并去掉 --dataset.root ...。