File size: 2,506 Bytes
ac29381 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #!/bin/bash
# DreamZero 多节点 torchrun 启动脚本(不依赖 SLURM)
#
# 用法:
# bash scripts/cluster/torchrun_multinode.sh <NODE_LIST> <BENCHMARK> [额外参数]
#
# 示例:
# bash scripts/cluster/torchrun_multinode.sh "node1,node2,node3,node4" libero
# bash scripts/cluster/torchrun_multinode.sh "10.0.0.1,10.0.0.2" manifeel --max_steps=100000
#
# 前置条件:
# - 所有节点可互相 SSH 免密访问
# - 代码和数据在所有节点上路径一致
# - 所有节点已安装所需依赖
set -euo pipefail
if [ $# -lt 2 ]; then
echo "用法: $0 <NODE_LIST> <BENCHMARK> [额外参数]"
echo "示例: $0 node1,node2,node3,node4 libero"
exit 1
fi
NODE_LIST="$1"
BENCHMARK="$2"
shift 2
# ============ 解析节点列表 ============
IFS=',' read -ra NODES <<< "$NODE_LIST"
NNODES=${#NODES[@]}
FIRST_NODE="${NODES[0]}"
MASTER_PORT=${MASTER_PORT:-29500}
echo "============================================"
echo " DreamZero Multi-Node Training"
echo "============================================"
echo " Nodes: $NNODES ($NODE_LIST)"
echo " Master: $FIRST_NODE:$MASTER_PORT"
echo " Benchmark: $BENCHMARK"
echo "============================================"
# ============ 路径 ============
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
OUTPUT_DIR="${OUTPUT_DIR:-$REPO_ROOT/output/${BENCHMARK}_full_${NNODES}nodes}"
# ============ 环境变量 ============
export NCCL_DEBUG=WARN
export NCCL_IB_DISABLE=0
export NCCL_IB_TIMEOUT=22
export NCCL_SOCKET_IFNAME=^docker0,lo
export HF_ENDPOINT=https://hf-mirror.com
# ============ 运行 ============
torchrun \
--nnodes="$NNODES" \
--nproc_per_node=8 \
--rdzv_id="dz_${BENCHMARK}" \
--rdzv_backend=c10d \
--rdzv_endpoint="$FIRST_NODE:$MASTER_PORT" \
"$REPO_ROOT/groot/vla/experiment/experiment.py" \
report_to=wandb \
data="dreamzero/${BENCHMARK}" \
wandb_project=dreamzero-sft \
train_architecture=full \
model=dreamzero/vla \
model/dreamzero/action_head=wan_flow_matching_action_tf_wan22 \
model/dreamzero/transform=dreamzero_cotrain \
per_device_train_batch_size=1 \
save_steps=2000 \
save_total_limit=4 \
training_args.learning_rate=1e-5 \
training_args.deepspeed="groot/vla/configs/deepspeed/zero3_multinode.json" \
training_args.bf16=true \
training_args.tf32=true \
output_dir="$OUTPUT_DIR" \
dataloader_num_workers=8 \
optim=adamw_bnb_8bit \
"$@"
|