Skip to content

Commit 9cdd20e

Browse files
committed
Production ready runner
1 parent cb51ae3 commit 9cdd20e

1 file changed

Lines changed: 91 additions & 24 deletions

File tree

fsp-anns-parent/run-all.sh

Lines changed: 91 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ JVM_ARGS=(
2323

2424
"-Dfile.encoding=UTF-8"
2525
"-Dreenc.mode=end"
26-
# "-Dreenc.fullMigration=true"
27-
2826
)
2927

3028
# -------------------- SAFETY -------------------
@@ -38,10 +36,18 @@ need_file "$JAR"
3836

3937
mkdir -p "$OUT_ROOT"
4038

39+
# Check disk space
40+
AVAILABLE_GB=$(df -BG "$OUT_ROOT" | tail -1 | awk '{print $4}' | sed 's/G//')
41+
REQUIRED_GB=60
42+
if [ "$AVAILABLE_GB" -lt "$REQUIRED_GB" ]; then
43+
die "Insufficient disk space: ${AVAILABLE_GB}GB available, ${REQUIRED_GB}GB required"
44+
fi
45+
echo "Disk space: ${AVAILABLE_GB}GB available"
46+
4147
# ================= DATASETS ====================
4248

4349
declare -A CFG=(
44-
["SIFT1M"]="/home/jeco/IdeaProjects/fspann-query-system/fsp-anns-parent/config/src/main/resources/config_sift1m_ablation.json"
50+
["SIFT1M"]="/home/jeco/IdeaProjects/fspann-query-system/fsp-anns-parent/config/src/main/resources/config_sift1m.json"
4551
["glove-100"]="/home/jeco/IdeaProjects/fspann-query-system/fsp-anns-parent/config/src/main/resources/config_glove100.json"
4652
["RedCaps"]="/home/jeco/IdeaProjects/fspann-query-system/fsp-anns-parent/config/src/main/resources/config_redcaps.json"
4753
)
@@ -74,10 +80,20 @@ declare -A GT=(
7480
ONLY_DATASET=""
7581
ONLY_PROFILE=""
7682

83+
# ================= TRACKING ====================
84+
FAILED_PROFILES=()
85+
SWEEP_START=$(date +%s)
86+
87+
echo "SWEEP STARTED: $(date)"
88+
echo "Datasets: SIFT1M-128, Glove-100, RedCaps-512"
89+
echo "Profiles per dataset: 9"
90+
echo "Total profiles: 27"
91+
echo ""
92+
7793
# ================= GLOBAL SUMMARY =================
7894

7995
GLOBAL_SUMMARY="$OUT_ROOT/global_summary.csv"
80-
echo "dataset,profile,ART_ms,AvgRatio,ratio@20,ratio@40,ratio@60,ratio@80,ratio@100" \
96+
echo "dataset,profile,ART_ms,AvgRatio,recall_at_100,ratio@20,ratio@40,ratio@60,ratio@80,ratio@100" \
8197
> "$GLOBAL_SUMMARY"
8298

8399
# ================= MAIN LOOP ======================
@@ -86,30 +102,37 @@ DATASETS=(SIFT1M glove-100 RedCaps)
86102
[[ -n "$ONLY_DATASET" ]] && DATASETS=("$ONLY_DATASET")
87103

88104
for ds in "${DATASETS[@]}"; do
89-
echo "DATASET START: $ds"
105+
echo "DATASET: $ds"
90106

91107
cfg="${CFG[$ds]}"
92108
dim="${DIM[$ds]}"
93109
base="${BASE[$ds]}"
94110
query="${QUERY[$ds]}"
95111
gt="${GT[$ds]}"
96112

113+
# Validate config exists and has profiles
114+
[[ -f "$cfg" ]] || die "Config not found: $cfg"
115+
PROFILE_COUNT="$(jq '.profiles | length' "$cfg")"
116+
[[ "$PROFILE_COUNT" -gt 0 ]] || die "No profiles in config: $cfg"
117+
echo " Profiles to run: $PROFILE_COUNT"
118+
97119
BASE_JSON="$(jq -c 'del(.profiles)' "$cfg")"
98120

99121
ds_root="$OUT_ROOT/$ds"
100122
mkdir -p "$ds_root"
101123

102-
echo "profile,ART_ms,AvgRatio,ratio@20,ratio@40,ratio@60,ratio@80,ratio@100" \
124+
echo "dataset,profile,ART_ms,AvgRatio,recall_at_100,ratio@20,ratio@40,ratio@60,ratio@80,ratio@100" \
103125
> "$ds_root/dataset_summary.csv"
104126

105-
PROFILE_COUNT="$(jq '.profiles | length' "$cfg")"
106-
107127
for ((i=0;i<PROFILE_COUNT;i++)); do
108128
prof="$(jq -c ".profiles[$i]" "$cfg")"
109129
name="$(jq -r '.name' <<<"$prof")"
110130

111131
[[ -n "$ONLY_PROFILE" && "$name" != "$ONLY_PROFILE" ]] && continue
112132

133+
echo ""
134+
echo "[$ds] Running profile $((i+1))/$PROFILE_COUNT: $name"
135+
113136
overrides="$(jq -c '.overrides // {}' <<<"$prof")"
114137
run_dir="$ds_root/$name"
115138

@@ -134,38 +157,82 @@ for ds in "${DATASETS[@]}"; do
134157
echo "$final_cfg" > "$run_dir/config.json"
135158
sha256sum "$run_dir/config.json" > "$run_dir/config.sha256"
136159

137-
echo "RUNNING: $ds | $name (10k queries)"
138-
139160
start_ts=$(date +%s)
140161

141162
if ! java "${JVM_ARGS[@]}" -jar "$JAR" \
142163
"$run_dir/config.json" "$base" "$query" "$run_dir/keys.blob" \
143164
"$dim" "$run_dir" "$gt" "$BATCH_SIZE" \
144165
>"$run_dir/run.log" 2>&1; then
145-
echo "FAILED: $ds | $name"
166+
echo " ❌ FAILED: $ds | $name"
167+
FAILED_PROFILES+=("$ds/$name")
146168
continue
147169
fi
148170

149171
end_ts=$(date +%s)
150-
echo "COMPLETED: $ds | $name | wall_time=$((end_ts - start_ts))s"
172+
duration=$((end_ts - start_ts))
173+
echo " ✓ COMPLETED in ${duration}s"
151174

152175
acc="$run_dir/results/summary.csv"
153-
[[ -f "$acc" ]] || die "Missing summary.csv"
176+
if [[ ! -f "$acc" ]]; then
177+
echo " ⚠️ WARNING: Missing summary.csv"
178+
FAILED_PROFILES+=("$ds/$name (no summary)")
179+
continue
180+
fi
154181

155-
avg_art=$(awk -F',' 'NR>1 {print $13}' "$acc")
156-
avg_ratio=$(awk -F',' 'NR>1 {print $7}' "$acc")
157-
ratio20=$(awk -F',' 'NR>1 {print $24}' "$acc")
158-
ratio40=$(awk -F',' 'NR>1 {print $25}' "$acc")
159-
ratio60=$(awk -F',' 'NR>1 {print $26}' "$acc")
160-
ratio80=$(awk -F',' 'NR>1 {print $27}' "$acc")
161-
ratio100=$(awk -F',' 'NR>1 {print $28}' "$acc")
182+
# Validate CSV has enough columns
183+
COL_COUNT=$(head -1 "$acc" | awk -F',' '{print NF}')
184+
if [ "$COL_COUNT" -lt 28 ]; then
185+
echo " ⚠️ WARNING: CSV has only $COL_COUNT columns (expected 28+)"
186+
FAILED_PROFILES+=("$ds/$name (invalid CSV)")
187+
continue
188+
fi
162189

190+
avg_art=$(awk -F',' 'NR>1 {print $13}' "$acc")
191+
avg_ratio=$(awk -F',' 'NR>1 {print $7}' "$acc")
192+
recall_100=$(awk -F',' 'NR>1 {print $23}' "$acc")
193+
ratio20=$(awk -F',' 'NR>1 {print $24}' "$acc")
194+
ratio40=$(awk -F',' 'NR>1 {print $25}' "$acc")
195+
ratio60=$(awk -F',' 'NR>1 {print $26}' "$acc")
196+
ratio80=$(awk -F',' 'NR>1 {print $27}' "$acc")
197+
ratio100=$(awk -F',' 'NR>1 {print $28}' "$acc")
163198

164-
echo "$name,$avg_art,$avg_ratio,$ratio20,$ratio40,$ratio60,$ratio80,$ratio100" \
165-
>> "$ds_root/dataset_summary.csv"
199+
echo "$ds,$name,$avg_art,$avg_ratio,$recall_100,$ratio20,$ratio40,$ratio60,$ratio80,$ratio100" \
200+
>> "$ds_root/dataset_summary.csv"
166201

167-
echo "$ds,$name,$avg_art,$avg_ratio,$ratio20,$ratio40,$ratio60,$ratio80,$ratio100" \
168-
>> "$GLOBAL_SUMMARY"
202+
echo "$ds,$name,$avg_art,$avg_ratio,$recall_100,$ratio20,$ratio40,$ratio60,$ratio80,$ratio100" \
203+
>> "$GLOBAL_SUMMARY"
169204

205+
echo " Recall@100: $recall_100 | ART: ${avg_art}ms"
170206
done
207+
208+
echo ""
209+
echo "$ds completed"
171210
done
211+
212+
# ================= FINAL SUMMARY =================
213+
214+
SWEEP_END=$(date +%s)
215+
SWEEP_DURATION=$((SWEEP_END - SWEEP_START))
216+
SWEEP_HOURS=$((SWEEP_DURATION / 3600))
217+
SWEEP_MINS=$(((SWEEP_DURATION % 3600) / 60))
218+
219+
echo ""
220+
echo "SWEEP COMPLETED: $(date)"
221+
echo "Total Duration: ${SWEEP_HOURS}h ${SWEEP_MINS}m"
222+
223+
if [ ${#FAILED_PROFILES[@]} -gt 0 ]; then
224+
echo ""
225+
echo "⚠️ FAILED PROFILES (${#FAILED_PROFILES[@]}):"
226+
for fail in "${FAILED_PROFILES[@]}"; do
227+
echo " - $fail"
228+
done
229+
else
230+
echo ""
231+
echo "ll profiles completed successfully!"
232+
fi
233+
234+
echo ""
235+
echo "Results:"
236+
echo " Global summary: $GLOBAL_SUMMARY"
237+
echo " Per-dataset: $OUT_ROOT/{SIFT1M,glove-100,RedCaps}/dataset_summary.csv"
238+
echo ""

0 commit comments

Comments
 (0)