Gunakan penyesuaian instruksi untuk menyempurnakan model besar. Kode berjalan utama disalin dari Cina-Llama-Alpaca dan telah membuat beberapa modifikasi:
Catatan : Masih ada masalah.
Silakan periksa informasi yang relevan nanti dan tambahkan loss.requires_grad_(True) ke modeling_chatglm.py untuk berjalan dengan sukses. untuk
Tidak termasuk chatglm tidak didukung, dan model yang sama dalam model yang sama di Cina-Llama-Alpaca masih memiliki masalah ini. Tidak peduli bagaimana Anda mengatakan itu dimodifikasi
Itu masih bisa berjalan dengan sukses setelah itu.
Meskipun tidak ada masalah dengan seluruh proses, model tampaknya tidak dapat dilatih secara efektif. Kerugiannya sekitar jam 4, dan masalah yang sama masih ada setelah mencoba tingkat pembelajaran yang berbeda dan pelatihan lebih lama.
Proyek ini terutama:
Bagian ketiga dari model pra-terlatih disempurnakan. Tujuan utamanya adalah untuk menjelaskan seluruh proses. Untuk diperkenalkan secara terperinci, Anda dapat memeriksa Zhihu: https://zhuanlan.zhihu.com/p/640086409. Jika Anda ingin menggunakannya dalam praktik, Anda dapat merujuk ke proyek lain yang diterbitkan: [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
datasetsVersi paket terbaru harus baik -baik saja.
1. Unduh model chatglm-6b ke model_hub/chatglm-6b
2. Siapkan data, seperti format data dalam data/msra/train.txt, dengan satu sampel dalam satu perilaku, dan sampel serupa:
{ "instruct" : "你现在是一个实体识别模型,你需要提取文本里面的人名、地名、机构名,如果存在结果,返回'实体_实体类型',不同实体间用n分隔。如果没有结果,回答'没有'。" , "query" : "文本:一位郑州学人说,越秀学术讲座对郑州学界而言堪称功德之举。" , "answer" : "郑州_地名n越秀_机构名" }3. Setelah menyiapkan data, Anda dapat menggunakan instruksi untuk berlatih:
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. Setelah pelatihan selesai, Anda dapat menggunakan test_sft_model.py untuk memprediksi:
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. Lainnya, seperti cara mendefinisikan lapisan Lora yang dapat dilatih, dapat dilihat menggunakan fin_lora_names.py. Anda dapat menggunakan test_datset.py untuk menguji data. Test Word Segmenter menggunakan test_toenizer.py. Uji model asli dengan test_model.py.
ymcui/cina-llama-alpaca: llama Cina & alpaca model bahasa besar + penyebaran pelatihan CPU/GPU lokal (llama cina & alpaca llms) (github.com)