dsp-repro-bundle / infer.sh
junwatu's picture
Upload folder using huggingface_hub
c881b77 verified
Raw
History Blame Contribute Delete
4.3 kB
#!/usr/bin/env bash
set -e
CONFIGS=()
SEEDS=()
CKPTS=()
RUN_IDS=()
GPU_IDS=""
METASEED=""
NUM_SEED=-1
META_START=0
MAX_INFER_SIZE=""
K_SHOTS=()
while [[ $# -gt 0 ]]; do
case $1 in
--config)
shift
CONFIGS=($1)
;;
--seed)
shift
SEEDS=($1)
;;
--metaseed)
shift
METASEED=$1
;;
--num_seed)
shift
NUM_SEED=$1
;;
--meta_start)
shift
META_START=$1
;;
--ckpt)
shift
CKPTS=($1)
;;
--run_id)
shift
RUN_IDS=($1)
;;
--k_shot)
shift
K_SHOTS=($1)
;;
--gpu_ids)
shift
GPU_IDS=$1
;;
--max_infer_size)
shift
MAX_INFER_SIZE=$1
;;
*)
echo "Unknown argument: $1"
exit 1
;;
esac
shift
done
if [[ ${#CONFIGS[@]} -eq 0 ]] \
|| [[ ${#CKPTS[@]} -eq 0 ]] \
|| [[ -z "$GPU_IDS" ]] \
|| [[ ${#K_SHOTS[@]} -eq 0 ]] \
|| [[ ${#RUN_IDS[@]} -eq 0 ]]; then
echo "Error: missing required arguments."
echo "You must provide: --config, --gpu_ids, --run_id, --k_shot"
echo "And one of: --seed OR --metaseed"
exit 1
fi
if [[ -z "$METASEED" && ${#SEEDS[@]} -eq 0 ]]; then
echo "Error: either --seed or --metaseed must be provided."
exit 1
fi
IFS=',' read -r -a GPU_ARRAY <<< "$GPU_IDS"
NUM_PROCESSES=${#GPU_ARRAY[@]}
if [[ -n "$METASEED" ]]; then
if [[ $NUM_SEED -lt 0 ]]; then
echo "Error: you must set --num_seed when using --metaseed."
exit 1
fi
echo "[INFO] Using metaseed=$METASEED"
echo "[INFO] Will use seeds index range [$META_START, $NUM_SEED)"
mapfile -t ALL_SEEDS < <(
shuf -i 0-9999 \
--random-source=<(awk -v s="$METASEED" 'BEGIN { while (1) printf "%s", s }') \
| head -n $NUM_SEED
)
# SEEDS=("${ALL_SEEDS[@]:META_START:NUM_SEED-META_START}")
SEEDS=("${ALL_SEEDS[@]:$META_START:$((NUM_SEED - META_START))}")
echo "[INFO] Total Seeds Generated: ${#ALL_SEEDS[@]}"
echo "[INFO] Using Seeds: ${SEEDS[@]}"
fi
echo "CONFIGS: ${CONFIGS[@]}"
echo "SEEDS: ${SEEDS[@]}"
echo "RUN_IDS: ${RUN_IDS[@]}"
echo "K_SHOTS: ${K_SHOTS[@]}"
echo "CKPTS: ${CKPTS[@]}"
echo "GPU_IDS: ${GPU_IDS}"
echo "NUM_PROCESSES: $NUM_PROCESSES"
echo "META_START: $META_START"
echo "NUM_SEED: $NUM_SEED"
echo "Actual inference episodes: ${#SEEDS[@]}"
echo "MAX_INFER_SIZE: ${MAX_INFER_SIZE:-"(unset)"}"
EXTRA_ARG=""
if [[ -n "$MAX_INFER_SIZE" ]]; then
EXTRA_ARG="-M $MAX_INFER_SIZE"
fi
run_with_retry(){
local cmd=("$@")
local max=3
local attempt=1
while (( attempt <= max )); do
echo "Attempt $attempt/$max: ${cmd[*]}"
set +e
"${cmd[@]}"
status=$?
set -e
if [[ $status -eq 0 ]]; then
return 0
fi
((attempt++))
sleep 2
done
return 1
}
for k_shot in "${K_SHOTS[@]}"; do
for run_id in "${RUN_IDS[@]}"; do
for config in "${CONFIGS[@]}"; do
for seed in "${SEEDS[@]}"; do
for ckpt in "${CKPTS[@]}"; do
echo "config: $config, seed: $seed, ckpt: $ckpt, run: $run_id"
max_wait=12
ckpt_path="./ckpt/$config/novel/run-$run_id/$k_shot-shot/shuffle_seed-$seed/checkpoint-$ckpt"
while [[ ! -s "$ckpt_path" ]]; do
echo "waiting for ckpt: $ckpt_path"
sleep 300
((max_wait--))
done
if [[ ! -s "$ckpt_path" ]]; then
echo "[ERROR] ckpt not found after waiting, skip."
continue
fi
run_with_retry \
accelerate launch --multi_gpu --gpu_ids $GPU_IDS --num_processes $NUM_PROCESSES main.py \
--config ./configs/$config.yaml -m infer -p novel -s $seed -k $k_shot -r $run_id -c $ckpt $EXTRA_ARG
done
done
done
done
done