SmolVLA 模型微调
概述
SmolVLA(Small Vision-Language-Action)是由 HuggingFace 开发的轻量级视觉-语言-动作模型,专为机器人学习任务设计。该模型仅有 450M 参数,适合在消费级硬件上运行,是进行机器人学习研究和开发的理想选择。
先决条件
系统要求
- 操作系统:Linux(推荐 Ubuntu 20.04+)或 macOS
 - Python 版本:3.8+
 - GPU:NVIDIA GPU(推荐 RTX 3080 或更高),至少 8GB 显存
 - 内存:至少 16GB RAM
 - 存储空间:至少 50GB 可用空间
 
环境准备
1. 安装 LeRobot
# 克隆 LeRobot 仓库
git clone https://github.com/huggingface/lerobot.git
cd lerobot
# 创建虚拟环境
conda create -n lerobot python=3.10
conda activate lerobot
# 安装依赖
pip install -e .
2. 安装额外依赖
# 安装 Flash Attention(可选,用于加速训练)
pip install flash-attn --no-build-isolation
# 安装 Weights & Biases(用于实验跟踪)
pip install wandb
wandb login
数据准备
LeRobot 格式数据
SmolVLA 需要使用 LeRobot 格式的数据集。确保你的数据集包含以下结构:
your_dataset/
├── data/
│   ├── chunk-001/
│   │   ├── observation.images.cam_high.png
│   │   ├── observation.images.cam_low.png
│   │   └── ...
│   └── chunk-002/
│       └── ...
├── meta.json
├── stats.safetensors
└── videos/
    ├── episode_000000.mp4
    └── ...
数据质量要求
根据 HuggingFace 的建议,SmolVLA 需要:
- 最少 25 个高质量 episode 才能获得良好性能
 - 推荐 100+ episode 以获得最佳效果
 - 每个 episode 应包含完整的任务执行过程
 - 图像分辨率推荐 224x224 或 256x256
 
微调训练
基本训练命令
# 设置环境变量
export HF_USER="io-ai-data"
export CUDA_VISIBLE_DEVICES=0
# 启动 SmolVLA 微调
lerobot-train \
  --policy.type smolvla \
  --policy.pretrained_path lerobot/smolvla_base \
  --dataset.repo_id ${HF_USER}/my_dataset \
  --dataset.root /data/lerobot_dataset \
  --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
高级训练配置
多 GPU 训练
# 使用 torchrun 进行多 GPU 训练
torchrun --nproc_per_node=2 --master_port=29500 \
  $(which lerobot-train) \
  --policy.type smolvla \
  --policy.pretrained_path lerobot/smolvla_base \
  --dataset.repo_id ${HF_USER}/my_dataset \
  --dataset.root /data/my_dataset \
  --batch_size 32 \
  --steps 20000 \
  --output_dir outputs/train/smolvla_finetuned \
  --job_name smolvla_multi_gpu \
  --policy.device cuda \
  --policy.optimizer_lr 1e-4 \
  --policy.push_to_hub false \
  --save_checkpoint true \
  --wandb.enable true
内存优化配置
# 针对显存较小的 GPU
lerobot-train \
  --policy.type smolvla \
  --policy.pretrained_path lerobot/smolvla_base \
  --dataset.repo_id ${HF_USER}/my_dataset \
  --batch_size 16 \
  --steps 30000 \
  --output_dir outputs/train/smolvla_finetuned \
  --job_name smolvla_memory_optimized \
  --policy.device cuda \
  --policy.optimizer_lr 5e-5 \
  --policy.use_amp true \
  --num_workers 2 \
  --policy.push_to_hub false \
  --save_checkpoint true \
  --wandb.enable true
参数详细说明
核心参数
| 参数 | 含义 | 推荐值 | 说明 | 
|---|---|---|---|
--policy.type | 策略类型 | smolvla | SmolVLA 模型类型 | 
--policy.pretrained_path | 预训练模型路径 | lerobot/smolvla_base | HuggingFace 上的官方预训练模型 | 
--dataset.repo_id | 数据集仓库 ID | ${HF_USER}/my_dataset | 你的 HuggingFace 数据集 | 
--dataset.root | 数据集存储位置 | /data/my_dataset | 指定从本地目录读取(可选) | 
--batch_size | 批处理大小 | 64 | 根据显存调整,RTX 3080 推荐 32-64 | 
--steps | 训练步数 | 20000 | 小数据集可减少到 10000 | 
--output_dir | 输出目录 | outputs/train/smolvla_finetuned | 模型保存路径 | 
--job_name | 任务名称 | smolvla_finetuning | 用于日志和实验跟踪(可选) | 
训练参数
| 参数 | 含义 | 推荐值 | 说明 | 
|---|---|---|---|
--policy.optimizer_lr | 学习率 | 1e-4 | 微调时可适当降低 | 
--policy.scheduler_warmup_steps | 预热步数 | 1000 | 学习率预热,稳定训练 | 
--policy.use_amp | 混合精度 | true | 节省显存,加速训练 | 
--policy.optimizer_grad_clip_norm | 梯度裁剪 | 1.0 | 防止梯度爆炸 | 
--num_workers | 数据加载线程数 | 4 | 根据CPU核心数调整 | 
--policy.push_to_hub | 推送到Hub | false | 是否上传模型到HuggingFace(需要repo_id) | 
--save_checkpoint | 保存检查点 | true | 是否保存训练检查点 | 
--save_freq | 保存频率 | 5000 | 检查点保存间隔步数 | 
模型特定参数
| 参数 | 含义 | 推荐值 | 说明 | 
|---|---|---|---|
--policy.vlm_model_name | VLM骨干模型 | HuggingFaceTB/SmolVLM2-500M-Video-Instruct | SmolVLA 使用的视觉语言模型 | 
--policy.chunk_size | 动作块大小 | 50 | 预测的动作序列长度 | 
--policy.n_action_steps | 执行动作步数 | 50 | 每次实际执行的动作数 | 
--policy.n_obs_steps | 观测历史步数 | 1 | 使用的历史观测帧数 | 
训练监控
Weights & Biases 集成
SmolVLA 支持 W&B 进行实验跟踪:
# 启用 W&B 日志记录
lerobot-train \
  --policy.type smolvla \
  --dataset.repo_id your-name/your-repo \
  --batch_size 64 \
  --steps 20000 \
  --policy.push_to_hub false \
  --wandb.enable true \
  --wandb.project smolvla_experiments \
  --wandb.notes "SmolVLA finetuning on custom dataset" \
  # ... 其他参数
关键指标监控
训练过程中需要关注的指标:
- Loss:总体损失,应该稳定下降
 - Action Loss:动作预测损失
 - Vision Loss