-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathall_exp.sh
More file actions
executable file
·174 lines (131 loc) · 5.41 KB
/
Copy pathall_exp.sh
File metadata and controls
executable file
·174 lines (131 loc) · 5.41 KB
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/bin/bash
# 定义要遍历的seed列表
SEEDS=(10 20 30 40 50)
# 定义数据集列表及其对应的GPU和端口偏移量
declare -A DATASET_CONFIG=(
["Rotten_Tomatoes"]="0 0" # GPU 0, 端口偏移量 0
["imdb"]="1 10" # GPU 1, 端口偏移量 10
["ag_news"]="2 20" # GPU 2, 端口偏移量 20
["20_newsgroups"]="3 30" # GPU 3, 端口偏移量 30
)
# 定义模型配置(只保留base模型),每个元素是模型偏移量、配置文件后缀
MODELS=(
"0 transformer_base.yaml" # 模型偏移量 0
"1 conv_base.yaml" # 模型偏移量 1
)
# 基础端口号
BASE_PORT=20700
# 遍历每个seed
for SEED in "${SEEDS[@]}"; do
echo "开始运行seed: $SEED"
# 存储当前seed批次的所有进程ID
PIDS=()
# 遍历每个数据集
for DATASET in "${!DATASET_CONFIG[@]}"; do
echo " 开始处理数据集: $DATASET"
# 获取该数据集对应的GPU和端口偏移量
read GPU DATASET_PORT_OFFSET <<< "${DATASET_CONFIG[$DATASET]}"
# 遍历所有base模型配置
for MODEL in "${MODELS[@]}"; do
# 解析配置参数
read MODEL_OFFSET CFG_SUFFIX <<< "$MODEL"
# 根据数据集和模型配置构建完整路径和唯一端口
CFG="cfgs/${DATASET}/${CFG_SUFFIX}"
# 计算唯一端口:基础端口 + 数据集偏移 + 模型偏移 + seed
PORT=$((BASE_PORT + DATASET_PORT_OFFSET + MODEL_OFFSET + SEED))
# 构造标签
TAG="seed_${SEED}"
# 检查配置文件是否存在
if [ ! -f "$CFG" ]; then
echo " 警告: 配置文件 $CFG 不存在,跳过..."
continue
fi
# 后台运行命令并记录PID
nohup env CUDA_VISIBLE_DEVICES=$GPU torchrun --nproc_per_node=1 --master-port=$PORT main.py \
--cfg "$CFG" --seed $SEED --tag "$TAG" > /dev/null 2>&1 &
# 保存进程ID
PID=$!
PIDS+=($PID)
echo " 启动: GPU=$GPU, PORT=$PORT, CFG=$CFG, TAG=$TAG, PID=$PID"
done
done
# 等待当前seed的所有任务完成
if [ ${#PIDS[@]} -gt 0 ]; then
echo " 等待seed $SEED 的所有任务完成..."
for PID in "${PIDS[@]}"; do
wait $PID
echo " 进程 $PID 已完成"
done
fi
echo "seed $SEED 的所有任务执行完毕"
echo "========================================"
done
echo "所有seed的任务都已完成!"
#!/bin/bash
# Define datasets
DATASETS=("CIFAR-10" "CIFAR-100" "SVHN" "FashionMNIST")
# Define models (一组:vit + conv vit)
MODELS=("vit_base.yaml" "conv_base.yaml")
# Configuration: 种子列表
SEEDS=(20 30 40)
BASE_PORT=29500
# Create logs directory
mkdir -p logs
echo "Starting image dataset experiments..."
echo "Datasets: ${DATASETS[*]}"
echo "Models: ${MODELS[*]} (一组并行运行)"
echo "Seeds: ${SEEDS[*]}"
echo "========================================"
# 外层循环:遍历每个种子
for SEED in "${SEEDS[@]}"; do
echo "========================================"
echo "Processing with SEED: $SEED"
echo "========================================"
for DATASET in "${DATASETS[@]}"; do
echo "Processing dataset: $DATASET (Seed: $SEED)"
# Ensure logs directory for dataset exists
mkdir -p "logs/${DATASET}"
PIDS=() # 存储当前数据集下的模型PID
# 内层循环:并行启动一组模型(vit + conv vit)
for MODEL_CFG in "${MODELS[@]}"; do
MODEL_NAME=$(basename "$MODEL_CFG" .yaml)
CFG="cfgs/${DATASET}/${MODEL_CFG}"
# Check if config exists
if [ ! -f "$CFG" ]; then
echo " Warning: Config $CFG not found, skipping..."
continue
fi
# Tag包含种子
TAG="seed_${SEED}"
# Unique port for each run
PORT=$BASE_PORT
BASE_PORT=$((BASE_PORT + 1))
# 日志文件名包含种子
LOG_FILE="logs/${DATASET}/${MODEL_NAME}_seed${SEED}.log"
echo " Starting $MODEL_NAME on $DATASET (Seed: $SEED, Port: $PORT)..."
# 并行启动模型(后台运行)
nohup torchrun --nproc_per_node=4 --master-port=$PORT main.py \
--cfg "$CFG" --seed $SEED --tag "$TAG" > "$LOG_FILE" 2>&1 &
# 记录PID
PID=$!
PIDS+=($PID)
echo " $MODEL_NAME started with PID: $PID"
done
# 等待当前数据集的一组模型全部完成
if [ ${#PIDS[@]} -gt 0 ]; then
echo " Waiting for all models on $DATASET (Seed: $SEED) to complete..."
for PID in "${PIDS[@]}"; do
wait $PID
if [ $? -eq 0 ]; then
echo " PID $PID completed successfully"
else
echo " PID $PID exited with error"
fi
done
fi
echo "Completed all models for $DATASET (Seed: $SEED)"
echo "--------------------------------"
done
echo "Completed all datasets for SEED: $SEED"
done
echo "All experiments completed!"