استخدم تعليمات صقلها لضبط النموذج الكبير. يتم نسخ رمز التشغيل الرئيسي من الصينية الللام-ألباكا وقام ببعض التعديلات:
ملاحظة : لا تزال هناك مشاكل.
يرجى التحقق من المعلومات ذات الصلة لاحقًا وإضافة loss.requires_grad_(True) إلى Modeling_ChatglM.Py لتشغيلها بنجاح. ل
لا يتم دعم chatglm ، وما زال نفس النموذج في نفس النموذج في الصينية واللباكا لديه هذه المشكلة. بغض النظر عن كيفية قوله يتم تعديله
لا يزال من الممكن تشغيله بنجاح بعد ذلك.
على الرغم من عدم وجود مشكلة في العملية بأكملها ، لا يبدو أن النموذج قادر على تدريبه بفعالية. كانت الخسارة حوالي الساعة الرابعة ، وما زالت نفس المشكلة موجودة بعد تجربة معدلات التعلم المختلفة والتدريب لفترة أطول.
المشروع أساسا:
الجزء الثالث من النموذج الذي تم تدريبه مسبقًا تم ضبطه. الغرض الرئيسي هو شرح العملية برمتها. للحصول على مقدمة مفصلة ، يمكنك التحقق من 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. قم بإعداد البيانات ، مثل تنسيق البيانات في البيانات/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 لاختبار البيانات. اختبار SPISTINER باستخدام test_toenizer.py. اختبار النموذج الأصلي مع test_model.py.
YMCUI/صينية-بلاما-ألباكا: صينية لاما وألباكا نموذج اللغة الكبيرة + نشر التدريب على وحدة المعالجة المركزية/وحدة معالجة الرسومات (الصينية LLAMA & Alpaca LLMS) (github.com)