常见问题
为什么不把预处理放在 dataloader?
Section titled “为什么不把预处理放在 dataloader?”评测显示数据预处理耗时 <1%。将其放在 Framework 内能更灵活地处理模型特定逻辑,并避免在 dataloader 中引入假设。
可以使用除 Qwen2.5-VL 之外的骨干模型吗?
Section titled “可以使用除 Qwen2.5-VL 之外的骨干模型吗?”可以。实现新的视觉与语言模块并在 Framework 中组合即可。由于框架处理原始动作数据,替换骨干模型很直接。
为什么没有抽象的 vision tower 接口?
Section titled “为什么没有抽象的 vision tower 接口?”我们认为 VLM 将成为基础模型,并天然包含视觉塔,因此不需要额外抽象层。
可以通过命令行覆盖或新增参数吗?
Section titled “可以通过命令行覆盖或新增参数吗?”可以。StarVLA 使用 OmegaConf.load(args.config_yaml) 作为唯一配置入口,可通过 CLI 覆盖:
accelerate launch \ --config_file starVLA/config/deepseeds/deepspeed_zero2.yaml \ --num_processes 8 \ starVLA/training/train_starvla.py \ --config_yaml ./starVLA/config/training/starvla_cotrain_oxe.yaml \ --framework.qwenvl.base_vlm Qwen/Qwen2.5-VL-7B-Instruct \ --framework.action_model.new_module ${module_name}framework.action_model.new_module 只新增配置项,行为由框架实现决定。
可以通过参数冻结 VLM 吗?
Section titled “可以通过参数冻结 VLM 吗?”可以,使用模块路径列表:
--trainer.freeze_modules "qwen_vl_interface.model.model.visual,dino_encoder"提示:先 print(your_model) 获取模块路径。实现位于 TrainerUtils.freeze_backbones。
不同模块可以设置不同学习率吗?
Section titled “不同模块可以设置不同学习率吗?”可以,使用分组字典:
trainer: learning_rate: base: 1e-05 qwen_vl_interface: 1.0e-05 action_model: 1.0e-04参考实现:trainer_tools.build_param_lr_groups。
可以从 checkpoint 恢复训练吗?
Section titled “可以从 checkpoint 恢复训练吗?”可以。配置示例:
trainer: pretrained_checkpoint: path_to_steps_10000.pt reload_modules: "action_model"reload_modules 为空则完整加载。StarVLA 基于 Accelerator 的 checkpoint 机制,完整保存并恢复 optimizer state、学习率调度器等训练状态,因此恢复训练后可以无缝继续。
使用更小 VLM 训练
Section titled “使用更小 VLM 训练”以 Florence-2 为例:
accelerate launch \ --config_file starVLA/config/deepseeds/deepspeed_zero2.yaml \ --main_process_ip $MASTER_ADDR \ --main_process_port $MASTER_PORT \ --machine_rank $SLURM_PROCID \ --num_machines $SLURM_NNODES \ --num_processes=${TOTAL_GPUS} \ starVLA/training/train_starvla.py \ --config_yaml ./starVLA/config/training/starvla_cotrain_oxe.yaml \ --framework.name QwenGR00T \ --framework.qwenvl.base_vlm microsoft/Florence-2-large \ --run_root_dir ${run_root_dir} \ --run_id ${run_id} \ --wandb_project your_project \ --wandb_entity your_name说明:为保证兼容已发布检查点,暂时继续使用 --framework.qwenvl,后续版本会统一。
我只有 1 张 GPU 能训练吗?
Section titled “我只有 1 张 GPU 能训练吗?”可以。将 --num_processes 设为 1,并适当减小 per_device_batch_size(如设为 1-2)和增大 gradient_accumulation_steps 来补偿。单卡训练速度会慢很多,但功能上完全可行。建议从较小的模型(如 Qwen2.5-VL-3B)开始。
训练大概需要多久?
Section titled “训练大概需要多久?”取决于数据集大小、GPU 数量和模型规模。作为参考:
- 8×A800 + Qwen2.5-VL-3B + Bridge 数据集:约 10-20 小时训练 50k 步。
- 1×RTX 4090 + Qwen2.5-VL-3B + 小数据集:可能需要数天。
建议先用 is_debug: true 跑几百步验证流程正确,再进行正式训练。
怎么监控训练过程?
Section titled “怎么监控训练过程?”StarVLA 支持两种日志方式(在 YAML 配置的 trackers 字段中指定):
- jsonl:训练日志以 JSON Lines 格式保存在 checkpoint 目录下的
log.jsonl文件中,可以用脚本解析绘图。 - wandb:实时在线监控。需要在配置中填写
wandb_entity和wandb_project,训练开始后会自动上传 loss 曲线、学习率等指标到 wandb.ai。
推荐同时启用两者:trackers: [jsonl, wandb]。