SmolVLA 高反光与透明物体抓取复现教程:方案总览与核心改造 · 第 6 阶段
基于双 奥比中光 相机、增强深度、B601-DM 主从臂和 SmolVLA,复现高反光桌面上透明瓶与香蕉模型的自主整理链路。
01 / DOCUMENTATION 内容概述
系列教程第 6/7 阶段:上传代码、数据和离线模型,完成训练环境校验、冒烟测试、正式训练与 checkpoint 检查。
02 / DOCUMENTATION 上传云端并训练 SmolVLA ☁️

03 / DOCUMENTATION 11.1 上传哪些内容?
建议上传:
-
当前修改版代码仓库。
-
合并后的完整数据集目录。
-
smolvla_base本地模型目录。 -
SmolVLM2-500M-Video-Instruct本地目录。
云端不需要编译或运行 Orbbec C++ bridge,因为训练读取的是已经采好的数据。Jetson 上的 model.sm4 和相机许可也不需要上传到云端。
04 / DOCUMENTATION 11.2 复制仓库后一定重新安装 editable package
Conda 环境中的 editable install 保存绝对路径。把仓库直接复制到云端后,旧 lerobot-train 可能仍指向不存在的原机器目录。
cd /root/gpufree-data/reBotArm_SmolVLApython -m pip install -e ".[smolvla]"python -c 'import lerobot; print(lerobot.__file__)'训练脚本也会把当前仓库的 src 放到 PYTHONPATH,并使用 python -m lerobot.scripts.lerobot_train,进一步避免调用旧入口。
05 / DOCUMENTATION 11.3 离线下载模型时,仓库 ID 使用正斜杠
Windows 下错误示例:
lerobotsmolvla_baseHugging Face repo id 不是文件路径,正确命令是:
hf download lerobot/smolvla_base --local-dir models/smolvla_base
hf download HuggingFaceTB/SmolVLM2-500M-Video-Instruct --local-dir models/SmolVLM2-500M-Video-Instruct --exclude "onnx/*"仅上传 smolvla_base 还不够。SmolVLA 在构造 VLM 和 tokenizer 时仍需要 SmolVLM2 的 config/processor/tokenizer。当前 factory 会把本地 vlm_model_name 同步覆盖给 tokenizer,避免离线训练时偷偷访问 Hugging Face Hub。
06 / DOCUMENTATION 11.4 云端建议先做 2-step 冒烟测试
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh --dataset-root /root/gpufree-data/datasets/rebot_b601_banana_bottle_rgbd_merged --repo-id local/rebot_b601_banana_bottle_rgbd_merged --policy-path /root/gpufree-data/models/smolvla_base --vlm-path /root/gpufree-data/models/SmolVLM2-500M-Video-Instruct --output-dir /root/gpufree-data/outputs/rebot_smolvla_smoke --batch-size 2 --steps 2 --save-freq 2 --num-workers 0启动日志必须显示:
observation.state (21,)observation.images.wrist (3, 480, 640)observation.images.top (3, 480, 640)observation.images.top_depth (3, 480, 640)action (7,)如果仍是 camera1/camera2/camera3 和 6 维 action,立刻停止。那说明基础 checkpoint 的通用 embodiment feature 没有正确绑定到 B601 数据集。
冒烟测试前还应随机抽查若干 observation.images.top_depth:透明瓶区域不应在所有帧中完全等同于桌面,桌面高光附近也不应持续整片黑屏;同时确认增强深度与 top RGB 没有明显空间错位。训练能够启动只证明 schema 正确,不证明视觉数据有效。
短冒烟测试 GPU 只有约 50% 利用率很正常:两步训练包含加载、预处理和收尾,不能代表稳定吞吐,也不能据此直接把 batch 拉到极端。
07 / DOCUMENTATION 11.5 RTX 4090 24GB 正式训练参数
本项目成功完成的配置:
RUN_TAG="$(date +%Y%m%d_%H%M%S)"OUTPUT_DIR="/root/gpufree-data/outputs/rebot_smolvla_b601_${RUN_TAG}"
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh --dataset-root /root/gpufree-data/datasets/rebot_b601_banana_bottle_rgbd_merged --repo-id local/rebot_b601_banana_bottle_rgbd_merged --policy-path /root/gpufree-data/models/smolvla_base --vlm-path /root/gpufree-data/models/SmolVLM2-500M-Video-Instruct --output-dir "${OUTPUT_DIR}" --batch-size 12 --num-workers 8 --steps 14000 --save-freq 3500 --log-freq 100 --optimizer-lr 1e-4 --scheduler-warmup-steps 700 --scheduler-decay-steps 14000 --use-amp true训练策略:
freeze_vision_encoder = truetrain_expert_only = truen_action_steps = 1008 / DOCUMENTATION 11.6 记录 GPU 状态
可以另开终端:
mkdir -p /root/gpufree-data/diag
nvidia-smi --query-gpu=timestamp,index,name,temperature.gpu,utilization.gpu,utilization.memory,memory.used,memory.total,power.draw --format=csv -l 1 | tee /root/gpufree-data/diag/gpu_train.csv训练日志同时保存:
bash examples/rebot_b601_smolvla_record/train_smolvla_local.sh ... 2>&1 | tee /root/gpufree-data/diag/train.log09 / DOCUMENTATION 11.7 训练结果怎么看?
| 指标 | 结果 |
|---|---|
| 数据量 | 43 episodes,18,392 frames,10 FPS |
| Batch size | 12 |
| Steps | 14,000 |
| 数据集等效周期 | 约 9.13 epochs |
| 可训练参数 | 约 100M |
| 总参数 | 约 450M |
| Loss | 0.362 → 0.016 |
| Gradient norm | 2.735 → 0.216,无爆炸或 NaN |
| Checkpoints | 3,500 / 7,000 / 10,500 / 14,000 |
| 总耗时 | 85 分 55 秒 |
上面的是我一次稳定收敛的训练,但不是“实机已经成功”的证明。训练没有独立验证环境,而且 10,500 step 后 loss 已在 0.016-0.017 附近平台化。模型可能只是更熟练地拟合常见摆放,却仍会在“透明瓶与桌面高光重叠”时失败。最终必须比较 7,000、10,500 和 14,000 三个检查点在分层实机测试中的任务成功率。
硬件
软件应用和在线服务
实现步骤
上传训练资料
将修改版代码、合并数据集、smolvla_base 与 SmolVLM2 本地目录上传到云端

重新安装 editable package
在云端仓库目录重新安装,避免入口仍指向本地旧绝对路径
核对离线模型 ID
使用正斜杠仓库 ID,并确认 tokenizer、processor 和模型文件齐全
执行 2-step 冒烟测试
用最小训练步数验证数据加载、模型前向、反向、保存和日志链路
配置 RTX 4090 正式训练
设置 batch、梯度累积、训练步数、保存频率、数据键和输出目录
监控 GPU 与训练日志
检查显存、利用率、loss、吞吐、NaN、数据等待和 checkpoint 写入
比较训练检查点
保留并比较 7000、10500 与 14000 step,不只根据训练 loss 选择模型
项目结果

在 RTX 4090 上完成 SmolVLA 训练并生成多个可部署 checkpoint。一次稳定训练的 loss 在约 0.016-0.017 附近平台化,但没有独立验证环境,因此训练收敛不能替代分层实机成功率测试。