Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HarmBench 1.0 update #19

Merged
merged 1 commit into from
Feb 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
211 changes: 44 additions & 167 deletions README.md

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions adversarial_training/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Efficient Adversarial Training with GCG

This folder contains the code for running our efficient adversarial training method with GCG. We use the [alignment handbook](https://github.com/huggingface/alignment-handbook) repository as a starting point and modify/add the following files:
- `./alignment-handbook/scripts/run_adv_training.sh`
- `./alignment-handbook/scripts/run_sft_adv_training.py`
- `./alignment-handbook/scripts/adv_training_utils.py`
- `./alignment-handbook/recipes/zephyr-7b-beta/sft_adv_training/config_full.yaml`
- `./alignment-handbook/recipes/accelerate_configs/deepspeed_config.yaml`

To start an adversarial training run, follow these setup steps:
- Modify `num_processes` in `./alignment-handbook/recipes/accelerate_configs/deepspeed_config.yaml` to the number of GPUs that you want to train on. Set `NUM_ACCELERATE_GPUS` in `./alignment-handbook/scripts/run_sft_adv_training.py` to match this value.
- Make sure `NUM_TEST_CASES_TO_UPDATE_PER_STEP` in `./alignment-handbook/scripts/run_sft_adv_training.py` is a multiple of `num_processes`.
- Make sure `NUM_SINGLE_BEHAVIOR_TEST_CASES` in `./alignment-handbook/scripts/run_sft_adv_training.py` is greater than or equal to `NUM_TEST_CASES_TO_UPDATE_PER_STEP`.
- Activate or create a new conda environment and install the requirements in `./alignment-handbook/requirements.txt`. The version of `alignment-handbook` that we use is a bit outdated now, so the code may not work without this step.

Then run the following commands:
```bash
cd alignment-handbook
# Step 1 - train SFT policy
ACCELERATE_LOG_LEVEL=info accelerate launch --config_file recipes/accelerate_configs/deepspeed_config.yaml scripts/run_sft_adv_training.py recipes/zephyr-7b-beta/sft_adv_training/config_full.yaml
```

We obtain the Zephyr 7B + R2D2 model that we evaluate in the paper using this code with the default arguments. The model in the paper is a snapshot after 2000 steps and is available here: [🤗 cais/zephyr_7b_r2d2](https://huggingface.co/cais/zephyr_7b_r2d2).
110 changes: 110 additions & 0 deletions adversarial_training/alignment-handbook/.deepspeed_env
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
ACCELERATE_LOG_LEVEL=info
SLURM_JOB_START_TIME=1702773567
SLURM_NODELIST=compute-permanent-node-[912,918]
MANPATH=/opt/rh/devtoolset-10/root/usr/share/man:/opt/rh/devtoolset-10/root/usr/share/man:
SLURM_JOB_GROUP=cais
SLURM_JOB_NAME=bash
NIX_CONF_DIR=/nix
XDG_SESSION_ID=319164
SLURMD_NODENAME=compute-permanent-node-912
SLURM_TOPOLOGY_ADDR=watch-tower.watch-tower:e831b899bdc3fa32e7ab403b.compute-permanent-node-912
HOSTNAME=watch-tower-login
SPACK_ROOT=/nfs/cluster/spack
SLURM_PRIO_PROCESS=0
SLURM_SRUN_COMM_PORT=44003
SLURM_GPUS_ON_NODE=4
SHELL=/bin/bash
TERM=screen
SLURM_JOB_QOS=default_qos
SLURM_PTY_WIN_ROW=50
HISTSIZE=1000
TMPDIR=/tmp
SLURM_TOPOLOGY_ADDR_PATTERN=switch.switch.node
CONDA_SHLVL=2
SLURM_CPU_BIND_VERBOSE=quiet
SLURM_JOB_END_TIME=1702802367
SSH_TTY=/dev/pts/115
SLURM_CPU_BIND_LIST=0x000C0000001C00000007000000000000
QT_GRAPHICSSYSTEM_CHECKED=1
PCP_DIR=/opt/rh/devtoolset-10/root
ROCR_VISIBLE_DEVICES=0,1,2,3
SLURM_NNODES=2
USER=mantas_mazeika
LD_LIBRARY_PATH=/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib
CONDA_EXE=/data/mantas_mazeika/miniconda3/bin/conda
SLURM_STEP_NUM_NODES=2
SLURM_JOBID=1002070
SRUN_DEBUG=3
SLURM_NTASKS=2
SLURM_LAUNCH_NODE_IPADDR=172.16.0.238
SLURM_STEP_ID=0
TMUX=/tmp/tmux-10039/default,18526,0
SLURMD_DEBUG=2
_CE_CONDA=
CONDA_PREFIX_1=/data/mantas_mazeika/miniconda3
SLURM_STEP_LAUNCHER_PORT=44003
SLURM_TASKS_PER_NODE=1(x2)
MAIL=/var/spool/mail/mantas_mazeika
PATH=/opt/rh/devtoolset-10/root/usr/bin:/data/mantas_mazeika/software:/data/mantas_mazeika/.nix-profile/bin:/opt/rh/devtoolset-10/root/usr/bin:/data/mantas_mazeika/software:/data/mantas_mazeika/.nix-profile/bin:/data/mantas_mazeika/software:/nix/var/nix/profiles/default/bin:/data/mantas_mazeika/.nix-profile/bin:/data/mantas_mazeika/software:/data/mantas_mazeika/miniconda3/envs/pytorch2/bin:/data/mantas_mazeika/miniconda3/condabin:/nix/var/nix/profiles/default/bin:/data/mantas_mazeika/.nix-profile/bin:/nfs/cluster/spack/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/lib/snapd/snap/bin:/data/mantas_mazeika/.local/bin:/data/mantas_mazeika/bin:/data/mantas_mazeika/.local/bin:/data/mantas_mazeika/bin
SLURM_WORKING_CLUSTER=cluster:watch-tower-bastion:6817:9984:109
SLURM_CONF=/var/spool/slurmd/conf-cache/slurm.conf
SLURM_JOB_ID=1002070
SLURM_STEP_GPUS=0,1,5,7
CONDA_PREFIX=/data/mantas_mazeika/miniconda3/envs/pytorch2
SLURM_JOB_USER=mantas_mazeika
SLURM_STEPID=0
PWD=/data/mantas_mazeika/projects/2023/red_teaming_benchmark/redbench/adv_training/trainer_code/alignment-handbook
CUDA_VISIBLE_DEVICES=0,1,2,3
SLURM_SRUN_COMM_HOST=172.16.0.238
SLURM_CPU_BIND_TYPE=mask_cpu:
LANG=en_US.UTF-8
SLURM_PTY_WIN_COL=186
SLURM_UMASK=0022
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
SLURM_JOB_UID=10039
LOADEDMODULES=
SLURM_NODEID=0
TMUX_PANE=%7
SLURM_SUBMIT_DIR=/data/mantas_mazeika
SLURM_TASK_PID=185982
ZE_AFFINITY_MASK=0,1,2,3
SLURM_NPROCS=2
SLURM_CPUS_ON_NODE=8
SLURM_PROCID=0
HISTCONTROL=ignoredups
_CE_M=
SLURM_JOB_NODELIST=compute-permanent-node-[912,918]
SLURM_PTY_PORT=40162
HOME=/data/mantas_mazeika
SHLVL=7
SLURM_LOCALID=0
SLURM_JOB_GID=10011
SLURM_JOB_CPUS_PER_NODE=8(x2)
SLURM_CLUSTER_NAME=cluster
SLURM_GTIDS=0
SLURM_SUBMIT_HOST=watch-tower-login
SLURM_JOB_PARTITION=cais
CONDA_PYTHON_EXE=/data/mantas_mazeika/miniconda3/bin/python
LOGNAME=mantas_mazeika
SLURM_STEP_NUM_TASKS=2
GPU_DEVICE_ORDINAL=0,1,2,3
SLURM_JOB_ACCOUNT=cais
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SLURM_JOB_NUM_NODES=2
MODULESHOME=/usr/share/Modules
PKG_CONFIG_PATH=/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig:/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig
CONDA_DEFAULT_ENV=pytorch2
SLURM_STEP_TASKS_PER_NODE=1(x2)
SLURM_GPUS_PER_NODE=4
INFOPATH=/opt/rh/devtoolset-10/root/usr/share/info:/opt/rh/devtoolset-10/root/usr/share/info
SLURM_STEP_NODELIST=compute-permanent-node-[912,918]
SPACK_PYTHON=/usr/bin/python3
XDG_RUNTIME_DIR=/run/user/10039
SLURM_CPU_BIND=quiet,mask_cpu:0x000C0000001C00000007000000000000
_=/data/mantas_mazeika/miniconda3/envs/pytorch2/bin/accelerate
PYTHONPATH=/data/mantas_mazeika/projects/2023/red_teaming_benchmark/redbench/adv_training/trainer_code/alignment-handbook
ACCELERATE_MIXED_PRECISION=no
ACCELERATE_CONFIG_DS_FIELDS=deepspeed_config_file,zero3_init_flag
ACCELERATE_USE_DEEPSPEED=true
ACCELERATE_DEEPSPEED_ZERO3_INIT=false
ACCELERATE_DEEPSPEED_CONFIG_FILE=/data/mantas_mazeika/projects/2023/LLM-trojan-dataset/deepspeed_config.json
164 changes: 164 additions & 0 deletions adversarial_training/alignment-handbook/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/

# Temp folders
data/
wandb/
Loading