ãããŒã«ã«LLMãQLoRAã®è€éãªãã©ã¡ãŒã¿ãïŒå°ãã§ãïŒæŽçãã
ååã®èšäºã§ãè§ŠãããšãããQLoRAã«ããLlama-2ã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã§è©Šè¡é¯èª€ããŠããã
ãQLoRAãã¯ãLlamaã®ãããªããŒã«ã«LLMããã¡ã€ã³ãã¥ãŒã³ããå Žåã«çŸåšäž»æµãšãªã£ãŠããææ³ãéåžžã®LoRAãããGPUãªãœãŒã¹ã倧å¹
ã«ç¯çŽã§ããã³ã¹ããæéã®é¢ã§ã¡ãªããããããšãããã
ãã©ã¡ãŒã¿èšå®ã«ã€ããŠã¯ãLlama-2-7Bã§QLoRAãè¡ãå Žåã®å ¬åŒã®ã¹ã¯ãªãããããã倧éšåã¯ä»¥äžã®èšå®ãæµçšããã°ããã¯ãã
CUDA_VISIBLE_DEVICES=0 python qlora.py \
--model_name_or_path meta-llama/Llama-2-7b-hf \
--use_auth \
--output_dir ./output/llama-2-guanaco-7b \
--logging_steps 10 \
--save_strategy steps \
--data_seed 42 \
--save_steps 500 \
--save_total_limit 40 \
--evaluation_strategy steps \
--eval_dataset_size 1024 \
--max_eval_samples 1000 \
--per_device_eval_batch_size 1 \
--max_new_tokens 32 \
--dataloader_num_workers 1 \
--group_by_length \
--logging_strategy steps \
--remove_unused_columns False \
--do_train \
--do_eval \
--do_mmlu_eval \
--lora_r 64 \
--lora_alpha 16 \
--lora_modules all \
--double_quant \
--quant_type nf4 \
--bf16 \
--bits 4 \
--warmup_ratio 0.03 \
--lr_scheduler_type constant \
--gradient_checkpointing \
--dataset oasst1 \
--source_max_len 16 \
--target_max_len 512 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 16 \
--max_steps 1875 \
--eval_steps 187 \
--learning_rate 0.0002 \
--adam_beta2 0.999 \
--max_grad_norm 0.3 \
--lora_dropout 0.1 \
--weight_decay 0.0 \
--seed 0 \
--cache_dir /gscratch/zlab/llama2 ãšã¯ãããLoRAåå¿è ã«ã¯ãåãããªããã©ã¡ãŒã¿ãå€ããâŠãç¶æ ã ã£ãã®ã§ãã²ãšãŸãæŽçããŠã¿ãã
ãã€ããŒãã©ã¡ãŒã¿ã®ç°¡åãªèª¬æ
â»æ©æ¢°åŠç¿ã«ãããŠãåŠç¿éçšãå¶åŸ¡ããããã®ãã©ã¡ãŒã¿ã¯ããã€ããŒãã©ã¡ãŒã¿ããšåŒã¶ãããïŒããã©ã¡ãŒã¿ãã¯äžè¬ã«ãåŠç¿ã«ãã£ãŠæ±ºãŸããã©ã¡ãŒã¿ãæãïŒã
ãããã®äžã§éèŠãšæãããé ç®ã«ã€ããŠãqlora.pyã®ãã«ãã®åèš³ãšãšãã«åæããããªãïŒã¯è£è¶³ã¡ã¢ã
åºæ¬çãªèšå®
model_name_or_pathïŒdefault="EleutherAI/pythia-12b"ãHuggingFaceäžã®ã¢ãã«ã®åç§°ãŸãã¯ãã¹ã
output_dirïŒdefault='./output'ããã°ãšãã§ãã¯ãã€ã³ããåºåãããã©ã«ãã
bf16 / fp16ïŒäœ¿çšããGPUãbfloat16ããµããŒãããŠããã°ãã--bf16ãã§ãã¬ãŒãã³ã°ãé«éåã§ãããïŒã--bf16ãæªå¯Ÿå¿ãªãã--fp16ããæå®ããã
ã¹ãããæ°ã«é¢ãããã€ããŒãã©ã¡ãŒã¿
logging_stepsïŒdefault=10ãæå€±ïŒLossïŒãèšé²ããã¹ãããã®é »åºŠã
save_stepsïŒdefault=250ããã§ãã¯ãã€ã³ãã®ä¿åãè¡ãã¹ãããã®é »åºŠã
save_total_limit: default=40ãæãå€ããã§ãã¯ãã€ã³ããäžæžãããããŸã§ã«ä¿åãããã§ãã¯ãã€ã³ãã®æ°ã
max_steps: default=10000ãæå€§ã¹ãããæ°ãïŒæå€§ã¹ãããã«å°éãããŸã§åŠç¿ãç¶ãã
ãã¬ãŒãã³ã°å¹çã«é¢ãããã€ããŒãã©ã¡ãŒã¿
learning_rate: default=0.0002ãåŠç¿çïŒLRïŒãïŒæ©æ¢°åŠç¿å šè¬ã«ãããæéèŠã®ãã€ããŒãã©ã¡ãŒã¿ããããé«ãå€ãèšå®ãããšããã¬ãŒãã³ã°ã¯ããéãå®è¡ãããããã¢ãã«ã®å è¡ããŒã¿ãæãªãããå¯èœæ§ãé«ããªããåŠç¿çãé«ãããã°ããšããã¯ã¯äœãã§ããïŒé«ãåŠç¿ç + äœããšãã㯠= é«éã ãäœå質ã®ãã¬ãŒãã³ã°ïŒãåŠç¿çãäœãããã°ããšããã¯ãé«ãã§ããïŒäœãåŠç¿ç + é«ããšãã㯠= é床ã¯é ãã質ã®é«ããã¬ãŒãã³ã°ïŒãåŠç¿çãäœããããšãã¬ãŒãã³ã°ãé²ãŸããéã«é«ããããšãã¹ãä¹±é«äžãããããã
per_device_train_batch_size: default=1ãGPU1åãããã®ãã¬ãŒãã³ã°ããããµã€ãºãïŒããããµã€ãºã倧ãããšãã¬ãŒãã³ã°ãé«éåããããããããµã€ãºãå°ãããšé ããªãããå Žåã«ãã£ãŠã¯æ±åãåäžããã¢ãã«ã®å質åäžãæåŸ ã§ãããããããªãã
gradient_accumulation_steps: default=16ããªããã£ãã€ã¶ã®ã¹ããããå®è¡ããåã«ã环ç©ãããåŸé ã®åæ°ãïŒper_device_train_batch_size * gradient_accumulation_stepsã®ç©ã¯åžžã«16ã«ãªãå¿ èŠããããäŸãã°ãper_device_train_batch_sizeãæå€§å€ã®16ã«èšå®ãããªããgradient_accumulation_stepsã1ã«èšå®ããã
ããŒã¿ã»ããã«é¢ãããã€ããŒãã©ã¡ãŒã¿
dataset: default='alpaca'ããã¡ã€ã³ãã¥ãŒãã³ã°ã«çšããããŒã¿ã»ãããèªåã®ããŒã¿ã»ããã䜿ãå Žåã¯ããã¹ã§æå®ããã
dataset_format: default=Noneã䜿çšããããŒã¿ã»ããã®åœ¢åŒãalpacaãchip2ãself-instructãhh-rlhfãªã©ã
source_max_len: default=1024ããœãŒã¹ã»ã·ãŒã±ã³ã¹ã®æå€§ããŒã¯ã³ïŒdefaultã®å Žåã1024ãè¶ ããããŒã¯ã³ã¯ç¡èŠãããïŒãïŒããœãŒã¹ãã¯ãããŒã¿ã»ããäžã®ã€ã³ã¹ãã©ã¯ã·ã§ã³ãã€ã³ãããã«ãããéšåããã ãããœãŒã¹ïŒã€ã³ãããïŒã«ã¯äœãå ¥ããã«ãã€ã³ã¹ãã©ã¯ã·ã§ã³ãšã¬ã¹ãã³ã¹ãšãŸãšããŠã¿ãŒã²ããïŒã¢ãŠããããïŒã«çªã£èŸŒãå Žåãããã
target_max_len: default=256ãã¿ãŒã²ããã»ã·ãŒã±ã³ã¹ã®æå€§ããŒã¯ã³ïŒdefaultã®å Žåã256ãè¶ ããããŒã¯ã³ã¯ç¡èŠãããïŒãïŒãã¿ãŒã²ãããã¯ãããŒã¿ã»ããäžã®ã¬ã¹ãã³ã¹ãã¢ãŠããããã«ãããéšåãtarget_max_lenã倧ãããããšããã®åãã¬ãŒãã³ã°ã®éã®GPUãžã®è² è·ã倧ãããªãã®ã§ãã§ããã ãé©åãªå€ãèšå®ããã
ããŒã¿ãã©ãŒãããã«ã€ããŠèª¿ã¹å§ãããé·ããªããããªã®ã§ããã®ãããã¯ã€ããŠã¯æ¬¡å以éã®èšäºã§è©³è¿°ã
LoRAãã€ããŒãã©ã¡ãŒã¿
ãããã®ãã©ã¡ãŒã¿ã«ã€ããŠã¯ãQLoRAã®å è«æã®4ç« åã³Appendix Aã§èšåãããŠãããããããèªåœãçè§£ã§ããªãã®ã§ãBingã«ãã説æãä»ããŠã¿ãããããŸã§åèãŸã§ã«æ²èŒããã
lora_r: default=64ãLora Rãã£ã¡ã³ã·ã§ã³ãïŒBingã«ãã説æïŒæŽæ°è¡åã®ã©ã³ã¯ã衚ããã©ã¡ãŒã¿ã§ããRã倧ããã»ã©ãæŽæ°è¡åã¯å ã®éã¿ã«è¿ããªããŸãããã¡ã¢ãªãèšç®éãå¢ããŸããRãå°ããã»ã©ãæŽæ°è¡åã¯å ã®éã¿ããé¢ããŸãããã¡ã¢ãªãèšç®éãæžããŸããRã¯ãèšç·Žããã¿ã¹ã¯ããã¡ã€ã³ã«å¿ããŠèª¿æŽããå¿ èŠããããŸããïŒQLoRAè«æã§ã®èšåïŒãâŠãã¹ãŠã®ã¬ã€ã€ãŒã§LoRAã䜿çšãããšãããLoRAã®rã¯æçµçãªããã©ãŒãã³ã¹ãšã¯ç¡é¢ä¿ã§ããããšãããã£ãã
lora_alpha: default=16ãLoraã¢ã«ãã¡ãïŒBingã«ãã説æïŒLoRAã®ã¹ã±ãŒãªã³ã°ã«äœ¿ããããã©ã¡ãŒã¿ã§ããæŽæ°è¡åã®ãã«ã ïŒå€§ããïŒãå¶éããããšã§ãLoRAã®éåŠç¿ãäžå®å®ããæãã广ããããŸããïŒQLoRAè«æã§ã®èšåïŒãâŠLoRAã¢ã«ãã¡ã¯åžžã«åŠç¿çã«æ¯äŸããã®ã§ãLoRAã¢ã«ãã¡ãåºå®ããŠåŠç¿çãæ¢çŽ¢ããã
lora_dropout: default=0.0ãLoraããããã¢ãŠãçãïŒBingã«ãã説æïŒLoRAã¬ã€ã€ãŒã®ããããã¢ãŠã確çã®ããšã§ããæŽæ°è¡åã®äžéšãç¡å¹åããããšã§ãLoRAã®éåŠç¿ãäžå®å®ããæãã广ããããŸããïŒQLoRAè«æã§ã®èšåïŒãâŠ0.05ã®LoRAããããã¢ãŠãã¯ãå°ããªã¢ãã«(7B,13B)ã«ã¯æå¹ã ãã倧ããªã¢ãã«(33B,65B)ã«ã¯æå¹ã§ã¯ãªãã£ãã
Guanacoã®ãã€ããŒãã©ã¡ãŒã¿èšå®äŸ
QLoRAã®å è«æã§ç»å ŽããLlama-1ãã¡ã€ã³ãã¥ãŒã³ã¢ãã«ïŒGuanacoïŒã§äœ¿ããããã€ããŒãã©ã¡ãŒã¿èšå®ã¯ä»¥äžã®ãšãããåŠç¿çã®2e-4ã¯0.0002ã1e-4ã¯0.0001ã瀺ããSequence lengthã¯ãTarget Sequence lengthã®ã¿ãæãã¯ãïŒOASST1ããŒã¿ã»ããã«Source Sequenceã¯äžèŠïŒã

