พื้นที่เก็บข้อมูลนี้ให้รหัสสำหรับ การปรับแต่งการเรียนการสอนของเราด้วยการสูญเสียคำแนะนำ ทำให้การรวมรหัสของเราเข้ากับโครงการอื่น ๆ ที่สามารถเข้าถึงได้มากขึ้น

การศึกษาของเราระบุเพิ่มเติมปัจจัยสำคัญที่มีผลต่อประสิทธิภาพของการสร้างแบบจำลองการเรียนการสอน: (1) อัตราส่วนระหว่างความยาวการสอนและความยาวเอาท์พุท (รูปซ้าย) (2) จำนวนตัวอย่างการฝึกอบรม (รูปขวา)
คุณสามารถทำซ้ำการทดลองของการปรับแต่งกระดาษของเราด้วยการสูญเสียมากกว่าคำแนะนำ
การปรับแต่งการสอนแบบ บทคัดย่อ มีบทบาทสำคัญในการสร้างผลลัพธ์ของโมเดลภาษา (LMS) ให้เป็นสไตล์ที่ต้องการ ในงานนี้เราเสนอวิธีการแบบจำลองการเรียนการสอนที่เรียบง่าย แต่มีประสิทธิภาพ (IM) ซึ่งฝึก LMS โดยใช้ฟังก์ชั่นการสูญเสียกับคำสั่งและส่วนที่พร้อมท์แทนที่จะเป็นส่วนเอาท์พุทเท่านั้น จากการทดลองในมาตรฐานที่หลากหลาย 21 ครั้งเราแสดงให้เห็นว่าในหลาย ๆ สถานการณ์ IM สามารถปรับปรุงประสิทธิภาพ LM ได้อย่างมีประสิทธิภาพในงาน NLP ทั้งสอง (เช่น MMLU, Truthfulqa และ Humaneval) และมาตรฐานรุ่นปลายเปิด (เช่น Mt-Bench และ Alpacaeval) อย่างน่าทึ่งในกรณีที่ได้เปรียบที่สุด IM เพิ่มประสิทธิภาพของแบบจำลองบน Alpacaeval 1.0 มากกว่า 100% เราระบุปัจจัยสำคัญสองประการที่มีอิทธิพลต่อประสิทธิภาพของ IM: (1) อัตราส่วนระหว่างความยาวคำสั่งและความยาวเอาต์พุตในข้อมูลการฝึกอบรม และ (2) จำนวนตัวอย่างการฝึกอบรม เราสังเกตว่า IM นั้นเป็นประโยชน์อย่างยิ่งเมื่อได้รับการฝึกฝนในชุดข้อมูลที่มีคำแนะนำที่ยาวนานจับคู่กับเอาต์พุตสั้น ๆ หรือภายใต้สมมติฐานการจัดแนวผิวเผิน (SAH) ซึ่งมีตัวอย่างการฝึกอบรมเล็กน้อยสำหรับการปรับแต่งการเรียนการสอน การวิเคราะห์เพิ่มเติมยืนยันสมมติฐานของเราว่าการปรับปรุงสามารถนำมาประกอบกับการลดการเกินขอบเขตไปยังชุดข้อมูลการปรับแต่งคำสั่ง งานของเราให้คำแนะนำที่เป็นประโยชน์สำหรับการปรับแต่ง LMS โดยเฉพาะอย่างยิ่งในสถานการณ์ที่มีทรัพยากรต่ำ
ในการติดตั้งแพ็คเกจที่จำเป็นสำหรับวิธีการพื้นฐานของเรา (แนวทางกึ่งผู้ดูแล) คุณสามารถเรียกใช้คำสั่งต่อไปนี้
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},
}
เราขอขอบคุณผู้เขียนของที่เก็บต่อไปนี้สำหรับการจัดหา codebase: