Ce dépôt est une implémentation officielle d' AdvPrompter (arxiv:2404.16873).
S'il vous plaît ?étoile ? ce dépôt et citez notre article si vous aimez (et/ou utilisez) notre travail, merci !
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
Nous utilisons Hydra comme outil de gestion de configuration. Principaux fichiers de configuration : ./conf/{train,eval,eval_suffix_dataset,base}.yaml
L'AdvPrompter et le TargetLLM sont spécifiés dans conf/base.yaml, diverses options sont déjà implémentées.
La base de code prend éventuellement en charge wandb en définissant les options correspondantes dans conf/base.yaml.
Courir
python3 main.py --config-name=eval
pour tester les performances de l'AdvPrompter spécifié par rapport au TargetLLM sur un ensemble de données donné. Vous devrez spécifier TargetLLM et AdvPrompter dans conf/base.yaml. En outre, vous souhaiterez peut-être spécifier un chemin vers peft_checkpoint si AdvPrompter a été réglé auparavant :
// voir conf/prompter/llama2.yaml
lora_params :
démarrage à chaud : vrai
lora_checkpoint : "path_to_peft_checkpoint"
Les suffixes générés lors de l'évaluation sont enregistrés dans un nouvel ensemble de données sous le répertoire d'exécution dans ./exp/.../suffix_dataset
pour une utilisation ultérieure. Un tel ensemble de données peut également être utile pour évaluer des lignes de base ou des suffixes créés à la main par rapport à un TargetLLM, et il peut être évalué en exécutant
python3 main.py --config-name=eval_suffix_dataset
après avoir rempli le suffix_dataset_pth_dct
dans eval_suffix_dataset.yaml
Courir
python3 main.py --config-name=train
pour entraîner l'AdvPrompter spécifié par rapport au TargetLLM. Il effectue automatiquement l'évaluation spécifiée ci-dessus à intervalles réguliers et enregistre également les versions intermédiaires d'AdvPrompter dans le répertoire d'exécution sous ./exp/.../checkpoints
pour un démarrage à chaud ultérieur. Le point de contrôle peut être spécifié avec le paramètre lora_checkpoint
dans les configurations du modèle (comme illustré dans 1.1 Évaluation). La formation enregistre également pour chaque époque les suffixes cibles générés avec AdvPrompterOpt dans ./exp/.../suffix_opt_dataset
. Cela permet le pré-entraînement sur un tel ensemble de données de suffixes en spécifiant le chemin correspondant sous pré-entraînement dans train.yaml
Quelques hyperparamètres importants à prendre en compte dans conf/train.yaml : [epochs, lr, top_k, num_chunks, lambda_val]
Remarque : vous souhaiterez peut-être remplacer target_llm.llm_params.checkpoint par un chemin local.
Exemple 1 : AdvPrompter sur Vicuna-7B :
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
Exemple 2 : AdvPrompter sur Vicuna-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
Exemple 3 : AdvPrompter sur le chat Mistral-7B :
python3 main.py --config-name=train target_llm=mistral_chat
Exemple 4 : AdvPrompter sur 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**
(* = 1ers auteurs égaux, ** = conseils égaux)
Notre code source est sous licence CC-BY-NC 4.0.