File size: 4,592 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
# DreamZero 单节点快速启动脚本 (5 步验证)
#
# 用法:
#   bash scripts/train/quick_start.sh libero          # 单卡验证 LIBERO
#   bash scripts/train/quick_start.sh manifeel 4      # 4 卡 ManiFeel
#   bash scripts/train/quick_start.sh robotwin 2      # 2 卡 RoboTwin
#
# 前置条件: 权重文件已下载到 checkpoints/ 目录

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"

BENCHMARK="${1:-libero}"
NUM_GPUS="${2:-1}"
OUTPUT_DIR="${OUTPUT_DIR:-$REPO_ROOT/output/quickstart_${BENCHMARK}}"
PER_DEVICE_BS="${PER_DEVICE_BS:-1}"
MAX_STEPS="${MAX_STEPS:-5}"

echo "============================================"
echo " DreamZero Quick Start"
echo "============================================"
echo " Benchmark:   $BENCHMARK"
echo " GPUs:        $NUM_GPUS"
echo " Max steps:   $MAX_STEPS"
echo " Output:      $OUTPUT_DIR"
echo "============================================"

# ============ 验证权重文件 ============
CKPT_DIR="${CHECKPOINT_DIR:-$REPO_ROOT/checkpoints}"
WAN22_DIR="$CKPT_DIR/Wan2.2-TI2V-5B"
TOKENIZER_DIR="$CKPT_DIR/umt5-xxl"
CLIP_DIR="$CKPT_DIR/clip-encoder"

if [ ! -d "$WAN22_DIR" ]; then
    echo "ERROR: 未找到 Wan2.2 权重: $WAN22_DIR"
    echo "请先运行: bash scripts/data/download_checkpoints.sh"
    exit 1
fi
if [ ! -d "$TOKENIZER_DIR" ]; then
    echo "ERROR: 未找到 tokenizer: $TOKENIZER_DIR"
    echo "请先运行: bash scripts/data/download_checkpoints.sh"
    exit 1
fi
if [ ! -f "$CLIP_DIR/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" ]; then
    echo "ERROR: 未找到 CLIP encoder: $CLIP_DIR"
    echo "请先运行: bash scripts/data/download_checkpoints.sh"
    exit 1
fi

# ============ 数据集选择 ============
case "$BENCHMARK" in
    libero)
        DATA_CFG="dreamzero/libero"
        NUM_FRAMES=12
        ACTION_HORIZON=12
        NUM_VIEWS=1
        MAX_STATE_DIM=44
        MAX_ACTION_DIM=32
        NUM_FRAME_PER_BLOCK=2
        NUM_ACTION_PER_BLOCK=12
        LR=1e-5
        ;;
    manifeel)
        DATA_CFG="dreamzero/manifeel"
        NUM_FRAMES=12
        ACTION_HORIZON=12
        NUM_VIEWS=3
        MAX_STATE_DIM=44
        MAX_ACTION_DIM=32
        NUM_FRAME_PER_BLOCK=2
        NUM_ACTION_PER_BLOCK=12
        LR=1e-5
        ;;
    robotwin)
        DATA_CFG="dreamzero/robotwin"
        NUM_FRAMES=12
        ACTION_HORIZON=12
        NUM_VIEWS=1
        MAX_STATE_DIM=44
        MAX_ACTION_DIM=32
        NUM_FRAME_PER_BLOCK=2
        NUM_ACTION_PER_BLOCK=12
        LR=1e-5
        ;;
    *)
        echo "ERROR: 未知 benchmark: $BENCHMARK (可选: libero, manifeel, robotwin)"
        exit 1
        ;;
esac

# ============ 自动选择 DeepSpeed 配置 ============
if [ "$NUM_GPUS" -le 2 ]; then
    DEEPSPEED_CFG="groot/vla/configs/deepspeed/zero2.json"
elif [ "$NUM_GPUS" -le 8 ]; then
    DEEPSPEED_CFG="groot/vla/configs/deepspeed/zero2_offload.json"
else
    DEEPSPEED_CFG="groot/vla/configs/deepspeed/zero3_multinode.json"
fi

cd "$REPO_ROOT"

torchrun --standalone --nproc_per_node "$NUM_GPUS" \
    groot/vla/experiment/experiment.py \
    report_to=none \
    data="$DATA_CFG" \
    train_architecture=full \
    model=dreamzero/vla \
    model/dreamzero/action_head=wan_flow_matching_action_tf_wan22 \
    model/dreamzero/transform=dreamzero_cotrain \
    num_frames="$NUM_FRAMES" \
    action_horizon="$ACTION_HORIZON" \
    num_views="$NUM_VIEWS" \
    max_state_dim="$MAX_STATE_DIM" \
    max_action_dim="$MAX_ACTION_DIM" \
    num_frame_per_block="$NUM_FRAME_PER_BLOCK" \
    num_action_per_block="$NUM_ACTION_PER_BLOCK" \
    num_state_per_block=1 \
    max_chunk_size=4 \
    frame_seqlen=50 \
    image_resolution_width=320 \
    image_resolution_height=160 \
    per_device_train_batch_size="$PER_DEVICE_BS" \
    max_steps="$MAX_STEPS" \
    save_strategy=no \
    optim=adamw_bnb_8bit \
    training_args.learning_rate="$LR" \
    training_args.deepspeed="$DEEPSPEED_CFG" \
    training_args.bf16=true \
    training_args.tf32=true \
    training_args.eval_bf16=true \
    output_dir="$OUTPUT_DIR" \
    dit_version="$WAN22_DIR" \
    text_encoder_pretrained_path="$WAN22_DIR/models_t5_umt5-xxl-enc-bf16.pth" \
    image_encoder_pretrained_path="$CLIP_DIR/models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth" \
    vae_pretrained_path="$WAN22_DIR/Wan2.2_VAE.pth" \
    tokenizer_path="$TOKENIZER_DIR"

echo ""
echo "============================================"
echo " Quick start 完成! (benchmark: $BENCHMARK)"
echo "============================================"