
Код исследования атак отравления на PGM-index, демонстрирующий, как создавать состязательные данные для деградации производительности обученных индексов.
Официальный код для нашей статьи Poisoning Attacks on the PGM-index.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
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 экспериментов.Соберите образ один раз:
./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 и те же настройки capabilities / томов, что и в скриптах.
| Путь | Назначение |
|---|
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-скрипты для построения графиков и вывода таблиц. |