Repo ini merupakan implementasi resmi dari AdvPrompter (arxiv:2404.16873).
Tolong? bintang? repo ini dan kutip makalah kami jika Anda menyukai (dan/atau menggunakan) karya kami, terima kasih!
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
Kami menggunakan hydra sebagai alat manajemen konfigurasi. File konfigurasi utama: ./conf/{train,eval,eval_suffix_dataset,base}.yaml
AdvPrompter dan TargetLLM ditentukan di conf/base.yaml, berbagai opsi telah diterapkan.
Basis kode secara opsional mendukung tongkat sihir dengan mengatur opsi yang sesuai di conf/base.yaml.
Berlari
python3 main.py --config-name=eval
untuk menguji kinerja AdvPrompter yang ditentukan terhadap TargetLLM pada kumpulan data tertentu. Anda harus menentukan TargetLLM dan AdvPrompter di conf/base.yaml. Selain itu, Anda mungkin ingin menentukan jalur ke peft_checkpoint jika AdvPrompter telah disempurnakan sebelumnya:
// lihat conf/prompter/llama2.yaml
lora_params:
awal yang hangat: benar
lora_checkpoint: "path_to_peft_checkpoint"
Sufiks yang dihasilkan selama evaluasi disimpan ke kumpulan data baru di bawah direktori run di ./exp/.../suffix_dataset
untuk digunakan nanti. Kumpulan data seperti itu juga dapat berguna untuk mengevaluasi garis dasar atau sufiks buatan tangan terhadap TargetLLM, dan dapat dievaluasi dengan menjalankan
python3 main.py --config-name=eval_suffix_dataset
setelah mengisi suffix_dataset_pth_dct
di eval_suffix_dataset.yaml
Berlari
python3 main.py --config-name=kereta
untuk melatih AdvPrompter yang ditentukan terhadap TargetLLM. Secara otomatis melakukan evaluasi yang ditentukan di atas secara berkala, dan juga menyimpan versi perantara AdvPrompter ke direktori run di bawah ./exp/.../checkpoints
untuk pemanasan nanti. Pos pemeriksaan dapat ditentukan dengan parameter lora_checkpoint
dalam konfigurasi model (seperti yang diilustrasikan dalam Evaluasi 1.1). Pelatihan juga menyimpan sufiks target yang dihasilkan dengan AdvPrompterOpt hingga ./exp/.../suffix_opt_dataset
untuk setiap periode. Hal ini memungkinkan prapelatihan pada kumpulan data sufiks tersebut dengan menentukan jalur yang sesuai di bawah pralatihan di train.yaml
Beberapa hyperparameter penting untuk dipertimbangkan di conf/train.yaml: [epochs, lr, top_k, num_chunks, lambda_val]
Catatan: Anda mungkin ingin mengganti target_llm.llm_params.checkpoint dengan jalur lokal.
Contoh 1: AdvPrompter di Vicuna-7B:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
Contoh 2: AdvPrompter di 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
Contoh 3: AdvPrompter di obrolan Mistral-7B:
python3 main.py --config-name=train target_llm=mistral_chat
Contoh 4: AdvPrompter di obrolan Llama2-7B:
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**
(* = Penulis pertama yang setara, ** = Penasihat yang setara)
Kode sumber kami berada di bawah lisensi CC-BY-NC 4.0.