Dieses Repo ist eine offizielle Implementierung von AdvPrompter (arxiv:2404.16873).
Bitte ?Stern? Lesen Sie dieses Repo und zitieren Sie unseren Artikel, wenn Ihnen unsere Arbeit gefällt (und/oder Sie sie nutzen), vielen Dank!
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
Wir verwenden Hydra als Konfigurationsmanagement-Tool. Hauptkonfigurationsdateien: ./conf/{train,eval,eval_suffix_dataset,base}.yaml
Der AdvPrompter und das TargetLLM sind in conf/base.yaml angegeben, verschiedene Optionen sind bereits implementiert.
Die Codebasis unterstützt optional Wandb, indem die entsprechenden Optionen in conf/base.yaml festgelegt werden.
Laufen
python3 main.py --config-name=eval
um die Leistung des angegebenen AdvPrompter im Vergleich zum TargetLLM für einen bestimmten Datensatz zu testen. Sie müssen TargetLLM und AdvPrompter in conf/base.yaml angeben. Außerdem möchten Sie möglicherweise einen Pfad zu peft_checkpoint angeben, wenn AdvPrompter zuvor feinabgestimmt wurde:
// siehe conf/prompter/llama2.yaml
lora_params:
Warmstart: wahr
lora_checkpoint: „path_to_peft_checkpoint“
Die während der Auswertung generierten Suffixe werden zur späteren Verwendung in einem neuen Datensatz im Ausführungsverzeichnis in ./exp/.../suffix_dataset
gespeichert. Ein solcher Datensatz kann auch für die Bewertung von Baselines oder handgefertigten Suffixen anhand eines TargetLLM nützlich sein und kann durch Ausführen ausgewertet werden
python3 main.py --config-name=eval_suffix_dataset
nach dem Auffüllen von suffix_dataset_pth_dct
in eval_suffix_dataset.yaml
Laufen
python3 main.py --config-name=train
um den angegebenen AdvPrompter gegen das TargetLLM zu trainieren. Es führt automatisch die oben angegebene Auswertung in regelmäßigen Abständen durch und speichert außerdem Zwischenversionen des AdvPrompter im Ausführungsverzeichnis unter ./exp/.../checkpoints
für einen späteren Warmstart. Der Prüfpunkt kann mit dem Parameter lora_checkpoint
in den Modellkonfigurationen angegeben werden (wie in 1.1 Bewertung dargestellt). Das Training speichert außerdem für jede Epoche die mit AdvPrompterOpt generierten Zielsuffixe in ./exp/.../suffix_opt_dataset
. Dies ermöglicht ein Vortraining für einen solchen Datensatz von Suffixen, indem der entsprechende Pfad unter „Pretrain“ in train.yaml
angegeben wird
Einige wichtige Hyperparameter, die in conf/train.yaml berücksichtigt werden sollten: [epochs, lr, top_k, num_chunks, lambda_val]
Hinweis: Möglicherweise möchten Sie target_llm.llm_params.checkpoint durch einen lokalen Pfad ersetzen.
Beispiel 1: AdvPrompter auf Vicuna-7B:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
Beispiel 2: AdvPrompter auf 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
Beispiel 3: AdvPrompter im Mistral-7B-Chat:
python3 main.py --config-name=train target_llm=mistral_chat
Beispiel 4: AdvPrompter im 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**
(* = Gleiche Erstautoren, ** = Gleiche Beratung)
Unser Quellcode steht unter der CC-BY-NC 4.0-Lizenz.