Este repositorio es una implementación oficial de AdvPrompter (arxiv:2404.16873).
¿Por favor? ¿estrella? este repositorio y cite nuestro artículo si le gusta (y/o utiliza) nuestro trabajo, ¡gracias!
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
Usamos Hydra como herramienta de gestión de configuración. Archivos de configuración principales: ./conf/{train,eval,eval_suffix_dataset,base}.yaml
AdvPrompter y TargetLLM se especifican en conf/base.yaml, varias opciones ya están implementadas.
El código base admite opcionalmente wandb configurando las opciones correspondientes en conf/base.yaml.
Correr
python3 main.py --config-name=eval
para probar el rendimiento del AdvPrompter especificado frente al TargetLLM en un conjunto de datos determinado. Tendrás que especificar TargetLLM y AdvPrompter en conf/base.yaml. Además, es posible que desee especificar una ruta a peft_checkpoint si AdvPrompter se ajustó antes:
// ver conf/prompter/llama2.yaml
lora_params:
arranque en caliente: verdadero
lora_checkpoint: "ruta_al_peft_checkpoint"
Los sufijos generados durante la evaluación se guardan en un nuevo conjunto de datos en el directorio de ejecución en ./exp/.../suffix_dataset
para su uso posterior. Un conjunto de datos de este tipo también puede ser útil para evaluar líneas de base o sufijos hechos a mano contra un TargetLLM, y se puede evaluar ejecutando
python3 main.py --config-name=eval_suffix_dataset
después de completar suffix_dataset_pth_dct
en eval_suffix_dataset.yaml
Correr
python3 main.py --config-name=tren
para entrenar el AdvPrompter especificado contra TargetLLM. Realiza automáticamente la evaluación especificada anteriormente en intervalos regulares y también guarda las versiones intermedias de AdvPrompter en el directorio de ejecución en ./exp/.../checkpoints
para un inicio en caliente posterior. El punto de control se puede especificar con el parámetro lora_checkpoint
en las configuraciones del modelo (como se ilustra en 1.1 Evaluación). El entrenamiento también guarda para cada época los sufijos de destino generados con AdvPrompterOpt en ./exp/.../suffix_opt_dataset
. Esto permite el entrenamiento previo en dicho conjunto de datos de sufijos especificando la ruta correspondiente en pretrain en train.yaml
Algunos hiperparámetros importantes a considerar en conf/train.yaml: [epochs, lr, top_k, num_chunks, lambda_val]
Nota: es posible que desee reemplazar target_llm.llm_params.checkpoint con una ruta local.
Ejemplo 1: AdvPrompter en Vicuña-7B:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
Ejemplo 2: AdvPrompter en Vicuña-13B:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-13b-v1.5 target_llm.llm_params.checkpoint=lmsys/vicuna-13b-v1.5 train.q_params.num_chunks=2
Ejemplo 3: AdvPrompter en Mistral-7B-chat:
python3 main.py --config-name=train target_llm=mistral_chat
Ejemplo 4: AdvPrompter en Llama2-7B-chat:
python3 main.py --config-name=train target_llm=llama2_chat train.q_params.lambda_val=150
Anselm Paulus*, Arman Zharmagambetov*, Chuan Guo, Brandon Amos**, Yuandong Tian**
(* = Iguales 1º autores, ** = Iguales asesoramiento)
Nuestro código fuente está bajo licencia CC-BY-NC 4.0.