يوفر هذا المستودع الرمز لورقة تعليماتنا بعنوان خسارة على التعليمات ، مما يجعل تكامل مساهمات الكود لدينا في مشاريع أخرى يمكن الوصول إليها.

تحدد دراستنا كذلك العوامل الرئيسية التي تؤثر على فعالية نمذجة التعليمات: (1) النسبة بين طول التعليمات وطول الخرج. (الشكل الأيسر). (2) عدد أمثلة التدريب. (الشكل الصحيح).
يمكنك إعادة إنتاج تجارب ضبط تعليمات الورق لدينا مع فقدان التعليمات.
يلعب ضبط التعليمات التجريدية دورًا حاسمًا في تشكيل مخرجات نماذج اللغة (LMS) على الأساليب المرغوبة. في هذا العمل ، نقترح طريقة بسيطة وفعالة ، نمذجة التعليمات (IM) ، التي تدرب LMS عن طريق تطبيق وظيفة الخسارة على التعليمات والجزء المطري بدلاً من جزء الإخراج فقط. من خلال التجارب عبر 21 معايير متنوعة ، نوضح أنه في العديد من السيناريوهات ، يمكن أن تحسن بشكل فعال أداء LM في كل من مهام NLP (على سبيل المثال ، MMLU ، reultfulqa ، و Humaneval) ومعايير الجيل المفتوح (على سبيل المثال ، MT-Bench و Alpacaeval). بشكل ملحوظ ، في الحالات الأكثر فائدة ، يعزز IM أداء النموذج على Alpacaeval 1.0 بأكثر من 100 ٪. نحدد عاملين رئيسيين يؤثران على فعالية IM: (1) النسبة بين طول التعليمات وطول الخرج في بيانات التدريب ؛ و (2) عدد أمثلة التدريب. نلاحظ أن IM مفيد بشكل خاص عند تدريبه على مجموعات البيانات مع تعليمات طويلة مقترنة بمخرجات موجزة ، أو تحت فرضية المحاذاة السطحية (SAH) حيث يتم استخدام كمية صغيرة من الأمثلة التدريبية لضبط التعليمات. يثبت إجراء مزيد من التحليل فرضيتنا بأن التحسن يمكن أن يعزى إلى تقليل المفرط إلى مجموعات بيانات ضبط التعليمات. يوفر عملنا إرشادات عملية لتوليف التعليمات ، خاصة في سيناريوهات الموارد المنخفضة.
لتثبيت الحزم المطلوبة لنهج خط الأساس لدينا (النهج شبه الخاضعة للإشراف) ، يمكنك تشغيل الأمر التالي.
conda create -n sft python=3.10
conda activate sft
pip install -r requirements.txt بالنسبة لبيانات التدريب ، قدمنا البيانات المعالجة في دليل data لـ 7 مجموعات بيانات ضبط التعليمات. يمكنك تنزيل بيانات أخرى من الروابط التالية:
sh prepare_train_data.shبالإضافة إلى ذلك ، نقوم بتنزيل بيانات أقل من بيانات Princeton NLP أقل.
لتنزيل بيانات مجموعة بيانات Alpagasus ، يمكنك تشغيل الأمر التالي.
sh prepare_alpagasus_data.shنحن هنا نقدم التعليمات لتدريب النماذج لضبط التعليمات القياسية ونمذجة التعليمات (لدينا) والنماذج الأساسية.
لتدريب نموذج ضبط التعليمات ، يمكنك تشغيل الأمر التالي.
export CUDA_VISIBLE_DEVICES=0,1
MODEL_SIZE=7b
NUM_GPUS=2
BATCH_SIZE_PER_GPU=1
TOTAL_BATCH_SIZE=128
EPOCH=2
MAX_LENGTH=2048
GRADIENT_ACC_STEPS= $(( $TOTAL_BATCH_SIZE / $NUM_GPUS / $BATCH_SIZE_PER_GPU ))
echo " Training llama model ${MODEL_SIZE} using $NUM_GPUS GPUs, $BATCH_SIZE_PER_GPU batch size per GPU, $GRADIENT_ACC_STEPS gradient accumulation steps "
DATA_NAME_LIST=(
lima_data
alpagasus_3k_dolly
alpagasus_9k_dolly
alpagasus_claude_t45_alpaca
tydiqa
mmlu_chat
bbh_icl
)
DATASET_PATH_LIST=(
lima_data
alpagasus_3k_dolly
alpagasus_9k_dolly
alpagasus_claude_t45_alpaca
tydiqa_adam_sim_trainp0.05_seed3_p0.05
mmlu-chat_adam_sim_trainp0.05_seed3_p0.05
bbh-icl_adam_sim_trainp0.05_seed3_p0.05
)
for i in " ${ ! DATA_NAME_LIST[@]} " ; do
DATA_NAME= ${DATA_NAME_LIST[i]}
DATASET_PATH= ${DATASET_PATH_LIST[i]}
for LR in 2e-5 ; do
DATA_PATH=data/ ${DATASET_PATH} .jsonl
OUTPUT_DIR=model/ ${DATA_NAME} _llama2_ ${MODEL_SIZE} _bs ${TOTAL_BATCH_SIZE} _lr ${LR} _ml ${MAX_LENGTH} _ep ${EPOCH} _bf16
printf ' %qn%qn%qn%qn ' " $DATA_NAME " " $DATASET_PATH " " $DATA_PATH " " $OUTPUT_DIR "
accelerate launch
--mixed_precision bf16
--num_machines 1
--num_processes $NUM_GPUS
--use_deepspeed
--main_process_port 29521
--deepspeed_config_file ds_configs/stage3_no_offloading_accelerate.conf
src/finetune.py
--model_name_or_path meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_flash_attn
--tokenizer_name meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_slow_tokenizer
--train_file ${DATA_PATH}
--max_seq_length ${MAX_LENGTH}
--preprocessing_num_workers 16
--per_device_train_batch_size $BATCH_SIZE_PER_GPU
--gradient_accumulation_steps $GRADIENT_ACC_STEPS
--learning_rate ${LR}
--lr_scheduler_type linear
--warmup_ratio 0.03
--weight_decay 0.
--checkpointing_steps epoch
--num_train_epochs ${EPOCH}
--output_dir ${OUTPUT_DIR}
--with_tracking
--report_to tensorboard
--logging_steps 1 ;
done ;
doneلتدريب نموذج نمذجة التعليمات ، يمكنك تشغيل الأمر التالي. هذه هي طريقتنا المقترحة.
for i in " ${ ! DATA_NAME_LIST[@]} " ; do
DATA_NAME= ${DATA_NAME_LIST[i]}
DATASET_PATH= ${DATASET_PATH_LIST[i]}
for LR in 2e-5 ; do
DATA_PATH=data/ ${DATASET_PATH} .jsonl
OUTPUT_DIR=model/ ${DATA_NAME} _llama2_ ${MODEL_SIZE} _bs ${TOTAL_BATCH_SIZE} _lr ${LR} _ml ${MAX_LENGTH} _ep ${EPOCH} _bf16_im
printf ' %qn%qn%qn%qn ' " $DATA_NAME " " $DATASET_PATH " " $DATA_PATH " " $OUTPUT_DIR "
accelerate launch
--mixed_precision bf16
--num_machines 1
--num_processes $NUM_GPUS
--use_deepspeed
--deepspeed_config_file ds_configs/stage3_no_offloading_accelerate.conf
src/finetune.py
--model_name_or_path meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_flash_attn
--tokenizer_name meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_slow_tokenizer
--train_file ${DATA_PATH}
--max_seq_length ${MAX_LENGTH}
--preprocessing_num_workers 16
--per_device_train_batch_size $BATCH_SIZE_PER_GPU
--gradient_accumulation_steps $GRADIENT_ACC_STEPS
--learning_rate ${LR}
--lr_scheduler_type linear
--warmup_ratio 0.03
--weight_decay 0.
--checkpointing_steps epoch
--num_train_epochs ${EPOCH}
--output_dir ${OUTPUT_DIR}
--with_tracking
--report_to tensorboard
--logging_steps 1
--use_lm_loss ;
done ;
doneلتدريب النماذج الأساسية (Neftune) ، يمكنك تشغيل الأمر التالي.
NEFTUNE_ALPHA=5
for i in " ${ ! DATA_NAME_LIST[@]} " ; do
DATA_NAME= ${DATA_NAME_LIST[i]}
DATASET_PATH= ${DATASET_PATH_LIST[i]}
for LR in 2e-5 ; do
DATA_PATH=data/ ${DATASET_PATH} .jsonl
OUTPUT_DIR=model/ ${DATA_NAME} _llama2_ ${MODEL_SIZE} _bs ${TOTAL_BATCH_SIZE} _lr ${LR} _ml ${MAX_LENGTH} _ep ${EPOCH} _bf16_alpha ${NEFTUNE_ALPHA}
printf ' %qn%qn%qn%qn ' " $DATA_NAME " " $DATASET_PATH " " $DATA_PATH " " $OUTPUT_DIR "
accelerate launch
--mixed_precision bf16
--num_machines 1
--num_processes $NUM_GPUS
--use_deepspeed
--deepspeed_config_file ds_configs/stage3_no_offloading_accelerate.conf
src/finetune.py
--model_name_or_path meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_flash_attn
--tokenizer_name meta-llama/Llama-2- ${MODEL_SIZE} -hf
--use_slow_tokenizer
--train_file ${DATA_PATH}
--max_seq_length ${MAX_LENGTH}
--preprocessing_num_workers 16
--per_device_train_batch_size $BATCH_SIZE_PER_GPU
--gradient_accumulation_steps $GRADIENT_ACC_STEPS
--learning_rate ${LR}
--lr_scheduler_type linear
--warmup_ratio 0.03
--weight_decay 0.
--checkpointing_steps epoch
--num_train_epochs ${EPOCH}
--output_dir ${OUTPUT_DIR}
--with_tracking
--report_to tensorboard
--logging_steps 1
--neftune_alpha ${NEFTUNE_ALPHA} ;
done ;
done نحن هنا نقدم التعليمات لتقييم النماذج لضبط التعليمات القياسية ، ونمذجة التعليمات (لدينا) ، والنماذج الأساسية. نقوم بإجراء التقييم باستخدام مستودع المصدر المفتوح Fastchat ، LLM-Evaluation-Harness ، alpacaeval. يرجى الرجوع إلى المستودعات المعنية لمزيد من التفاصيل. يرجى تثبيت الحزم المطلوبة للتقييم.
لتقييم النموذج في مهام NLP التقليدية ، يمكنك تشغيل الأمر التالي.
CUDA_VISIBLE_DEVICES=0,1
MODELS_0=(
mmlu_chat_llama2_13b_bs128_lr2e-5_ml1024_ep2_bf16_im
)
(
for model in ${MODELS_0} ; do
echo " Evaluating $model "
MODEL_PATH= ${BASE_PATH} /model/ ${model}
echo ${MODEL_PATH}
accelerate launch --mixed_precision bf16 --multi_gpu -m lm_eval --model hf
--model_args pretrained= ${MODEL_PATH} ,max_length= ${MAX_LENGTH}
--tasks sft_eval
--batch_size auto
--write_out
--show_config
--output_path output/ ${model}
--log_samples
# CODEX: Evaluating using temperature 0.1 to get the pass@1 score
python -m eval.codex_humaneval.run_eval
--data_file ${BASE_PATH} /data/eval/codex_humaneval/HumanEval.jsonl.gz
--eval_pass_at_ks 1
--unbiased_sampling_size_n 20
--temperature 0.1
--save_dir results_humaneval/ ${model} _t01
--model ${MODEL_PATH}
--tokenizer ${MODEL_PATH}
--use_vllm
# CODEX: Evaluating using temperature 0.8 to get the pass@10 score
python -m eval.codex_humaneval.run_eval
--data_file ${BASE_PATH} /data/eval/codex_humaneval/HumanEval.jsonl.gz
--eval_pass_at_ks 1
--unbiased_sampling_size_n 20
--temperature 0.7
--save_dir results_humaneval/ ${model} _t07
--model ${MODEL_PATH}
--tokenizer ${MODEL_PATH}
--use_vllm ;
done
)لتقييم النموذج على مجموعة بيانات MT-Bench ، يمكنك تشغيل الأمر التالي.
MODELS=mmlu_chat_llama2_13b_bs128_lr2e-5_ml1024_ep2_bf16_im
cd FastChat/fastchat/llm_judge
for model in $MODELS ; do
echo " Evaluating $model "
echo " Firstly, Generate model answers to MT-bench questions "
python gen_model_answer.py --model-path ${MODEL_PATH} / ${model} --model-id ${model}
echo " ≈, Evaluate model answers using OpenAI API "
python gen_judgment.py --model-list ${model} --parallel 2 ;
done
# To show the results
cd FastChat/fastchat/llm_judge
python show_result.py
python show_result.py --model-list model_name1 model_name2 # to show the results of the specified models
cd ../../../لتقييم النموذج على مجموعة بيانات Alpacaeval ، يمكنك تشغيل الأمر التالي.
MODELS=mmlu_chat_llama2_13b_bs128_lr2e-5_ml1024_ep2_bf16_im
export IS_ALPACA_EVAL_2=False
for model in $MODELS ; do
CUDA_VISIBLE_DEVICES=0 python -m eval.alpaca_farm.run_eval
--model_name_or_path ${BASE_PATH} / ${model}
--save_dir results_alpaca_eval/ ${model}
--eval_batch_size 20
--use_vllm
--use_chat_format
--chat_formatting_function eval.templates.create_prompt_with_tulu_chat_format ;
done هنا يمكنك تعيين IS_ALPACA_EVAL_2 إلى True لتقييم النموذج على مجموعة بيانات Alpacaeval-2. إذا كنت ترغب فقط في أداء الجيل دون إجراء التقييم ، فيمكنك استخدام الوسيطة --no_evaluate_with_llm .
لإعادة إنتاج تحليل الورقة ، يمكنك تشغيل الأمر التالي.
لحساب القطار أو خسارة النموذج ، يمكنك تشغيل الأمر التالي.
MODEL_NMAES= " lima_data_llama2_7b_bs128_lr2e-5_ml2048_ep2_bf16 "
DATA_NAME_LIST=(
lima_data
tulu_dataset_01
)
DATASET_PATH_LIST=(
lima_data
tulu_dataset_01
)
for i in " ${ ! DATA_NAME_LIST[@]} " ; do
DATA_NAME= ${DATA_NAME_LIST[i]}
DATASET_PATH= ${DATASET_PATH_LIST[i]}
DATA_PATH=data/ ${DATASET_PATH} .jsonl
for model in $MODEL_NMAES ; do
accelerate launch
--main_process_port 29399
--mixed_precision bf16
--num_machines 1
--num_processes $NUM_GPUS
--use_deepspeed
--deepspeed_config_file ds_configs/stage3_no_offloading_accelerate.conf
open_instruct/compute_loss.py
--model_name_or_path ${BASE_PATH} / ${model}
--use_flash_attn
--tokenizer_name ${BASE_PATH} / ${model}
--use_slow_tokenizer
--eval_file ${DATA_PATH}
--max_seq_length ${MAX_LENGTH}
--preprocessing_num_workers 16
--per_device_eval_batch_size $BATCH_SIZE_PER_GPU
--output_dir output_loss/ ${model} _ ${DATA_NAME} ;
done ;
done إذا كان لديك أي أسئلة بخصوص الكود أو الورقة ، فلا تتردد في التواصل مع المؤلفين في [email protected] . إذا واجهت أي صعوبات أثناء استخدام الرمز أو تحتاج إلى الإبلاغ عن خطأ ، فلا تتردد في فتح مشكلة. نطلب منك أن تقدم معلومات مفصلة حول المشكلة لمساعدتنا في تقديم دعم فعال.
@article{shi2024instruction,
title={Instruction Tuning With Loss Over Instructions},
author={Zhengyan Shi and Adam X. Yang and Bin Wu and Laurence Aitchison and Emine Yilmaz and Aldo Lipani},
booktitle={ArXiv},
year={2024},
url={https://arxiv.org/abs/2405.14394},
}
نود أن نشكر مؤلفي المستودعات التالية على توفير قاعدة البيانات: