
Código de investigación para ataques de envenenamiento sobre el PGM-index, que demuestra cómo elaborar datos adversariales para degradar el rendimiento de los índices aprendidos.
Código oficial de nuestro artículo, Poisoning Attacks on the PGM-index.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
git submodule update --init --recursive
./scripts/build.sh
Requiere CMake (ver Dependencias). Los resultados se generan en build/ (los binarios en build/bin por defecto).
./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 # synthetic
Cada ejecución toma una configuración JSON mediante ./scripts/run_experiment.sh <config.json>. Ejemplos:
4.1 Maximizar el error máximo (p. ej., n=16, método consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 Minimizar claves legítimas cubiertas (p. ej., epsilon=2, método consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 Maximizar m_opt (ejemplo de PGM-index)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 Cota superior de m_opt (ejemplo dependiente de la instancia)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 Ejecutar todos los experimentos (por lotes)
Ejecuta la lista completa de configuraciones de experimentos en scripts/run_all_experiment.sh (edite ese archivo para cambiar el conjunto).
./scripts/run_all_experiment.sh
Desde la raíz del repositorio:
./scripts/plot.sh
./scripts/print_table.sh
Las figuras y los registros se escriben en fig/. Instale primero las dependencias de Python: pip install -r requirements.txt.
g++, make y CMake (el script de compilación configura con CMake y compila con cmake --build, que normalmente invoca Make).requirements.txt (scripts de gráficos / tablas)../scripts/run_experiment.sh para analizar el JSON de los experimentos.Compile la imagen una vez:
./docker_build.sh
docker_run.sh — Contenedor interactivo: monta el repositorio en /workspace, asigna 8 CPUs (0–7), y le lleva a bash para que pueda compilar y ejecutar comandos manualmente.docker_run_all.sh — Ejecución en segundo plano: ejecuta ./scripts/run_all_experiment.sh dentro del contenedor (8 CPUs) y escribe la salida estándar en results/run_all.log.docker_run_all_single_cpu.sh — Igual que docker_run_all.sh pero con una CPU y OMP_NUM_THREADS=1 para ejecuciones de un solo hilo.Los tres usan la imagen pgm_poisoning:latest y la misma configuración de capacidades / volúmenes que en los scripts.
| Ruta | Función |
|---|
src/ | Fuentes C++ (ataques, benchmarks de PGM, herramientas, cotas superiores). |
configs/experiments/ | Configuraciones JSON de experimentos (rutas bajo poison_attack/, upper_bound/, etc.). |
scripts/ | Compilación, datos, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Submódulos de Git (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | Datos, salidas de ejecución y figuras / registros de tablas generados. |
plot/ | Scripts de trazado y generación de tablas en Python. |