
Код исследования атак отравления на PGM-index, демонстрирующий, как создавать состязательные данные для деградации производительности обученных индексов.
Официальный код для нашей статьи Poisoning Attacks on the PGM-index.
git clone https://github.com/atsukisato/pgm-attack.git
cd pgm-attack
git submodule update --init --recursive
./scripts/build.sh
Требуется CMake (см. раздел «Зависимости»). Результаты сборки размещаются в build/ (по умолчанию бинарные файлы в build/bin).
./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
Каждый запуск принимает один JSON-конфиг через ./scripts/run_experiment.sh <config.json>. Примеры:
4.1 Максимизация максимальной ошибки (например, n=16, последовательный метод)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 Минимизация покрытых легитимных ключей (например, epsilon=2, последовательный метод)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 Максимизация m_opt (пример с PGM-index)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 Верхняя граница для m_opt (пример, зависящий от экземпляра)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 Запуск всех экспериментов (пакетно)
Запускает полный список конфигов экспериментов из scripts/run_all_experiment.sh (отредактируйте этот файл, чтобы изменить набор).
./scripts/run_all_experiment.sh
Из корня репозитория:
./scripts/plot.sh
./scripts/print_table.sh
Графики и логи записываются в fig/. Сначала установите зависимости Python: pip install -r requirements.txt.
g++, make и CMake (скрипт сборки настраивает проект через CMake и собирает с помощью cmake --build, что обычно вызывает Make).requirements.txt (скрипты построения графиков и таблиц)../scripts/run_experiment.sh для разбора JSON экспериментов.| Путь | Назначение |
|---|---|
src/ | Исходники C++ (атаки, бенчмарки PGM, инструменты, верхние границы). |
configs/experiments/ | JSON-конфиги экспериментов (пути в poison_attack/, upper_bound/ и т. д.). |
scripts/ | Сборка, данные, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Git-подмодули (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | Данные, результаты запусков и сгенерированные графики / логи таблиц. |
plot/ | Python-скрипты построения графиков и печати таблиц. |
Соберите образ один раз:
./docker_build.sh
docker_run.sh — интерактивный контейнер: монтирует репозиторий в /workspace, выделяет 8 CPU (0–7), запускает bash, чтобы вы могли вручную собирать и запускать команды.docker_run_all.sh — запуск в фоне: выполняет ./scripts/run_all_experiment.sh внутри контейнера (8 CPU) и записывает stdout в results/run_all.log.docker_run_all_single_cpu.sh — то же, что docker_run_all.sh, но с одним CPU и OMP_NUM_THREADS=1 для однопоточных запусков.Все три используют образ pgm_poisoning:latest и те же настройки возможностей / томов, что и в скриптах.