| #!/usr/bin/env bash |
| set -Eeuo pipefail |
|
|
| PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" |
| cd "$PROJECT_DIR" |
|
|
| PYTHON_BIN="${PYTHON_BIN:-/home/suiqk/anaconda3/envs/scalerag-ts-v4/bin/python}" |
| ACCELERATE_BIN="$(dirname "$PYTHON_BIN")/accelerate" |
| ACCELERATE_CONFIG="${ACCELERATE_CONFIG:-${PROJECT_DIR}/accelerate_config_2gpu.yaml}" |
| CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1}" |
| NUM_PROCESSES="${NUM_PROCESSES:-2}" |
| RUN_ID="${RUN_ID:-$(date +%Y%m%d_%H%M%S)}" |
| MAIN_PROCESS_PORT="${MAIN_PROCESS_PORT:-30621}" |
|
|
| CHECKPOINT="${CHECKPOINT:-${PROJECT_DIR}/save/sft_rats40k_20260608_184144/checkpoint-2838}" |
| DATA_PATH="${DATA_PATH:-/mnt/share01/sqk/datasets/RATs40K/RATs-Uni-TSImage_Reason.json}" |
| LLM_MODEL_PATH="${LLM_MODEL_PATH:-/mnt/share01/sqk/models/qwen2.5-7b-instruct}" |
| LLM_ATTN_IMPLEMENTATION="${LLM_ATTN_IMPLEMENTATION:-flash_attention_2}" |
|
|
| EVAL_BATCH="${EVAL_BATCH:-1}" |
| EVAL_MAX_NEW_TOKENS="${EVAL_MAX_NEW_TOKENS:-256}" |
| EVAL_NUM_WORKERS="${EVAL_NUM_WORKERS:-4}" |
| MAX_EVAL_SAMPLES="${MAX_EVAL_SAMPLES:-}" |
| EVAL_OUTPUT_DIR="${EVAL_OUTPUT_DIR:-${PROJECT_DIR}/inference_results_rats40k_ckpt2838_${RUN_ID}}" |
| LOG_DIR="${LOG_DIR:-${PROJECT_DIR}/logs}" |
| LOG_FILE="${LOG_FILE:-${LOG_DIR}/rats40k_ckpt2838_eval_2gpu_${RUN_ID}.log}" |
|
|
| mkdir -p "$LOG_DIR" "$EVAL_OUTPUT_DIR" |
| touch "$LOG_FILE" |
|
|
| on_error() { |
| local exit_code="$1" |
| local line_no="$2" |
| local failed_command="$3" |
| echo "ITFormer RATs40K eval failed: exit=${exit_code} line=${line_no} command=${failed_command}" >&2 |
| echo "Log file: ${LOG_FILE}" >&2 |
| exit "$exit_code" |
| } |
| trap 'on_error "$?" "$LINENO" "$BASH_COMMAND"' ERR |
| exec > >(tee -a "$LOG_FILE") 2>&1 |
|
|
| export CUDA_VISIBLE_DEVICES |
| export PYTHONWARNINGS="ignore::FutureWarning:transformers.utils.hub" |
| export TOKENIZERS_PARALLELISM=false |
| export PYTHONUNBUFFERED=1 |
| export OMP_NUM_THREADS="${OMP_NUM_THREADS:-4}" |
|
|
| [ -x "$PYTHON_BIN" ] || { echo "Python not found: $PYTHON_BIN" >&2; exit 1; } |
| [ -x "$ACCELERATE_BIN" ] || { echo "Accelerate not found: $ACCELERATE_BIN" >&2; exit 1; } |
| [ -f "$ACCELERATE_CONFIG" ] || { echo "Accelerate config not found: $ACCELERATE_CONFIG" >&2; exit 1; } |
| [ -f "$CHECKPOINT/model.safetensors" ] || { echo "Checkpoint not found: $CHECKPOINT" >&2; exit 1; } |
| [ -f "$DATA_PATH" ] || { echo "Dataset not found: $DATA_PATH" >&2; exit 1; } |
|
|
| extra_args=() |
| if [ -n "$LLM_ATTN_IMPLEMENTATION" ]; then |
| extra_args+=(--llm_attn_implementation "$LLM_ATTN_IMPLEMENTATION") |
| fi |
| if [ -n "$MAX_EVAL_SAMPLES" ]; then |
| extra_args+=(--max_eval_samples "$MAX_EVAL_SAMPLES") |
| fi |
|
|
| run_eval() { |
| local -a eval_cmd=( |
| "$ACCELERATE_BIN" launch |
| --config_file "$ACCELERATE_CONFIG" |
| --num_processes "$NUM_PROCESSES" |
| --main_process_port "$MAIN_PROCESS_PORT" |
| inference_rats40k.py |
| --checkpoint "$CHECKPOINT" |
| --data_path "$DATA_PATH" |
| --eval_split TSAD_test |
| --llm_model_path "$LLM_MODEL_PATH" |
| --patch_len 16 |
| --stride 16 |
| --input_len 128 |
| --d_model 512 |
| --n_heads 8 |
| --e_layers 4 |
| --it_d_model 3584 |
| --it_n_heads 28 |
| --it_layers 2 |
| --prefix_num 8 |
| --adapter_type itformer |
| --batch_size "$EVAL_BATCH" |
| --max_new_tokens "$EVAL_MAX_NEW_TOKENS" |
| --num_workers "$EVAL_NUM_WORKERS" |
| --output_dir "$EVAL_OUTPUT_DIR" |
| "${extra_args[@]}" |
| ) |
|
|
| echo "============================================================" |
| echo "ITFormer RATs40K checkpoint evaluation" |
| echo "Checkpoint: $CHECKPOINT" |
| echo "CUDA_VISIBLE_DEVICES: $CUDA_VISIBLE_DEVICES" |
| echo "Processes: $NUM_PROCESSES" |
| echo "Per-GPU eval batch: $EVAL_BATCH" |
| echo "Output: $EVAL_OUTPUT_DIR" |
| echo "Log: $LOG_FILE" |
| echo "============================================================" |
|
|
| "${eval_cmd[@]}" |
| echo "ITFormer RATs40K evaluation completed: $EVAL_OUTPUT_DIR" |
| } |
|
|
| run_eval |
|
|