LeRobot 文件
多 GPU 訓練
立即開始
教學課程
機器人模仿學習使用自備策略 (Bring Your Own Policies)使用自備硬體 (Bring Your Own Hardware)以增強學習訓練機器人在模擬環境中訓練增強學習多 GPU 訓練人機協作 (Human-in-the-Loop) 資料收集使用 PEFT(例如 LoRA)進行訓練使用 Rename Map 與空白相機
資料集 (Datasets)
策略
獎勵模型
推論
模擬
基準測試 (Benchmarks)
機器人處理器
機器人
遙控操作員
感測器
支援的硬體
資源
關於
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
多 GPU 訓練
本指南將說明如何使用 Hugging Face Accelerate 在多個 GPU 上訓練策略。
安裝
首先,請確保您已安裝 accelerate
pip install accelerate
使用多個 GPU 進行訓練
您可以透過兩種方式啟動訓練
選項 1:不使用配置檔(直接指定參數)
您無需執行 accelerate config,即可在指令中直接指定所有參數:
accelerate launch \
--multi_gpu \
--num_processes=2 \
$(which lerobot-train) \
--dataset.repo_id=${HF_USER}/my_dataset \
--policy.type=act \
--policy.repo_id=${HF_USER}/my_trained_policy \
--output_dir=outputs/train/act_multi_gpu \
--job_name=act_multi_gpu \
--wandb.enable=trueAccelerate 關鍵參數
--multi_gpu:啟用多 GPU 訓練--num_processes=2:要使用的 GPU 數量--mixed_precision=fp16:使用 fp16 混合精度(若支援,亦可使用bf16)
選項 2:使用 accelerate config
如果您偏好儲存配置,可以選擇執行以下指令,為您的硬體環境配置 accelerate:
accelerate config
此互動式設定將詢問有關您訓練環境的問題(GPU 數量、混合精度設定等),並將配置儲存以備日後使用。對於單機多 GPU 的簡單設定,您可以使用以下推薦設定:
- 運算環境:本機 (This machine)
- 機器數量:1
- 程序數量:(您想要使用的 GPU 數量)
- 要使用的 GPU ID:(留空以使用所有 GPU)
- 混合精度:fp16 或 bf16 (推薦用於更快的訓練)
然後透過以下指令啟動訓練:
accelerate launch $(which lerobot-train) \
--dataset.repo_id=${HF_USER}/my_dataset \
--policy.type=act \
--policy.repo_id=${HF_USER}/my_trained_policy \
--output_dir=outputs/train/act_multi_gpu \
--job_name=act_multi_gpu \
--wandb.enable=true運作原理
當您使用 accelerate 啟動訓練時:
- 自動偵測:LeRobot 會自動偵測是否正在 accelerate 下執行。
- 資料分佈:您的 Batch 會自動拆分到各個 GPU 上。
- 梯度同步:在反向傳播期間,梯度會在各個 GPU 間進行同步。
- 單一程序日誌:僅由主程序將日誌記錄至 wandb 並儲存檢查點 (checkpoint)。
學習率與訓練步數的縮放
重要:LeRobot 不會根據 GPU 數量自動縮放學習率或訓練步數。這讓您能完全掌控您的訓練超參數。
為什麼不自動縮放?
許多分散式訓練框架會自動按 GPU 數量縮放學習率(例如 lr = base_lr × num_gpus)。然而,LeRobot 始終保持您指定的學習率不變。
何時以及如何縮放
如果您在使用多個 GPU 時希望縮放超參數,則應手動執行。
學習率縮放
# Example: 2 GPUs with linear LR scaling
# Base LR: 1e-4, with 2 GPUs -> 2e-4
accelerate launch --num_processes=2 $(which lerobot-train) \
--optimizer.lr=2e-4 \
--dataset.repo_id=lerobot/pusht \
--policy=act訓練步數縮放
由於有效 Batch Size bs 會隨 GPU 數量增加(batch_size × num_gpus),您可能需要按比例減少訓練步數。
# Example: 2 GPUs with effective batch size 2x larger
# Original: batch_size=8, steps=100000
# With 2 GPUs: batch_size=8 (16 in total), steps=50000
accelerate launch --num_processes=2 $(which lerobot-train) \
--batch_size=8 \
--steps=50000 \
--dataset.repo_id=lerobot/pusht \
--policy=act注意事項
lerobot-train中的--policy.use_amp旗標僅在沒有使用 accelerate 時才會生效。當使用 accelerate 時,混合精度由 accelerate 的配置控制。- 訓練日誌、檢查點和上傳至 Hub 的作業僅由主程序執行,以避免衝突。非主程序會停用主控台輸出,以防止重複顯示日誌。
- 有效 Batch Size 為
batch_size × num_gpus。如果您使用 4 個 GPU 且設定--batch_size=8,您的有效 Batch Size 即為 32。 - 學習率排程在多個程序中被正確處理——LeRobot 設定
step_scheduler_with_optimizer=False,以防止 accelerate 根據程序數量調整排程步數。 - 在儲存或推送模型時,LeRobot 會自動將模型從 accelerate 的分散式封裝中解包,以確保相容性。
- WandB 整合功能會自動僅在主程序中初始化,從而防止建立多個執行紀錄。
如需進階配置與疑難排解,請參閱 Accelerate 文件。若想深入了解如何在大量 GPU 上進行訓練,請查看這份精彩指南:Ultrascale Playbook。
在 GitHub 上更新