repo นี้เป็นการดำเนินการอย่างเป็นทางการของ AdvPrompter (arxiv:2404.16873)
กรุณา ?ดาว? ซื้อคืนนี้และอ้างอิงบทความของเราหากคุณชอบ (และ/หรือใช้) งานของเรา ขอบคุณ!
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
เราใช้ไฮดราเป็นเครื่องมือการจัดการการกำหนดค่า ไฟล์กำหนดค่าหลัก: ./conf/{train,eval,eval_suffix_dataset,base}.yaml
มีการระบุ AdvPrompter และ TargetLLM ใน conf/base.yaml ตัวเลือกต่างๆ ได้ถูกนำไปใช้แล้ว
Codebase เลือกที่จะสนับสนุน wandb โดยการตั้งค่าตัวเลือกที่เกี่ยวข้องใน conf/base.yaml
วิ่ง
python3 main.py --config-name=eval
เพื่อทดสอบประสิทธิภาพของ AdvPrompter ที่ระบุกับ TargetLLM บนชุดข้อมูลที่กำหนด คุณจะต้องระบุ TargetLLM และ AdvPrompter ใน conf/base.yaml นอกจากนี้ คุณอาจต้องการระบุเส้นทางไปยัง peft_checkpoint หาก AdvPrompter ได้รับการปรับแต่งก่อนหน้านี้:
// ดู conf/prompter/llama2.yaml
lora_params:
อุ่นเครื่อง: จริง
lora_checkpoint: "path_to_peft_checkpoint"
ส่วนต่อท้ายที่สร้างขึ้นระหว่างการประเมินจะถูกบันทึกลงในชุดข้อมูลใหม่ภายใต้ run-directory ใน ./exp/.../suffix_dataset
เพื่อใช้ในภายหลัง ชุดข้อมูลดังกล่าวยังมีประโยชน์สำหรับการประเมินเส้นพื้นฐานหรือส่วนต่อท้ายที่สร้างขึ้นด้วยมือเทียบกับ TargetLLM และสามารถประเมินได้โดยการเรียกใช้
python3 main.py --config-name=eval_suffix_dataset
หลังจากเติม suffix_dataset_pth_dct
ใน eval_suffix_dataset.yaml
วิ่ง
python3 main.py --config-name=train
เพื่อฝึก AdvPrompter ที่ระบุกับ TargetLLM โดยจะทำการประเมินโดยอัตโนมัติตามที่ระบุไว้ข้างต้นในช่วงเวลาปกติ และยังบันทึก AdvPrompter เวอร์ชันกลางลงในไดเร็กทอรี run-directory ภายใต้ ./exp/.../checkpoints
เพื่อใช้ในการ warmstart ในภายหลัง จุดตรวจสอบสามารถระบุได้ด้วยพารามิเตอร์ lora_checkpoint
ในการกำหนดค่าโมเดล (ดังแสดงในการประเมิน 1.1) การฝึกอบรมยังบันทึกสำหรับแต่ละยุคส่วนต่อท้ายเป้าหมายที่สร้างด้วย AdvPrompterOpt เป็น . ./exp/.../suffix_opt_dataset
ซึ่งช่วยให้สามารถฝึกล่วงหน้ากับชุดข้อมูลของคำต่อท้ายดังกล่าวได้โดยการระบุเส้นทางที่สอดคล้องกันภายใต้การฝึกล่วงหน้าใน train.yaml
ไฮเปอร์พารามิเตอร์ที่สำคัญที่ควรพิจารณาใน conf/train.yaml: [epochs, lr, top_k, num_chunks, lambda_val]
หมายเหตุ: คุณอาจต้องการแทนที่ target_llm.llm_params.checkpoint ด้วยพาธในเครื่อง
ตัวอย่างที่ 1: AdvPrompter บน Vicuna-7B:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
ตัวอย่างที่ 2: AdvPrompter บน 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
ตัวอย่างที่ 3: AdvPrompter บน Mistral-7B-chat:
python3 main.py --config-name=train target_llm=mistral_chat
ตัวอย่างที่ 4: AdvPrompter บน Llama2-7B-chat:
python3 main.py --config-name=train target_llm=llama2_chat train.q_params.lambda_val=150
อันเซล์ม พอลลัส*, อาร์มาน ชาร์มาแกมเบทอฟ*, ชวน กัว, แบรนดอน อามอส**, หยวนตง เทียน**
(* = ผู้เขียนคนที่ 1 เท่ากัน, ** = การให้คำปรึกษาที่เท่าเทียมกัน)
ซอร์สโค้ดของเราอยู่ภายใต้ใบอนุญาต CC-BY-NC 4.0