ใช้การเรียนการสอนปรับแต่งเพื่อปรับแต่งรุ่นใหญ่ รหัสวิ่งหลักถูกคัดลอกมาจาก Chinese-Llama-Alpaca และได้ทำการแก้ไขบางอย่าง:
หมายเหตุ : ยังมีปัญหา
โปรดตรวจสอบข้อมูลที่เกี่ยวข้องในภายหลังและเพิ่ม loss.requires_grad_(True) ไปยัง modeling_chatglm.py เพื่อทำงานสำเร็จ สำหรับ
ไม่รองรับการยกเว้น Chatglm และรุ่นเดียวกันในรุ่นเดียวกันในภาษาจีน-llama-alpaca ยังคงมีปัญหานี้อยู่ ไม่ว่าคุณจะพูดว่ามันถูกแก้ไขอย่างไร
มันยังสามารถทำงานได้สำเร็จหลังจากนั้น
แม้ว่าจะไม่มีปัญหากับกระบวนการทั้งหมด แต่โมเดลดูเหมือนจะไม่สามารถผ่านการฝึกอบรมได้อย่างมีประสิทธิภาพ การสูญเสียมีประมาณ 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-llama-Alpaca: Llama Llama & Alpaca รูปแบบภาษาขนาดใหญ่ + การฝึกอบรมการฝึกอบรม CPU/GPU ในท้องถิ่น (จีน Llama & Alpaca LLMS) (github.com)