이 프로젝트는 LORA + DeepSpeed + 단일 카드/멀티 카드 미세 조정을 실현하기 위해 멀티 클래스 기본 모델의 미세 조정을 지시하는 것을 목표로합니다. 현재 테스트 된 모델은 아래 표에 나와 있습니다.
| 모델을 테스트하십시오 | 언어 | 테스트 가중치 |
|---|---|---|
| 중국-알라 카카 | 중국인 | 중국-알파카-플러스-로라 -13b |
| 개방형 | 영어 | Open_llama_13B |
| Open_llama_7B | ||
| 미인 | 중국인 | Belle-Llama-ext-13B |
| Belle-Llama-ext-7b | ||
| 꽃 | 영어 | Bloomz-1B7 |
| Bloomz-7B1 | ||
| chatglm-6b | 중국인 | chatglm-6b |
| chatglm2-6b | ||
| Baichuan | 중국인 | Baichuan-7b |
| 중국인 | Baichuan-13B-Chat | |
| Tigerbot | 중국인 | Tigerbot-7b-sft |
| TigerBot-7B-베이스 | ||
| 파이썬 | 영어 | pythia-1b deduped |
| Pythia-12B 사정 |
TODO :
여기서 우리는 CCKS2023-PROMPTCBLUE 중국 의료 대형 모델을 사용하여 벤치 마크 경쟁에서 데이터 세트를 예로 들어 평가합니다. 이 데이터 세트는 "중국 의료 정보 처리 챌린지 CBLUE"데이터 세트를 변환하여 16 가지의 의료 시나리오 NLP 작업을 모두 프롬프트 기반 언어 생성 작업으로 변환하여 중국 의료 시나리오에 대한 첫 번째 LLM 평가 벤치 마크를 형성합니다.
PrfustCblue는 94 명령 미세 조정 템플릿을 사용하여 CBLUE 벤치 마크에서 다양한 작업을 수행합니다. 변환 후 모든 의료 텍스트 NLP 데이터 세트가 다음 형식으로 변환됩니다. 입력 필드 문자열은 LLM 모델에 대한 입력이며 대상 필드는 문자열이며 LLM 모델이 생성 해야하는 텍스트 순서입니다.
{
"input" : str,
"target" : str,
"type" : str,
"answer_choices" : str,
"sample_id" : str,
} 빠른 검증을 용이하게하기 위해 6000 개의 교육 세트, 1100 개의 검증 세트 및 1060 개의 테스트 세트를 포함하여 CHIP-CTC 하위 데이터 세트를 추출했습니다. 주소를 다운로드하십시오
모델은 로컬로 다운로드 할 수 있습니다. 훈련 중에 model_name_or_path 매개 변수는 모델의 경로로 전달되거나 THUDM/chatglm-6b 와 같은 포옹면의 모델 이름 만 전달할 수 있으며 코드는 자동으로 모델을 다운로드합니다.
LLAMA 클래스의 일부 모델에는 모델 변환이 필요하며 관련된 모델에는 다음이 포함됩니다.
conda create -n llms_train python=3.9
conda activate llms_train
pip install -r requirements.txt config.py 파일에는 다양한 모델에 대한 LORA 구성 파일이 있으며 사용자 정의 및 수정할 수 있습니다. 구성 파일 내용은 다음과 같습니다.
' glm ' : {
" lora_r " : 8,
" lora_alpha " : 32,
" lora_dropout " : 0.05,
" lora_target_modules " : " query_key_value,dense,dense_h_to_4h,dense_4h_to_h " ,
" modules_to_save " : " null "
},필드 설명 :
lora_r : Lora의 계급 lora_alpha : lora_dropout : LORA 층의 드롭 아웃 확률;lora_target_modules : LORA가 매달린 모듈;modules_to_save : 모듈이 훈련 가능하도록 설정되어 마지막 체크 포인트에 저장된 Lora 레이어 외에도. Zero2 구성은 여기에서 사용됩니다.
{
" fp16 " : {
" enabled " : " auto " ,
" loss_scale " : 0,
" loss_scale_window " : 100,
" initial_scale_power " : 16,
" hysteresis " : 2,
" min_loss_scale " : 1e-10
},
" bf16 " : {
" enabled " : " auto "
},
" zero_optimization " : {
" stage " : 2,
" allgather_partitions " : true,
" allgather_bucket_size " : 5e8,
" overlap_comm " : true,
" reduce_scatter " : true,
" reduce_bucket_size " : 5e8,
" contiguous_gradients " : true
},
" gradient_accumulation_steps " : " auto " ,
" gradient_clipping " : " auto " ,
" steps_per_print " : 2000,
" train_batch_size " : " auto " ,
" train_micro_batch_size_per_gpu " : " auto " ,
" wall_clock_breakdown " : false
}멀티 카드 병렬 교육 전략은 여기를 참조하십시오.
config.py 에는 MODEL_MAP , TOKENIZER_MAP , SPECIAL_IDS , model_type 매개 변수에 따라 다른 모델 cals 및 tokenizer 클래스를 선택하고 model_name_or_path 에 따라 특수 토큰 ID를 선택합니다. model_type 값과 해당 모델은 다음과 같습니다.
llama : 중국어 알파카 -Plus-Lora-13B, Open_llama_13B, Open_llama_7B, Belle-Lllama-ext-13B, Belle-llama-ext-7b, Tigerbot-7b-Sft, TigerBot-7B-Base 등과 같은 라마 타입 모델을 호출 할 수 있습니다.glm : ChatGLM-6B 및 ChatGLM2-6B를 호출 할 수 있습니다.bloom : Bloomz-1B7, Bloomz-7B1 등과 같은 블룸 형 모델을 호출 할 수 있습니다.pythia 가치를 가져 가십시오 : Python-1B 결제, Pythia-12b Deduped 및 기타 Python 모델을 호출 할 수 있습니다. scripts/train.sh 실행합니다. 파일의 내용은 다음과 같습니다.
LR=2e-4
model_name_or_path= " ../models/pythia-12b-deduped " # LLM底座模型路径,或者是huggingface hub上的模型名称
model_type= ' pythia '
your_data_path= " ./datasets/PromptCBLUE " # 填入数据集所在的文件夹路径
your_checkpopint_path= " ./experiments/outputs " # 填入用来存储模型的路径
max_steps=100
max_source_length=256
max_target_length=16
peft_path= " " # 如果之前训练过,且存储了peft权重,则设置为peft权重的文件夹路径
CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 train.py
--deepspeed configs/ds_zero2_no_offload.json
--do_train
--do_eval
--model_name_or_path $model_name_or_path
--model_type $model_type
--use_lora True
--fp16
--train_file $your_data_path /train_CHIP-CTC.json
--validation_file $your_data_path /dev_CHIP-CTC.json
--preprocessing_num_workers 8
--cache_dir $your_data_path
--prompt_column input
--response_column target
--output_dir $your_checkpopint_path /test-pythia-12b-deduped-lora- $LR
--overwrite_output_dir
--max_source_length $max_source_length
--max_target_length $max_target_length
--per_device_train_batch_size 4
--per_device_eval_batch_size 4
--gradient_accumulation_steps 16
--max_steps $max_steps
--logging_steps 10
--save_strategy steps
--save_steps 50
--save_total_limit 3
--evaluation_strategy steps
--eval_steps 50
--learning_rate $LR 매개 변수는 다음과 같습니다.
deepspeed : DeepSpeed의 구성 파일 경로do_train : bool, 훈련 가능 여부do_eval : bool, evaluation_strategy 가 "no"와 같지 않으면 확인 세트에서 확인할지 여부는 True 로 설정됩니다.model_name_or_path : 포옹 얼굴의 모델 이름 또는 이미 로컬로 존재하는 경로model_type : 모델 유형, 선택적 옵션에는 llama , glm , bloom , pythia , baichuan , other 포함됩니다.use_lora : LORA 미세 조정 사용, 기본값은 True 입니다. 그렇지 않으면 전체 미세 조정입니다.fp16 : FP16 (혼합) 정밀도 사용 여부train_file : 교육 세트 데이터 파일validation_file : 검증 세트 데이터 파일preprocessing_num_workers : 분사 데이터를 배치 할 때 근로자 수cache_dir : HF 모델로의 캐시 경로prompt_column : 샘플에 입력 된 필드 이름입니다response_column : 샘플의 필드 이름 출력output_dir : 교육 결과를 저장하는 경로overwrite_output_dir : True 로 설정된 경우 출력 폴더를 덮어 씁니다.max_source_length : 입력 텍스트의 최대 길이max_target_length : 출력 텍스트의 최대 길이pre_device_train_batch_size : 훈련 중 각 카드의 배치 크기pre_device_eval_batch_size : 확인/테스트 중 각 카드의 배치 크기gradient_accumulation_steps : 그라디언트 축적 라운드max_steps : 훈련 라운드 수, 한 라운드에는 샘플 GPU数量* pre_device_train_batch_size * gradient_accumulation_steps 포함되어 있습니다.logging_steps : 몇 라운드의 로그 인쇄save_strategy : 교육 과정에서 중간 결과는 단계 수 또는 에포크 번호에 따라 저장됩니다. 선택적 값은 no , steps 및 epoch 입니다.save_steps : 모든 단계에서 체크 포인트를 저장하십시오evaluation_strategy : 단계 수 또는 에포크 번호에 따라 검증 세트를 실행하십시오. 선택적 값은 no , steps 및 epoch 입니다.eval_steps : 모든 단계를 확인합니다learning_rate : 학습 속도 멀티 카드 교육 인 경우 SH : CUDA_VISIBLE_DEVICES=0 torchrun --nproc_per_node 1 에서 해당 작업을 수정하십시오. 예를 들어, 4 카드 훈련은 다음과 같이 변경할 수 있습니다. CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node 4 .
알아채다:
model_name_or_path model_type 에 올바르게 일치해야합니다.bos_id , eos_id 및 pad_id 완전히 일관성이 없습니다. config.py 의 SPECIAL_IDS 각 모델의 특수 토큰 ID를 지정합니다. 테스트 된 모델 외에도 스스로 수동으로 추가해야합니다.추론 스크립트 실행 :
CUDA_VISIBLE_DEVICES=0 python inference.py
--model_name_or_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4
--ckpt_path experiments/outputs/PromptCBLUE-chatglm-6b-lora-2e-4/checkpoint-9690
--model_type glm
--data_file ./datasets/PromptCBLUE/test.json
--cache_dir ./datasets/PromptCBLUE
--use_lora문제 기록 :
/work 디렉토리에 권한이없는 경우 환경 변수 추가 : export HF_MODULES_CACHE=~/.cache/huggingfacechmod u+x xxx.sh 연속 업데이트 ...
우수한 오픈 소스 모델과 같은 커뮤니티 덕분에 Chatglm-6b (Chatglm2), 중국어-알파카, Openllama, Bloom, Belle, Python, Gptneox, Baichuan.
이 프로젝트는 다음과 같은 우수한 오픈 소스 프로젝트를 나타냅니다.
PromptCblue
sentencepiece_chinese_bpe
chatglm_lora_multi-gpu
chatglm- 효율적인 튜닝
Zero_nlp
이 프로젝트는 연구 및 연구 전용입니다 . 모델의 교육 결과는 모델의 구조, 무작위성, 훈련 매개 변수, 데이터 세트 등과 같은 요소에 의해 영향을받습니다.이 프로젝트는 모델 교육 결과에 대한 책임이 없으며 모델 생성의 내용에 대한 책임이 없으며이 프로젝트의 사용으로 인한 손실에 대한 책임도 없습니다. 이 프로젝트는 여가 시간에 개인이 개발하고 유지 관리합니다. 제한된 시간과 제한된 저자 수준으로 인해 관련 질문에 대한 답변의 적시성을 보장 할 수 없습니다. 그러나 커뮤니케이션 그룹은 향후에 설립 될 것입니다. 모두가 서로 배우고 도와 줄 수 있습니다.
이 프로젝트가 도움이되면 다음 형식으로 참조하십시오.
@software{LLMs_train,
title = {{LLMs_train: A Set of Code to Fine-Tune Large Language Models}},
author = {Xudong Li},
year = {2023},
url = {https://www.github.com/5663015/LLMs_train},
}