跳转至

多卡训练

多卡训练只在启动方式上与单卡不同:使用 torchrun 替换 lerobot-train,其余参数完全一致。


串行 vs 并行

方式 说明 优点 缺点
多卡串行(当前使用) 每张卡运行完整模型副本,通过梯度同步加速训练 无需额外配置,torchrun 直接启动 每张卡都需承受完整模型的显存压力
多卡并行 模型拆分到多张卡,各卡只承担部分显存 多卡显存叠加,适合超大模型 需用户自行配置模型并行策略,难度较大

当前文档只提供多卡串行方案。多卡并行有需求请参考 PyTorch 官方文档自行配置。


通用前置

每次训练前先激活对应模型的 conda 环境并设置离线模式:

# 以 ACT 为例,其他模型替换环境激活命令
lerobot-env
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1

1. ACT

lerobot-env
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
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=8 \
  --steps=50000 \
  --log_freq=100 \
  --save_freq=5000

示例(2 卡):

lerobot-env
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
torchrun --nproc_per_node=2 \
  $(which lerobot-train) \
  --dataset.repo_id=local/openarmx_dataset \
  --dataset.root=/home/user/.cache/huggingface/lerobot/local/openarmx_dataset \
  --policy.type=act \
  --policy.push_to_hub=false \
  --output_dir=outputs/act_openarmx \
  --batch_size=8 \
  --steps=50000 \
  --log_freq=100 \
  --save_freq=5000

2. SmolVLA

source ~/anaconda3/bin/activate lerobot-vla
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
torchrun --nproc_per_node=你的显卡数量 \
  $(which lerobot-train) \
  --dataset.repo_id=local/你的数据名称 \
  --dataset.root=你的数据绝对路径 \
  --dataset.video_backend=pyav \
  --policy.type=smolvla \
  --policy.path=lerobot/smolvla_base \
  --policy.push_to_hub=false \
  --output_dir=outputs/你的模型名称 \
  --batch_size=8 \
  --steps=50000 \
  --wandb.enable=false \
  --log_freq=100 \
  --save_freq=5000

3. Pi0

source ~/anaconda3/bin/activate lerobot-pi
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
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 \
  --policy.push_to_hub=false \
  --output_dir=outputs/你的模型名称 \
  --batch_size=4 \
  --steps=50000 \
  --wandb.enable=false \
  --log_freq=100 \
  --save_freq=5000

4. Pi0.5

Pi0.5 单卡显存需求约 40GB+,强烈建议多卡训练。

source ~/anaconda3/bin/activate lerobot-pi
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
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 \
  --policy.push_to_hub=false \
  --output_dir=outputs/你的模型名称 \
  --batch_size=2 \
  --steps=50000 \
  --wandb.enable=false \
  --log_freq=100 \
  --save_freq=5000

5. XVLA

source ~/anaconda3/bin/activate lerobot-vla
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
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"}' \
  --output_dir=outputs/你的模型名称 \
  --batch_size=4 \
  --steps=50000 \
  --wandb.enable=false \
  --log_freq=100 \
  --save_freq=5000

多卡实操建议

  • --nproc_per_node 设置为实际可用 GPU 数量
  • 多卡串行时,总 batch ≈ 单卡 batch × GPU 数,显存不足时先减小单卡 batch_size
  • 初次启动先用短步数(1000 步)验证多卡通信正常,再跑全量
  • 如出现 NCCL 报错,检查 CUDA / NCCL 驱动版本一致性,以及 GPU 是否在同一台物理机上