该存储库是AdvPrompter的官方实现 (arxiv:2404.16873)。
请加星标?如果您喜欢(和/或使用)我们的工作,请将此存储库并引用我们的论文,谢谢!
conda create -n advprompter python=3.11.4
conda activate advprompter
pip install -r requirements.txt
我们使用 Hydra 作为配置管理工具。主要配置文件: ./conf/{train,eval,eval_suffix_dataset,base}.yaml
AdvPrompter 和 TargetLLM 在 conf/base.yaml 中指定,各种选项已经实现。
通过在conf/base.yaml中设置相应的选项,代码库可以选择支持wandb。
跑步
python3 main.py --config-name=eval
在给定数据集上针对 TargetLLM 测试指定 AdvPrompter 的性能。您必须在conf/base.yaml 中指定TargetLLM 和AdvPrompter。另外,如果 AdvPrompter 之前经过微调,您可能需要指定 peft_checkpoint 的路径:
// 参见conf/prompter/llama2.yaml
洛拉参数:
热启动:真
lora_checkpoint:“path_to_peft_checkpoint”
评估期间生成的后缀将保存到./exp/.../suffix_dataset
中运行目录下的新数据集以供以后使用。这样的数据集对于根据 TargetLLM 评估基线或手工制作的后缀也很有用,并且可以通过运行来评估
python3 main.py --config-name=eval_suffix_dataset
在eval_suffix_dataset.yaml
中填充suffix_dataset_pth_dct
后
跑步
python3 main.py --config-name=train
根据 TargetLLM 训练指定的 AdvPrompter。它会定期自动执行上面指定的评估,并且还将 AdvPrompter 的中间版本保存到./exp/.../checkpoints
下的运行目录中,以供以后热启动。检查点可以使用模型配置中的lora_checkpoint
参数指定(如 1.1 评估中所示)。训练还将每个时期使用 AdvPrompterOpt 生成的目标后缀保存到./exp/.../suffix_opt_dataset
。这允许通过在train.yaml
中的 pretrain 下指定相应的路径来对这样的后缀数据集进行预训练
conf/train.yaml 中需要考虑的一些重要超参数: [epochs, lr, top_k, num_chunks, lambda_val]
注意:您可能需要将 target_llm.llm_params.checkpoint 替换为本地路径。
示例 1: Vicuna-7B 上的 AdvPrompter:
python3 main.py --config-name=train target_llm=vicuna_chat target_llm.llm_params.model_name=vicuna-7b-v1.5
示例 2: Vicuna-13B 上的 AdvPrompter:
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: Mistral-7B-chat 上的 AdvPrompter:
python3 main.py --config-name=train target_llm=mistral_chat
示例 4: Llama2-7B-chat 上的 AdvPrompter:
python3 main.py --config-name=train target_llm=llama2_chat train.q_params.lambda_val=150
安塞姆·保卢斯*、阿曼·扎尔甘贝托夫*、郭传、布兰登·阿莫斯**、田远东**
(* = 同等第一作者,** = 同等建议)
我们的源代码采用 CC-BY-NC 4.0 许可。