跳转至

多卡训练

⚡ 多卡训练仅在启动方式上不同于单卡:使用 torchrun 启动同一套 lerobot-train 参数。

0. 通用前置

lerobot-env
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1

1. ACT

torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --policy.type=act \
  --policy.push_to_hub=false \
  --output_dir=outputs/训练好的模型名字 \
  --batch_size=每个训练步的批次大小 \
  --steps=总训练步数 \
  --log_freq=每隔多少步输出一次日志 \
  --save_freq=每隔多少步保存一次

2. SmolVLA

torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --dataset.video_backend=pyav \
  --policy.path=lerobot/smolvla_base \
  --policy.type=smolvla \
  --batch_size=每个训练步的批次大小 \
  --steps=总训练步数 \
  --output_dir=outputs/训练好的模型名字 \
  --wandb.enable=false \
  --log_freq=每隔多少步输出一次日志 \
  --save_freq=每隔多少步保存一次

3. Pi0

torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --dataset.video_backend=pyav \
  --policy.type=pi0 \
  --policy.pretrained_path=lerobot/pi0_base \
  --policy.dtype=bfloat16 \
  --policy.gradient_checkpointing=false \
  --batch_size=每个训练步的批次大小 \
  --steps=总训练步数 \
  --output_dir=outputs/训练好的模型名字 \
  --wandb.enable=false \
  --log_freq=每隔多少步输出一次日志 \
  --save_freq=每隔多少步保存一次

4. Pi0.5

torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --dataset.video_backend=pyav \
  --policy.type=pi05 \
  --policy.pretrained_path=lerobot/pi05_base \
  --policy.dtype=bfloat16 \
  --policy.gradient_checkpointing=true \
  --policy.compile_model=true \
  --policy.freeze_vision_encoder=false \
  --policy.train_expert_only=false \
  --policy.device=cuda \
  --batch_size=每个训练步的批次大小 \
  --steps=总训练步数 \
  --output_dir=outputs/训练好的模型名字 \
  --wandb.enable=false \
  --log_freq=每隔多少步输出一次日志 \
  --save_freq=每隔多少步保存一次

5. XVLA

torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --dataset.video_backend=pyav \
  --job_name=xvla_openarmx \
  --policy.path=lerobot/xvla-base \
  --policy.dtype=bfloat16 \
  --policy.action_mode=auto \
  --policy.device=cuda \
  --policy.freeze_vision_encoder=false \
  --policy.freeze_language_encoder=false \
  --policy.train_policy_transformer=true \
  --policy.train_soft_prompts=true \
  --policy.push_to_hub=false \
  --policy.empty_cameras=0 \
  --policy.num_image_views=3 \
  --rename_map='{"observation.images.cam_head": "observation.images.image", "observation.images.cam_right": "observation.images.image2", "observation.images.cam_left": "observation.images.image3"}' \
  --batch_size=每个训练步的批次大小 \
  --steps=总训练步数 \
  --output_dir=outputs/训练好的模型名字 \
  --wandb.enable=false \
  --log_freq=每隔多少步输出一次日志 \
  --save_freq=每隔多少步保存一次

🔧 多卡实操建议

  • --nproc_per_node 设置为可用 GPU 数
  • 总 batch 通常按 单卡batch × GPU数 计算,必要时按学习率线性缩放
  • 初次启动先用短步数验证 DDP 正常,再跑全量
  • 如出现 NCCL 问题,先检查 CUDA/NCCL 驱动与网络设置