Files
OGAAA/Codes/2-2_head_identification/Ident_IH_05_visualize_any.sh
HenryChou020514 6edf7da2b7 first commit
2026-07-07 19:03:00 +08:00

108 lines
3.7 KiB
Bash

#!/usr/bin/env sh
set -eu
export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}
PYTHON_BIN=${PYTHON_BIN:-/opt/miniconda/envs/focallora/bin/python}
MODEL_PATH=${1:-${MODEL_PATH:-}}
LORA_PATH=${2:-${LORA_PATH:-}}
INPUT_PATH=${3:-${INPUT_PATH:-./Ident_IH_05_visualize_any_testmsg.txt}}
OUTPUT_PATH=${4:-${OUTPUT_PATH:-./Ident_IH_05_visualize_any_output.png}}
if [ ! -x "$PYTHON_BIN" ]; then
echo "[Ident_IH_05_visualize_any.sh] Python not found: $PYTHON_BIN" >&2
exit 1
fi
run_one() {
run_model_path=$1
run_lora_path=$2
run_input_path=$3
run_output_path=$4
run_title=${5:-}
run_head_order_path=${6:-}
if [ ! -d "$run_model_path" ]; then
echo "[Ident_IH_05_visualize_any.sh] Model path not found: $run_model_path" >&2
exit 1
fi
if [ -n "$run_lora_path" ] && [ ! -d "$run_lora_path" ]; then
echo "[Ident_IH_05_visualize_any.sh] LoRA path not found: $run_lora_path" >&2
exit 1
fi
if [ ! -f "$run_input_path" ]; then
echo "[Ident_IH_05_visualize_any.sh] Input file not found: $run_input_path" >&2
exit 1
fi
if [ -n "$run_head_order_path" ] && [ ! -f "$run_head_order_path" ]; then
echo "[Ident_IH_05_visualize_any.sh] Head-order file not found: $run_head_order_path" >&2
exit 1
fi
echo "[run] model=$run_model_path"
echo "[run] lora=${run_lora_path:-<off>}"
echo "[run] input=$run_input_path"
echo "[run] output=$run_output_path"
echo "[run] head_order=${run_head_order_path:-<default>}"
set -- \
"$PYTHON_BIN" ./Ident_IH_05_visualize_any.py \
--model-path "$run_model_path" \
--lora-path "$run_lora_path" \
--input-path "$run_input_path" \
--output-path "$run_output_path"
if [ -n "$run_title" ]; then
set -- "$@" --title "$run_title"
fi
if [ -n "$run_head_order_path" ]; then
set -- "$@" --head-order-path "$run_head_order_path"
fi
"$@"
}
if [ -n "$MODEL_PATH" ]; then
run_one "$MODEL_PATH" "$LORA_PATH" "$INPUT_PATH" "$OUTPUT_PATH"
exit 0
fi
CODE_DIR=../code
IGNORE_INPUT=$CODE_DIR/Ident_IH_05_visualize_any_ignore_attk.txt
CONV_INPUT=$CODE_DIR/Ident_IH_05_visualize_any_conv_attack_attk.txt
for required_input in "$IGNORE_INPUT" "$CONV_INPUT"; do
if [ ! -f "$required_input" ]; then
echo "[Ident_IH_05_visualize_any.sh] Required batch input missing: $required_input" >&2
exit 1
fi
done
while IFS='|' read -r model_tag model_path lora_path head_order_path; do
[ -n "$model_tag" ] || continue
while IFS='|' read -r lora_state effective_lora; do
[ -n "$lora_state" ] || continue
if [ "$lora_state" = "on" ]; then
current_lora=$lora_path
else
current_lora=
fi
while IFS='|' read -r attack_tag attack_input; do
[ -n "$attack_tag" ] || continue
output_file=$CODE_DIR/Ident_IH_05_visualize_any_${model_tag}_lora-${lora_state}_${attack_tag}.png
title="${model_tag} | lora=${lora_state} | ${attack_tag}"
run_one "$model_path" "$current_lora" "$attack_input" "$output_file" "$title" "$head_order_path"
done <<EOF_ATTACK
ignore|$IGNORE_INPUT
conv_attack|$CONV_INPUT
EOF_ATTACK
done <<EOF_LORA
off|
on|$lora_path
EOF_LORA
done <<'EOF_MODEL'
qwen3-4b|../../models/Qwen3-4B|../3-2_model_training/lora/qwen3-4b_sep_tool_simple_1e-4_orig/batch_14_99|../2-2_head_identification/head_scoring/qwen3-4b_sep/heads_sorted/user_prop_inst_0.1.json
qwen3-8b|../../models/Qwen3-8B|../3-2_model_training/lora/qwen3-8b_sep_tool_simple_debug2_1e-4_orig/batch_0_562|../2-2_head_identification/head_scoring/qwen3-8b_sep/heads_sorted/all_roc_inst_0.1.json
llama31-8b|../../models/Llama-3.1-8B-Instruct|../3-2_model_training/lora/llama31-8b_sep_tool_simple_debug/batch_1_562|../2-2_head_identification/head_scoring/llama31-8b_sep/heads_sorted/all_roc_inst_0.1.json
EOF_MODEL