Verwenden Sie eine Feinabstimmung, um das große Modell zu optimieren. Der Hauptlaufcode wird von Chinese-Llama-Alpaka kopiert und hat einige Änderungen vorgenommen:
Hinweis : Es gibt immer noch Probleme.
Bitte überprüfen Sie die relevanten Informationen später und fügen Sie loss.requires_grad_(True) hinzu. für
Das Ausschluss von Chatglm wird nicht unterstützt, und dasselbe Modell in demselben Modell in Chinesisch-Llama-Alpaca hat dieses Problem immer noch. Egal wie Sie sagen, es ist geändert
Es kann danach immer noch erfolgreich ausgeführt werden.
Obwohl es kein Problem mit dem gesamten Prozess gibt, scheint das Modell nicht effektiv geschult zu werden. Der Verlust lag bei 4 Uhr und das gleiche Problem besteht immer noch, nachdem sie unterschiedliche Lernraten ausprobiert und länger trainiert haben.
Das Projekt ist hauptsächlich:
Der dritte Teil des vorgebreiteten Modells ist fein abgestimmt. Der Hauptzweck besteht darin, den gesamten Prozess zu erklären. Eine detaillierte Einführung finden Sie in Zhihu: https://zhuanlan.zhihu.com/p/640086409. Wenn Sie es in der Praxis verwenden möchten, können Sie sich auf andere veröffentlichte Projekte beziehen: [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
datasetsDie neueste Paketversion sollte in Ordnung sein.
1. Laden Sie das Chatglm-6b-Modell auf model_hub/chatglm-6b herunter
2. Bereiten Sie die Daten wie das Format der Daten in Daten/MSRA/Train.txt vor, mit einer Stichprobe in einem Verhalten, und die Stichprobe ist ähnlich:
{ "instruct" : "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用n分隔。如果没有结果,回答'没有'。" , "query" : "文本:一位郑州学人说,越秀学术讲座对郑州学界而言堪称功德之举。" , "answer" : "郑州_地名n越秀_机构名" }3. Nachdem Sie die Daten vorbereitet haben, können Sie Anweisungen zum Training verwenden:
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. Nach Abschluss des Trainings können Sie test_sft_model.py verwenden, um vorherzusagen:
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. Andere, wie zum Beispiel, wie man die trainierbare Schicht von Lora definiert, kann mit fin_lora_names.py betrachtet werden. Sie können test_datset.py verwenden, um Daten zu testen. Testwortsegmentierer mit test_toenizer.py. Testen Sie das Originalmodell mit test_model.py.
YMCUI/Chinese-Llama-Alpaca: Chinesische Lama & Alpaca Großspracheles Modell + Lokale CPU/GPU-Trainingseinsatz (chinesische Lama & Alpaca LLMs) (Github.com)