
Alpaca ãŸãšã
ãAlpacaãã®åŠç¿æ¹æ³ã«ã€ããŠè»œããŸãšããŸããã
1. Alpaca
ãAlpacaãã¯ããLLaMA 7Bã(Meta)ããã¡ã€ã³ãã¥ãŒãã³ã°ããèšèªã¢ãã«ã§ãããtext-davinci-003ãã«ãããself-instructãã§çæããã52Kã®åœä»€è¿œåŸåã®åŠç¿ããŒã¿ã䜿ã£ãŠåŠç¿ããŠããŸãããAlpacaãã¯OpenAIã®ãtext-davinci-003ãã«äŒŒãæåã瀺ããŸãããé©ãã»ã©å°ããåçŸã容æã§å®äŸ¡ã§ããããšãç¹åŸŽã§ãã
ãŸãããAlpacaãã¯åŠè¡ç ç©¶ã®ã¿ãç®çãšããŠãããåçšå©çšã¯çŠæ¢ããŠããŸãã
2. åŠç¿æžã¿èšèªã¢ãã« ãš åŠç¿ããŒã¿
ã¢ã«ãããã¯ãªäºç®ã§é«å質ãªèšèªã¢ãã«ãåŠç¿ãããããã«ã¯ãã匷åãªåŠç¿æžã¿èšèªã¢ãã«ããšãé«å質ãªåŠç¿ããŒã¿ããå¿ èŠã§ãã
1ã€ç®ã¯ãæè¿ãªãªãŒã¹ãããMetaã®ãLLaMAãã§è§£æ±ºãããŸãã2ã€ç®ã¯ããself-instructãã®ææ³ã§ãæ¢åã®åŒ·åãªèšèªã¢ãã«ã䜿çšããŠãåœä»€ããŒã¿ãèªåçæããããšãææ¡ããŸãã
ãAlpacaãã¯ãOpenAIã®ãtext-davinci-003ãã§çæãã52Kã®åœä»€è¿œåŸåã®åŠç¿ããŒã¿ã䜿ã£ãŠããLLaMA 7Bãããã¡ã€ã³ãã¥ãŒãã³ã°ããã¢ãã«ã«ãªããŸãã
3. åŠç¿ã®æµã
äžå³ã¯ããAlpacaãã®åŠç¿ã®æµãã瀺ããŠããŸããããŒã¿ã«ã€ããŠã¯ããself-instructãã®ææ³ãããŒã¹ã«ãåœä»€è¿œåŸåã®åŠç¿ããŒã¿ãäœæããŸããããŸãããself-instructãã®ã·ãŒãã»ããããã人éãæžãã175ã®åœä»€ãšåºåã®ãã¢ãçšæããŸããããã®åŸããtext-davinci-003ãã«ãã·ãŒãã»ãããæèäžã®äŸãšããŠãããã«åœä»€ãçæããããã«ä¿ããŸãããçæãã€ãã©ã€ã³ãç°¡ç¥åããããšã§ããself-instructããæ¹è¯ãïŒè©³çްã¯GitHubãåç §ïŒãã³ã¹ããå€§å¹ ã«åæžããŸããããã®çµæãOpenAI APIã䜿çšããŠ500ãã«æªæºã®ã³ã¹ãã§ã52Kã®ãŠããŒã¯ãªåœä»€ãšããã«å¯Ÿå¿ããåºåãçæã§ããŸããã

