대형 모델을 미세 조정하려면 지시 사항 미세 조정을 사용하십시오. 기본 실행 코드는 중국-롤라마 알파카에서 복사되어 몇 가지 수정을했습니다.
참고 : 여전히 문제가 있습니다.
나중에 관련 정보를 확인하고 modeling_chatglm.py에 loss.requires_grad_(True) 추가하여 성공적으로 실행하십시오. ~을 위한
ChatGLM을 제외하고는 지원되지 않으며 중국어 알파카의 동일한 모델에서 동일한 모델이 여전히이 문제가 있습니다. 당신이 어떻게 말하든 수정됩니다
나중에 여전히 성공적으로 실행할 수 있습니다.
전체 프로세스에는 문제가 없지만 모델은 효과적으로 교육을받을 수없는 것 같습니다. 손실은 약 4시였으며, 다른 학습 속도와 훈련을 더 오래 시도한 후에도 같은 문제가 여전히 존재합니다.
프로젝트는 주로 다음과 같습니다.
미리 훈련 된 모델의 세 번째 부분은 미세 조정되었습니다. 주요 목적은 전체 프로세스를 설명하는 것입니다. 자세한 소개는 Zhihu : https://zhuanlan.zhihu.com/p/640086409를 확인할 수 있습니다. 실제로 사용하려면 [Taishan1994 (xiximamayo) (github.com)] (https://github.com/taishan1994)를 참조하십시오.
mpi4py
transformers == 4.28 . 1
peft == 0.3 . 0
icetk
deepspeed == 0.9 . 2
accelerate
cpm_kernels
sentencepiece == 0.1 . 99
peft = 0.3 . 0
torch = 2.0 . 0
datasets최신 패키지 버전은 괜찮습니다.
1. ChatGLM-6B 모델을 Model_Hub/ChatGLM-6B로 다운로드하십시오
2. Data/MSRA/TRAIN.TXT의 데이터 형식과 같은 데이터를 하나의 동작에 하나의 샘플과 같은 데이터를 준비하면 샘플은 비슷합니다.
{ "instruct" : "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用n分隔。如果没有结果,回答'没有'。" , "query" : "文本:一位郑州学人说,越秀学术讲座对郑州学界而言堪称功德之举。" , "answer" : "郑州_地名n越秀_机构名" }3. 데이터를 준비한 후 지침을 사용하여 훈련 할 수 있습니다.
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_sft_with_peft . py
- - deepspeed ds_zero2_no_offoad . json
- - model_name_or_path model_hub / chatglm - 6 b
- - tokenizer_name_or_path model_hub / chatglm - 6 b
- - dataset_dir data / msra /
- - per_device_train_batch_size 8
- - per_device_eval_batch_size 8
- - do_train
- - seed $ RANDOM
- - fp16
- - num_train_epochs 3
- - learning_rate 3e-5
- - warmup_ratio 0.01
- - weight_decay 0
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - save_steps 200
- - gradient_accumulation_steps 1
- - preprocessing_num_workers 8
- - max_seq_length 256
- - output_dir output_dir
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank 8
- - lora_alpha 32
- - trainable query_key_value
- - lora_dropout 0.05
- - torch_dtype float16
- - gradient_checkpointing
- - ddp_find_unused_parameters False4. 훈련이 완료된 후 test_sft_model.py를 사용하여 예측할 수 있습니다.
import os
import torch
from transformers import AutoTokenizer , AutoModel
from peft import PeftModel
tokenizer = AutoTokenizer . from_pretrained ( "model_hub/chatglm-6b" , trust_remote_code = True )
model = AutoModel . from_pretrained ( "model_hub/chatglm-6b" , trust_remote_code = True ). half ()
model_vocab_size = model . get_output_embeddings (). weight . size ( 0 )
model . resize_token_embeddings ( len ( tokenizer ))
model = PeftModel . from_pretrained ( model , os . path . join ( "output_dir" , "adapter_model" ))
model . cuda ()
model . eval ()
response , history = model . chat ( tokenizer , "你好" , history = [])
print ( response )
response , history = model . chat ( tokenizer , "晚上睡不着应该怎么办" , history = [])
print ( response )
response , history = model . chat ( tokenizer , "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用n分隔。如果没有结果,回答'没有'。文本:我们是受到郑振铎先生、阿英先生著作的启示,从个人条件出发,瞄准现代出版史研究的空白,重点集藏解放区、国民党毁禁出版物。" , history = [])
print ( response )5. Lora의 훈련 가능한 층을 정의하는 방법과 같은 다른 사람들은 Fin_lora_names.py를 사용하여 볼 수 있습니다. test_datset.py를 사용하여 데이터를 테스트 할 수 있습니다. test_toenizer.py를 사용하여 테스트 워드 세그먼터. test_model.py로 원본 모델을 테스트하십시오.
YMCUI/Chinese-Lllama-Alpaca : 중국 라마 & 알파카 대형 언어 모델 + 로컬 CPU/GPU 교육 배포 (중국 LLAMA & ALPACA LLMS) (github.com)