ãã®ä»ã®ãã©ã¡ãŒã¿ã«ã€ããŠã¯ã次ã®ããã«èšåãããŠããã
å šãŠã®ã¢ãã«ã§ãããŒã¹ã¢ãã«ã«ã¯NormalFloat4ããŒã¿åã䜿çšããå šãŠã®ç·åœ¢ã¬ã€ã€ãŒã®LoRAã¢ããã¿ã«ã¯BFloat16ãèšç®ããŒã¿åãšããŠäœ¿çšãããLoRA $r=64$ã$α=16$ãšããããŸããAdam beta2ã0.999ãmax grad normã0.3ãLoRA dropoutã13BãŸã§ã®ã¢ãã«ã§ã¯0.1ã33Bãš65Bã®ã¢ãã«ã§ã¯0.05ãšããã埮調æŽã«ã¯ãäžå®ã®åŠç¿çã¹ã±ãžã¥ãŒã«ãšããŒãžã³ã°ãããAdamWãªããã£ãã€ã¶ãçšããã
ãã¹ïŒLossïŒã«é¢ããç®å®
å®éã«ãã¬ãŒãã³ã°ãåãå§ãããšããã¬ãŒãã³ã°ã»ãã¹ã®æ°å€ãçºããªãããã©ãã§åŠç¿ãæ¢ããã倿ããããšã«ãªããç®å®ãšãªãæ°åã¯ä»¥äžã®éãã
LLMã®ãã¬ãŒãã³ã°ã«ãããåŠç¿æ²ç·ã«ã€ããŠã¯ã以äžã®èšäºã«è©³ããããŸã ã¡ãããšèªããŠããªãã


