
Ricerca di codice per attacchi di poisoning sul PGM-index, che dimostra come creare dati avversari per degradare le prestazioni degli indici appresi.
Codice ufficiale per il nostro articolo, Poisoning Attacks on the PGM-index.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
git submodule update --init --recursive
./scripts/build.sh
Richiede CMake (vedi Dipendenze). Gli output vengono scritti in build/ (i binari in build/bin di default).
./scripts/download_alex_dataset.sh # ALEX
./scripts/download_mgbench.sh # mgbench
./scripts/download_sosd_datasets.sh # SOSD
./scripts/preprocess_alex_dataset.sh # ALEX
./scripts/preprocess_mgbench.sh # mgbench
./scripts/generate_synthetic_dataset.sh # sintetici
Ogni esecuzione richiede un config JSON tramite ./scripts/run_experiment.sh <config.json>. Esempi:
4.1 Massimizzare l'errore massimo (es. n=16, metodo consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 Minimizzare le chiavi legittime coperte (es. epsilon=2, metodo consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 Massimizzare m_opt (esempio PGM-index)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 Limite superiore su m_opt (esempio dipendente dall'istanza)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 Eseguire tutti gli esperimenti (batch)
Esegue l'elenco completo dei config degli esperimenti in scripts/run_all_experiment.sh (modifica quel file per cambiare l'insieme).
./scripts/run_all_experiment.sh
Dalla radice del repository:
./scripts/plot.sh
./scripts/print_table.sh
Figure e log vengono scritti in fig/. Installa prima le dipendenze Python: pip install -r requirements.txt.
g++, make e CMake (lo script di build configura con CMake e compila con cmake --build, che tipicamente invoca Make).requirements.txt (script per grafici / tabelle)../scripts/run_experiment.sh per analizzare i JSON degli esperimenti.Compila l'immagine una volta:
./docker_build.sh
docker_run.sh — Contenitore interattivo: monta il repository in /workspace, alloca 8 CPU (0–7), ti porta in bash così puoi compilare ed eseguire comandi manualmente.docker_run_all.sh — Esecuzione distaccata: esegue ./scripts/run_all_experiment.sh all'interno del contenitore (8 CPU) e scrive stdout in results/run_all.log.docker_run_all_single_cpu.sh — Come docker_run_all.sh ma con una CPU e OMP_NUM_THREADS=1 per esecuzioni single-threaded.Tutti e tre usano l'immagine pgm_poisoning:latest e le stesse impostazioni di capability / volume presenti negli script.
| Percorso | Ruolo |
|---|
src/ | Sorgenti C++ (attacchi, benchmark PGM, strumenti, limiti superiori). |
configs/experiments/ | Config JSON degli esperimenti (percorsi sotto poison_attack/, upper_bound/, ecc.). |
scripts/ | Build, dati, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Sottomoduli Git (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | Dati, output delle esecuzioni e figure / log delle tabelle generati. |
plot/ | Script Python per grafici e stampa tabelle. |