Use la instrucción ajustado para ajustar el modelo grande. El código de ejecución principal se copia de chino-llama-alpaca y ha realizado algunas modificaciones:
Nota : Todavía hay problemas.
Verifique la información relevante más adelante y agregue loss.requires_grad_(True) . para
Excluir el chatglm no es compatible, y el mismo modelo en el mismo modelo en chino-llama-alpaca todavía tiene este problema. No importa cómo digas que se modifica
Todavía puede funcionar con éxito después.
Aunque no hay problema con todo el proceso, el modelo no parece ser capacitado de manera efectiva. La pérdida ha sido alrededor de las 4 en punto, y el mismo problema todavía existe después de probar diferentes tasas de aprendizaje y capacitar más tiempo.
El proyecto es principalmente:
La tercera parte del modelo previamente capacitado está ajustado. El objetivo principal es explicar todo el proceso. Para una introducción detallada, puede consultar Zhihu: https://zhuanlan.zhihu.com/p/640086409. Si desea usarlo en la práctica, puede consultar otros proyectos publicados: [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
datasetsLa última versión del paquete debería estar bien.
1. Descargue el modelo CHATGLM-6B a model_hub/chatglm-6b
2. Prepare los datos, como el formato de los datos en datos/msra/trenes.txt, con una muestra en un comportamiento, y la muestra es similar:
{ "instruct" : "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用n分隔。如果没有结果,回答'没有'。" , "query" : "文本:一位郑州学人说,越秀学术讲座对郑州学界而言堪称功德之举。" , "answer" : "郑州_地名n越秀_机构名" }3. Después de preparar los datos, puede usar instrucciones para entrenar:
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. Después de completar el entrenamiento, puede usar test_sft_model.py para predecir:
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. Otros, como cómo definir la capa entrenable de Lora, se pueden ver usando fin_lora_names.py. Puede usar test_datset.py para probar datos. Pruebe el segmento de palabras usando test_toenizer.py. Pruebe el modelo original con test_model.py.
YMCUI/Chinese-llama-Alpaca: Llama chino y alpaca Modelo de lenguaje grande + Despliegue de capacitación local de CPU/GPU (chino Llama & Alpaca LLMS) (github.com)