é¢é£èšäº
Llama-2ã®QLoRAã詊ããŠã¿ãã«ããã£ãŠã¯ãäžèšã®èšäºãåèã«ãªã£ãã
èªåã®ããŒã¿ã»ããã䜿ã£ãQLoRAã«ã€ããŠã¯ã以äžã®è±èªèšäºãåãããããã£ããåå¿è ã®èŠç¹ã§ã€ãŸã¥ãç®æãå¹³æã«æžãããæ©æ¢°ç¿»èš³ã§ãèªã¿ãããã
åŠç¿çãšãšããã¯æ°ãªã©ãããããã®LoRAã®åºæ¬çãªãã©ã¡ãŒã¿ã®é¢ä¿æ§ã«ã€ããŠã¯ã以äžã®èšäºã«ããããããã
QLoRAã«é¢ããå è«æã¯ãã¡ãã
è«æã®ååãQLoRAã®èæ¡ã«é¢ãããã¯ãã«ã«ãªèª¬æãäžç€ãæ§ã ãªããŒã¿ã»ãããçšããQLoRAã®å®è·µæ¯èŒãåŸåãQLoRAã®ææç©ã§ããGuanacoãšããèšèªã¢ãã«ã®æ§èœè©äŸ¡ããšããæãã®æ§æã«ãªã£ãŠããããã®ãããå®éã«QLoRAã䜿ãã«ããã£ãŠã¯äžç€ã®4ç« ã»5ç« ïŒæ«å°Ÿã®Appendix A, Bãåèã«ãªãããïŒèªãã ã®ã§èšäºã«è¿œèšïŒã