يعد هذا الريبو تطبيقًا رسميًا لـ 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، وقد تم بالفعل تنفيذ خيارات متنوعة.
تدعم قاعدة التعليمات البرمجية اختياريًا 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_checkpoint: "path_to_peft_checkpoint"
يتم حفظ اللواحق التي تم إنشاؤها أثناء التقييم في مجموعة بيانات جديدة ضمن دليل التشغيل في ./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 في دليل التشغيل ضمن ./exp/.../checkpoints
لبدء التشغيل الدافئ لاحقًا. يمكن تحديد Checkpoint باستخدام المعلمة 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:
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
أنسيلم بولوس*، أرمان زارماغامبيتوف*، تشوان غو، براندون آموس**، يواندونغ تيان**
(* = المؤلفان الأولان متساويان، ** = الاستشارة متساوية)
كود المصدر الخاص بنا يخضع لترخيص CC-BY-NC 4.0.