Colab을 사용하여 Microsoft/PHI-1_5, ChatGLM3-6B를 기반으로 합법적 인 LLM을 훈련시킵니다. 이 프로젝트를 통해 미세 조정 LLM 0 비용을 수동으로 이해할 수 있습니다. LLM 미세 조정의 특정 코드 구현을 이해하려면 my_finetune 프로젝트를 참조하십시오 .
| 이름 | 콜랩 | 데이터 세트 |
|---|---|---|
| 자기인지 적 lora-sft 미세 조정 | self_cognition.json | |
| 법적 Q & A Lora-Sft Fine Tune | 디스크-졸림 | |
| 법적 Q & A 전체 매개 변수 -SFT 미세 조정* | 디스크-졸림 | |
| chatglm3-6b 자기인지 로라 스프 미세 조정* | self_cognition.json |
*Colab Pro 회원 사용자 인 경우 전체 매개 변수를 시도 할 수 있습니다. SFT 미세 조정, High RAM+ T4를 사용하면 약 20 시간 이상이 소요됩니다.
*Colab Pro 회원 사용자 인 ChatGlm3-6b 자체인지 LORA-SFT 미세 조정, 높은 RAM+T4를 사용하면 몇 분 밖에 걸리지 않으며 효과가 더 좋습니다.
Colab Free T4 그래픽 카드를 사용하여 법적 Q & A 명령 감독 미세 튜닝 (SFT) Microsoft/PHI-1_5 모델을 완료하십시오.
자기 인식 데이터 : self_cognition.json
80 개의 데이터, T4 LORA를 사용하여 PHI-1_5를 미세 조정하면 몇 분 안에 미세 조정할 수 있습니다.
미세 조정 매개 변수는 자세한 내용은 Colab을 참조하십시오.
python src/train_bash.py
--stage sft
--model_name_or_path microsoft/phi-1_5
--do_train True
--finetuning_type lora
--template vanilla
--flash_attn False
--shift_attn False
--dataset_dir data
--dataset self_cognition
--cutoff_len 1024
--learning_rate 2e-04
--num_train_epochs 20.0
--max_samples 1000
--per_device_train_batch_size 6
--per_device_eval_batch_size 6
--gradient_accumulation_steps 1
--lr_scheduler_type cosine
--max_grad_norm 1.0
--logging_steps 5
--save_steps 100
--warmup_steps 0
--neft_alpha 0
--train_on_prompt False
--upcast_layernorm False
--lora_rank 8
--lora_dropout 0.1
--lora_target Wqkv
--resume_lora_training True
--output_dir saves/Phi1.5-1.3B/lora/my
--fp16 True
--plot_loss True
효과
법적 Q & A 데이터 출처 : Disc-Lawllm
비디오 메모리를 줄이려면 DeepSpeed Stage2를 사용하면 Cutoff_Len이 최대 1792 년에 도달 할 수 있으며 비디오 메모리가 더 있으면 비디오 메모리가 폭발됩니다.
심해 구성
{
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"zero_allow_untested_optimizer": true,
"fp16": {
"enabled": "auto",
"loss_scale": 0,
"initial_scale_power": 16,
"loss_scale_window": 1000,
"hysteresis": 2,
"min_loss_scale": 1
},
"zero_optimization": {
"stage": 2,
"offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
"allgather_partitions": true,
"allgather_bucket_size": 2e8,
"reduce_scatter": true,
"reduce_bucket_size": 2e8,
"overlap_comm": false,
"contiguous_gradients": true
}
}
미세 조정 매개 변수
1000 개의 데이터, T4는 약 60 분이 걸립니다
deepspeed --num_gpus 1 --master_port=9901 src/train_bash.py
--deepspeed ds_config.json
--stage sft
--model_name_or_path microsoft/phi-1_5
--do_train True
--finetuning_type lora
--template vanilla
--flash_attn False
--shift_attn False
--dataset_dir data
--dataset self_cognition,law_sft_triplet
--cutoff_len 1792
--learning_rate 2e-04
--num_train_epochs 5.0
--max_samples 1000
--per_device_train_batch_size 1
--per_device_eval_batch_size 1
--gradient_accumulation_steps 1
--lr_scheduler_type cosine
--max_grad_norm 1.0
--logging_steps 5
--save_steps 1000
--warmup_steps 0
--neft_alpha 0
--train_on_prompt False
--upcast_layernorm False
--lora_rank 8
--lora_dropout 0.1
--lora_target Wqkv
--resume_lora_training True
--output_dir saves/Phi1.5-1.3B/lora/law
--fp16 True
--plot_loss True
추정 _zero3_model_states_mem_needs_all_live를 통해 DeepSpeed Zero Stage에 필요한 메모리를 볼 수 있습니다.
from transformers import AutoModel, AutoModelForCausalLM
from deepspeed.runtime.zero.stage3 import estimate_zero3_model_states_mem_needs_all_live
model_name = "microsoft/phi-1_5"
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
estimate_zero3_model_states_mem_needs_all_live(model, num_gpus_per_node=1, num_nodes=1)
그림과 같이 Offload_optimizer-> Microsoft/Phi -1_5는 CPU 후 32g 메모리가 필요하며 Colab의 52g 높은 메모리는 요구를 충족시킬 수 있습니다.
심해 구성
{
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"zero_allow_untested_optimizer": true,
"fp16": {
"enabled": "auto",
"loss_scale": 0,
"initial_scale_power": 16,
"loss_scale_window": 1000,
"hysteresis": 2,
"min_loss_scale": 1
},
"zero_optimization": {
"stage": 2,
"offload_optimizer": {
"device": "cpu",
"pin_memory": true
},
"allgather_partitions": true,
"allgather_bucket_size": 2e8,
"reduce_scatter": true,
"reduce_bucket_size": 2e8,
"overlap_comm": false,
"contiguous_gradients": true
}
}
deepspeed --num_gpus 1 --master_port=9901 src/train_bash.py
--deepspeed ds_config.json
--stage sft
--model_name_or_path microsoft/phi-1_5
--do_train True
--finetuning_type full
--template vanilla
--flash_attn False
--shift_attn False
--dataset_dir data
--dataset self_cognition,law_sft_triplet
--cutoff_len 1024
--learning_rate 2e-04
--num_train_epochs 10.0
--max_samples 1000
--per_device_train_batch_size 1
--per_device_eval_batch_size 1
--gradient_accumulation_steps 1
--lr_scheduler_type cosine
--max_grad_norm 1.0
--logging_steps 5
--save_steps 1000
--warmup_steps 0
--neft_alpha 0
--train_on_prompt False
--upcast_layernorm False
--lora_rank 8
--lora_dropout 0.1
--lora_target Wqkv
--resume_lora_training True
--output_dir saves/Phi1.5-1.3B/lora/law_full
--fp16 True
--plot_loss True
일주일에 30 시간 동안 사용할 수있는 Kaggle을 사용하는 것을 고려할 수 있으며 2 T4를 선택하고 0 단계 3을 사용하여 전체 매개 변수를 미세 조정할 수 있습니다.
심해 구성
{
"train_batch_size": "auto",
"train_micro_batch_size_per_gpu": "auto",
"gradient_accumulation_steps": "auto",
"gradient_clipping": "auto",
"zero_allow_untested_optimizer": true,
"fp16": {
"enabled": "auto",
"loss_scale": 0,
"initial_scale_power": 16,
"loss_scale_window": 1000,
"hysteresis": 2,
"min_loss_scale": 1
},
"zero_optimization": {
"stage": 3,
"overlap_comm": false,
"contiguous_gradients": true,
"sub_group_size": 5e7,
"reduce_bucket_size": "auto",
"stage3_prefetch_bucket_size": "auto",
"stage3_param_persistence_threshold": "auto",
"stage3_max_live_parameters": 5e7,
"stage3_max_reuse_distance": 5e7,
"stage3_gather_16bit_weights_on_model_save": true
}
}