This repository provides the dataset and experimental code for the paper "ICU-Bench: Benchmarking Continual Unlearning in Multimodal Large Language Models".
This repository uses a single entry script: run.sh.
All training and evaluation commands are already prepared in that file as templates.
cd /data/2026NIPS_ICUBench_code
conda env create -f environment.yml
conda activate icubenchIf environment.yml is not complete for your machine, install from requirements.txt:
pip install -r requirements.txtcd /data/2026NIPS_ICUBench_code
pip install -r requirements.txtrun.sh: unified launcher and command templates.base_method/: training scripts for methods (GA, GA-Diff, KL-Min, NPO, NPO-Diff, MANU, MMU).base_method/eval/: evaluation scripts.dataset/: ICUBench data root.vanilla_model/: base model directory.adapter_output/: output adapters results.eval_output/: output of evaluation scripts (e.g. generated responses).
All runnable commands are in run.sh, but they are commented out by default.
You need to do 3 things:
- Edit path and runtime variables in
run.sh. - Uncomment the command block you want to run.
- Execute
bash run.sh.
At the top of run.sh, check these variables first:
BASE_MODEL/VANILLA_DIR: base model path.ICU_BENCH_DIR: dataset path (dataset).OUTPUT_ROOT: output root (adapter_output).GPU_IDS: visible GPU IDs, e.g."0"or"0,1".BATCH_IDX,TASK_IDX: used by evaluation scripts.
Available method blocks:
GAGA-DiffKL-MinNPONPO-DiffMANUMMU
Uncomment one block (or multiple blocks, sequentially) and run:
bash run.shAvailable evaluation blocks:
- Forget evaluation:
base_method/eval/task_forget_eval.py - Retain evaluation:
base_method/eval/batch_retain_eval.py - Generation evaluation:
base_method/eval/generation_eval.py - Real-world evaluation:
base_method/eval/realworld_eval.py
For each evaluation block:
- Set
--adapter_rootto your trained adapter directory. - Confirm
BATCH_IDXandTASK_IDX. - Uncomment the block and run
bash run.sh.
In run.sh:
- Set
GPU_IDS,BASE_MODEL,ICU_BENCH_DIR,OUTPUT_ROOT. - Uncomment the
NPOtraining block. - Run:
bash run.shAfter training:
- Comment back the
NPOblock (optional). - Uncomment
Forget evaluationblock. - Ensure
--adapter_root "${NPO_ADAPTER}"is correct. - Run again:
bash run.shrun.shstarts withset -e; execution stops immediately if any command fails.realworld_eval.pyrequireslmms-evalinstalled and configured.- You can keep this repo as a command hub by only editing variables and uncommenting blocks.