ãã®åœä»€è¿œåŸåããŒã¿ã»ãããçšããŠãHuggingFaceã®åŠç¿ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããLLaMAãããã¡ã€ã³ãã¥ãŒãã³ã°ããŸããã7Bã®ãLLaMAãã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã«ã¯ã80GBã®A100ã8å°äœ¿çšããŠ3æéããããŸãããããã¯ãã»ãšãã©ã®ã¯ã©ãŠãã³ã³ãã¥ãŒãã£ã³ã°ãããã€ããŒã§100ãã«ä»¥äžã®ã³ã¹ãã«ãªããŸãã
4. å ¬éã¢ã»ãã
以äžã®ã¢ã»ãããå ¬éãããŠãŸãã
ã»ã㢠: ãAlpacaããäœéšã§ããã€ã³ã¿ã©ã¯ãã£ããªãã¢
ã»åŠç¿ããŒã¿Â : ãAlpacaãã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã«äœ¿çšããããŒã¿ (52K)
ã»åŠç¿ããŒã¿çæã³ãŒã : åŠç¿ããŒã¿ãçæããããã®ã³ãŒãã
ã»åŠç¿ã³ãŒã : ãAlpacaãããã¡ã€ã³ãã¥ãŒãã³ã°ããããã®ã³ãŒãã
以äžã®ã¢ã»ãããä»åŸå ¬éäºå®ã«ãªã£ãŠããŸãã
ã»ã¢ãã«ã®éã¿Â : ã¢ãã«ã®éã¿ãå ¬éããããã®ã¬ã€ãã³ã¹ãåŸãããMetaã«é£çµ¡ãåã£ãŠãŸãã
5. åŠç¿ããŒã¿
ãalpaca_data.jsonãã«ã¯ããAlpacaãã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã«äœ¿çšãã 52K ã®åœä»€è¿œåŸåã®åŠç¿ããŒã¿ãå«ãŸããŠããŸãã ãã®JSONã¯èŸæžã®ãªã¹ãã§ãåèŸæžã«ã¯æ¬¡ã®ãã£ãŒã«ããå«ãŸããŠããŸãã
ã»instruction: str - ã¢ãã«ãå®è¡ãã¹ãã¿ã¹ã¯ãèšè¿°ã52Kã®æç€ºã¯ãŠããŒã¯ã
ã»input: str - ã¿ã¹ã¯ã®ãªãã·ã§ã³ã®ã³ã³ããã¹ããŸãã¯å ¥åãããšãã°ãæç€ºããæ¬¡ã®èšäºãèŠçŽãã®å Žåãå ¥åã¯èšäºãäŸã®çŽ40%ã«ã¯å ¥åãããã
ã»output: str - ãtext-davinci-003ãã«ãã£ãŠçæãããæç€ºã«å¯Ÿããåçã
ãAlpacaãã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã«ã¯ã次ã®ããã³ããã䜿çšããŠããŸãã
ã»ç©ºã§ãªãå ¥åãã£ãŒã«ãã®äŸ
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
{instruction}
### Input:
{input}
### Response:以äžã¯ãã¿ã¹ã¯ã説æããåœä»€ãšããããªãã³ã³ããã¹ããæäŸããå ¥åã®çµã¿åããã§ããèŠæ±ãé©åã«æºãããããªå¿çãæžããªããã
ã»ç©ºã®å ¥åãã£ãŒã«ãã®äŸ
Below is an instruction that describes a task. Write a response that appropriately completes the request.
### Instruction:
{instruction}
### Response:以äžã¯ãã¿ã¹ã¯ã説æããåœä»€ã§ãã èŠæ±ãé©åã«å®äºããå¿çãäœæããŸãã
6. åŠç¿ããŒã¿çæ
6-1. å®è¡æé
(1) ç°å¢å€æ°ãOPENAI_API_KEYãã«ãOpenAI APIããŒããèšå®ã
(2) äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã
$ pip install -r requirements.txt(3) åŠç¿ããŒã¿çæã³ãŒããå®è¡ã
åŠç¿ããŒã¿ãçæãããŸãã
$ python -m generate_instruction generate_instruction_following_data6-2. 詳现
ãself-instructãã®ããŒã¿çæãã€ãã©ã€ã³ãããŒã¹ã«ã次ã®ãããªä¿®æ£ãå ããŠããŸãã
ã»åŠç¿ããŒã¿çæã«davinciã®ä»£ããã«text-davinci-003ã䜿çšã
ã»åŠç¿ããŒã¿çæã®èŠä»¶ãtext-davinci-003ã«æç€ºçã«äžããæ°ããããã³ãã(prompt.txt)ãæžããã(泚æ : 䜿çšããããã³ããã«ã¯è¥å¹²ã®èª€ãããã£ããããä»åŸäœ¿çšããæ¹ã¯#24ã®ç·šéãåãå ¥ããããš)
ã»20åã®åŠç¿ããŒã¿ãäžåºŠã«çæãããšãããããç©æ¥µçãªããããã³ãŒããæ¡çšããåŠç¿ããŒã¿çæã®ã³ã¹ããå€§å¹ ã«åæžã
ã»åé¡æç€ºãšéåé¡æç€ºã®éããæšãŠãŠãããŒã¿çæãã€ãã©ã€ã³ãç°¡ç¥åã
2ã3åã®ã€ã³ã¹ã¿ã³ã¹ãçæããã®ã§ã¯ãªããååŠç¿ããŒã¿ã«å¯ŸããŠ1åã®ã€ã³ã¹ã¿ã³ã¹ããçæããªãã
ããã«ããã500ãã«ä»¥äžã®äœã³ã¹ãã§ã52Kåã®åŠç¿ããŒã¿ãåŸãããŸãããäºåçãªèª¿æ»ãšããŠã52Kåã®åœä»€ããŒã¿ãself-instructãå ¬éããããŒã¿ãããã¯ããã«å€æ§ã§ããããšãçºèŠããŸãããäžå³ã¯ãself-instructã®è«æã«ããå³2ã®ã¹ã¿ã€ã«ã§ãããŒã¿ã®å€æ§æ§ã瀺ãããã«ãããããããã®ã§ããå³äžã®å åŽã®åã¯æç€ºã®æ ¹æ¬åè©ãå€åŽã®åã¯çŽæ¥ã®ç®çèªã衚ããŠããŸãã

7. ãã¡ã€ã³ãã¥ãŒãã³ã°
7-1. ãã€ããŒãã©ã¡ãŒã¿
æšæºçãªHugging Faceã®åŠç¿ã³ãŒããçšããŠã以äžã®ãã€ããŒãã©ã¡ãŒã¿ã§ã¢ãã«ã®ãã¡ã€ã³ãã¥ãŒãã³ã°ãè¡ããŸããã
â ãã€ããŒãã©ã¡ãŒã¿
ã»Batch size : 128
ã»Learning rate : 2e-5
ã»Epochs : 3
ã»Max length : 512
ã»Weight decay : 0
7-2. å®è¡æé
Hugging FaceãLLaMAã¢ãã«ãå ¬åŒã«ãµããŒãããŠããªããããç¹å®ã®ãã©ãŒã¯ïŒã€ãŸãããŒãžããããã®PRïŒããã€ã³ã¹ããŒã«ããããšã§ãHugging Face Transformersã§LLaMAããã¡ã€ã³ãã¥ãŒãã³ã°ããŸãããã€ã³ã¹ããŒã«ããç¹å®ã®ã³ãããã®ããã·ã¥ã¯ä»¥äžã§ãã
68d640f7c368bcaaaecfc678f11908ebbd3d6176LLaMAã®ãã¡ã€ã³ãã¥ãŒãã³ã°ãåçŸããããã«ãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
$ pip install -r requirements.txtãHugging Face Transformersãã®ç¹å®ã®ãã©ãŒã¯ãã€ã³ã¹ããŒã«ããŸãã
以äžã¯ãFSDP full_shardã¢ãŒãã§4ã€ã®A100 80G GPUãæèŒãããã·ã³ã§ãæã ã®ããŒã¿ã»ããã䜿ã£ãŠLLaMA-7Bããã¡ã€ã³ãã¥ãŒãã³ã°ããã³ãã³ãã§ããPython 3.10ã䜿çšãã以äžã®ã³ãã³ãã§ããã¢ã§ãã¹ãããã¢ãã«ãšåæ§ã®å質ã®ã¢ãã«ãåçŸããããšãã§ããŸããã<your_random_port>ãèªåã®ããŒãã<your_path_to_hf_converted_llama_ckpt_and_tokenizer>ã倿ãããã§ãã¯ãã€ã³ããšããŒã¯ãã€ã¶ãžã®ãã¹ã<your_output_dir>ãåºåãä¿åãããå Žæã«çœ®ãæããŸãã
$ torchrun --nproc_per_node=4 --master_port=<your_random_port> train.py \
--model_name_or_path <your_path_to_hf_converted_llama_ckpt_and_tokenizer> \
--data_path ./alpaca_data.json \
--bf16 True \
--output_dir <your_output_dir> \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 2000 \
--save_total_limit 1 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'LLaMADecoderLayer' \
--tf32 True7-3. 泚æç¹
fsdp_transformer_layer_cls_to_wrap ã¯ãç¹å®ã®ãã³ãŒãå±€ã®ååã«èšå®ããå¿ èŠããããŸããLLaMA HuggingFace PR ã¯å®å®ããŸããã以åã®ã³ãããã§ã¯ããã³ãŒããŒã¬ã€ã€ãŒã«LLaMADecoderLayer ãšããååã䜿çšãããŠããŸãã (ã³ãŒãã®ã³ãããããã·ã¥ã¯ããã«åºã¥ããŠããŸã)ã æè¿ã®ã³ãããã§ã¯ LlamaDecoderLayerã䜿çšãããŠããŸã (倧æåãšå°æåã®éãã«æ³šæããŠãã ãã)ã fsdp_transformer_layer_cls_to_wrap ãæ£ããååã«èšå®ããªããšããã¬ãŒãã³ã°ãå€§å¹ ã«é ããªããŸãã
7-4. è£è¶³äºé
åãã¹ã¯ãªãããOPTã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã«ãæ©èœããŸãã以äžã¯ãOPT-6.7Bã®ãã¡ã€ã³ãã¥ãŒãã³ã°ã®äŸã§ãã
$ torchrun --nproc_per_node=4 --master_port=<your_random_port> train.py \
--model_name_or_path "facebook/opt-6.7b" \
--data_path ./alpaca_data.json \
--bf16 True \
--output_dir <your_output_dir> \
--num_train_epochs 3 \
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 4 \
--gradient_accumulation_steps 8 \
--evaluation_strategy "no" \
--save_strategy "steps" \
--save_steps 2000 \
--save_total_limit 1 \
--learning_rate 2e-5 \
--weight_decay 0. \
--warmup_ratio 0.03 \
--lr_scheduler_type "cosine" \
--logging_steps 1 \
--fsdp "full_shard auto_wrap" \
--fsdp_transformer_layer_cls_to_wrap 'OPTDecoderLayer' \
--tf32 TrueäžããããåŠç¿ã¹ã¯ãªããã¯ãã·ã³ãã«ã§äœ¿ããããããã«æå³ãããŠãããç¹ã«æé©åãããŠããªãããšã«æ³šæããŠãã ãããããå€ãã®GPUã§å®è¡ããã«ã¯ãgradient_accumulation_steps ãäžããŠãGlobal Batch Sizeã128ã«ä¿ã€ããšããå§ãããŸããGlobal Batch Sizeã¯ãæé©æ§ã«ã€ããŠãã¹ããããŠããŸããã