
يعتمد هذا المشروع على الصينية اللاما-ألباكا V3.1 للحصول على التعليمات. لقد كانت الصينية-لاما-ألباكا رائدة في التوسع الصيني والتحسين على أساس لاما. استنادًا إلى Llama الأصلي ، وسعت قائمة المفردات الصينية واستخدمت البيانات الصينية للتدريب الثانوي ، مما يزيد من تحسين قدرة الفهم الدلالي الصيني.
تكوين المشروع : <Sources>
.
├── README.md # 使用说明文件
├── SHA256.md # LLaMA模型SHA值对比文件
├── notebooks
│ ├── convert_and_quantize_chinese_alpaca_plus.ipynb
│ └── convert_and_quantize_chinese_llama.ipynb
├── requirements.txt # 依赖文件
└── scripts
├── chinese_sp.model # 中文词表文件
├── crawl_prompt.py # 1. 通过OpenAI的大模型(如ChatGPT、GPT4等)生成可用于微调的数据
├── inference_hf.py # 5. 对微调训练产生的LoRA模型和原始LLaMA模型做推理
├── merge_llama_with_chinese_lora.py # 4. 合并模型权重
├── merge_tokenizers.py # 2. 词表扩充
└── run_clm_pt_with_peft.py # 3. 对模型进行训练或者微调سواء كنت ترغب في التحضير المسبق أو النقطة ، فأنت بحاجة إلى إعداد البيانات. هناك طريقتان لإعداد البيانات:
scripts/crawl_prompt.py لإنشاء البيانات المقابلة. الفكرة الأساسية هي استخدام ChatGPT أو نماذج Openai الفعالة الأخرى لتوليد البيانات. # tokenizer
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer . model - O . / tokenizer . model
wget https : // agi . gpt4 . org / llama / LLaMA / tokenizer_checklist . chk - O . / tokenizer_checklist . chk
# 7B
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / consolidated . 00. pth - O . / 7 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / params . json - O . / 7 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 7 B / checklist . chk - O . / 7 B / checklist . chk
# 13B
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 00. pth - O . / 13 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / consolidated . 01. pth - O . / 13 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / params . json - O . / 13 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 13 B / checklist . chk - O . / 13 B / checklist . chk
# 30B
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 00. pth - O . / 30 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 01. pth - O . / 30 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 02. pth - O . / 30 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / consolidated . 03. pth - O . / 30 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / params . json - O . / 30 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 30 B / checklist . chk - O . / 30 B / checklist . chk
# 65B
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 00. pth - O . / 65 B / consolidated . 00. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 01. pth - O . / 65 B / consolidated . 01. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 02. pth - O . / 65 B / consolidated . 02. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 03. pth - O . / 65 B / consolidated . 03. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 04. pth - O . / 65 B / consolidated . 04. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 05. pth - O . / 65 B / consolidated . 05. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 06. pth - O . / 65 B / consolidated . 06. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / consolidated . 07. pth - O . / 65 B / consolidated . 07. pth
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / params . json - O . / 65 B / params . json
wget https : // agi . gpt4 . org / llama / LLaMA / 65 B / checklist . chk - O . / 65 B / checklist . chkتحتاج إلى تنزيل أوزان طراز Llama من معلمات الحجم المختلفة. كلما كانت المعلمات أكبر ، كلما زاد الوزن ، زاد الوزن ، كلما كانت الدقة ، ووقت التثبيت والتدريب أفضل أيضًا. بشكل عام ، سيكون نموذج 7B أو 13B هو اختيار معظم الناس.
تأكد من تأكيد سلامة نموذج قاعدة Llama وتحقق مما إذا كان يتسق مع القيمة الموضحة في sha256.md ، وإلا لا يمكن إجراء عملية الدمج.
# 安装依赖库
pip install git + https : // github . com / huggingface / transformers
# 转化HF权重
python - m transformers . models . llama . convert_llama_weights_to_hf
- - input_dir llama - weights
- - model_size 7 B
- - output_dir llama - hf - weights
> python - m transformers . models . llama . convert_llama_weights_to_hf - - input_dir . / - - model_size 7 B - - output_dir . / output / 7 B - hf إذا كنت لا ترغب في تحويل نفسك يدويًا ، فيمكنك أيضًا استخدام نموذج Llama-HF الذي قام الآخرون بتحويله. Pinkmanlove لديه وزن LAMA-HF المحولة في Huggingface. إذا فشلت ، يمكنك البحث عن أشخاص آخرين يتحولون جيدًا في HuggingFace-Models .
تتكون عملية التدريب والضوء الكاملة من ثلاث خطوات:
python scripts / merge_tokenizers . py
- - llama_tokenizer_dir llama_tokenizer_dir
- - chinese_sp_model_file chinese_sp_model_file
> python scripts / merge_tokenizers . py - - llama_tokenizer_dir output / 7 B - hf - - chinese_sp_model_file scripts / chinese_sp . modelوصف المعلمة:
llama_tokenizer_dir : أشر إلى الدليل حيث يتم تخزين رمز Llama الأصلي ؛chinese_sp_model_file : أشر إلى ملف المفردات الصيني (inchank_sp.model) المدربين مع SentencePiece ؛ملحوظة
هناك طريقتان رئيسيتان لتوسيع قائمة المفردات: (1) دمج وتوسيع قائمة المفردات ؛ (2) العثور على قائمة مفردات كبيرة وحذف كلمات عديمة الفائدة للحصول على قائمة المفردات ؛
خلال مرحلة ما قبل التدريب ، يتم استخدام المجموعة الصينية العامة لمزيد من التدريب على أساس أوزان اللاما الأصلية. تنقسم العملية إلى مرحلتين:
يتقارب النموذج ببطء في المرحلة الأولى من التدريب. إذا لم يكن هناك وقت وفيرة بشكل خاص وحساب الموارد ، فمن المستحسن تخطي هذه المرحلة. المرحلة الثانية من التدريب قبل التدريب هي كما يلي (بطاقة واحدة لاعب واحد):
########参数设置########
lr = 2e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / dir
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / pt / data / dir
data_cache = temp_data_cache_dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_pt_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - data_cache_dir ${ data_cache }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.05
- - weight_decay 0.01
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - block_size 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - gradient_checkpointing
- - ddp_find_unused_parameters Falseوصف المعلمة:
--model_name_or_path : الدليل حيث يوجد نموذج Llama الأصلي HF ؛--tokenizer_name_or_path : الدليل الذي يوجد فيه رمز الصيني الللاما (نتيجة لتوليف merge_tokenizers.py) ؛--dataset_dir : دليل للبيانات المدربة مسبقًا ، والتي يمكن أن تحتوي على ملفات نصية عادية متعددة تنتهي في txt ؛--data_cache_dir : حدد دليلًا يتم فيها تخزين ملفات ذاكرة التخزين المؤقت للبيانات ؛آلات متعددة وبطاقات متعددة:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_pt_with_peft . py
...قام طراز Llama الصيني بتوسيع قائمة المفردات الصينية بناءً على الإصدار الأصلي واستخدم بيانات النص الصيني العام للدراب الثانوي. يوفر المؤلف هنا طريقتان لتنزيل أوزان ما قبل التدريب دون مطالبةنا بإنفاق الموارد على تدريب أنفسنا:
| اسم النموذج | بيانات التدريب | إعادة إنشاء النموذج | مقاس | تنزيل لورا |
|---|---|---|---|---|
| الصينية لاما -7 ب | عام 20G | الأصلي LAMA-7B | 770 م | [Baidu NetDisk] [Google Drive] |
| الصينية بلاما زائد 7 ب ️ | الغرض العام 120g | الأصلي LAMA-7B | 790M | [Baidu NetDisk] [Google Drive] |
| الصينية لاما -13 ب | عام 20G | الأصلي LAMA-13B | 1g | [Baidu NetDisk] [Google Drive] |
| الصينية بلاما زائد -13 ب ️ | الغرض العام 120g | الأصلي LAMA-13B | 1g | [Baidu NetDisk] [Google Drive] |
.from_pretrained() .| اسم النموذج | اسم مكالمة النموذج | وصلة |
|---|---|---|
| الصينية لاما -7 ب | Ziqingyang/الصينية لما لورا-7 ب | نموذج محور الرابط |
| الصينية بلاما زائد 7 ب | Ziqingyang/الصينية بلاما بلس لورا-7 ب | نموذج محور الرابط |
| الصينية لاما -13 ب | Ziqingyang/الصينية لما لورا-13 ب | نموذج محور الرابط |
| الصينية بلاما زائد 13 ب | Ziqingyang/الصينية بلاما بلس لورا -13 ب | نموذج محور الرابط |
يستخدم نظام التدريب أيضًا LORA لتعديل دقيق فعال ويزيد من عدد المعلمات القابلة للتدريب.
بطاقة واحدة لاعب واحد:
########参数部分########
lr = 1e-4
lora_rank = 8
lora_alpha = 32
lora_trainable = "q_proj,v_proj,k_proj,o_proj,gate_proj,down_proj,up_proj"
modules_to_save = "embed_tokens,lm_head"
lora_dropout = 0.05
pretrained_model = path / to / hf / llama / or / merged / llama / dir / or / model_id
chinese_tokenizer_path = path / to / chinese / llama / tokenizer / dir
dataset_dir = path / to / sft / data / dir
per_device_train_batch_size = 1
per_device_eval_batch_size = 1
training_steps = 100
gradient_accumulation_steps = 1
output_dir = output_dir
peft_model = path / to / peft / model / dir
validation_file = validation_file_name
deepspeed_config_file = ds_zero2_no_offload . json
########启动命令########
torchrun - - nnodes 1 - - nproc_per_node 1 run_clm_sft_with_peft . py
- - deepspeed ${ deepspeed_config_file }
- - model_name_or_path ${ pretrained_model }
- - tokenizer_name_or_path ${ chinese_tokenizer_path }
- - dataset_dir ${ dataset_dir }
- - validation_split_percentage 0.001
- - per_device_train_batch_size ${ per_device_train_batch_size }
- - per_device_eval_batch_size ${ per_device_eval_batch_size }
- - do_train
- - do_eval
- - seed $ RANDOM
- - fp16
- - max_steps ${ training_steps }
- - lr_scheduler_type cosine
- - learning_rate ${ lr }
- - warmup_ratio 0.03
- - weight_decay 0
- - logging_strategy steps
- - logging_steps 10
- - save_strategy steps
- - save_total_limit 3
- - evaluation_strategy steps
- - eval_steps 250
- - save_steps 500
- - gradient_accumulation_steps ${ gradient_accumulation_steps }
- - preprocessing_num_workers 8
- - max_seq_length 512
- - output_dir ${ output_dir }
- - overwrite_output_dir
- - ddp_timeout 30000
- - logging_first_step True
- - lora_rank ${ lora_rank }
- - lora_alpha ${ lora_alpha }
- - trainable ${ lora_trainable }
- - modules_to_save ${ modules_to_save }
- - lora_dropout ${ lora_dropout }
- - torch_dtype float16
- - validation_file ${ validation_file }
- - peft_path ${ peft_model }
- - gradient_checkpointing
- - ddp_find_unused_parameters Falseوصف المعلمة:
--tokenizer_name_or_path : الدليل الذي يوجد فيه رمز الصيني-alpaca (نتيجة لتوليف merge_tokenizers.py) ؛--dataset_dir : دليل لبيانات صياغة التعليمات ، يحتوي على ملفات بيانات صياغة واحدة أو أكثر من التعليمات بتنسيق ستانفورد الألباكا في JSON ؛--validation_file : يتبع ملف صقل تعليمات واحد يستخدم كمجموعة التحقق من الصحة ، ينتهي في JSON ، أيضًا تنسيق Stanford Alpaca ؛ما يسمى بتنسيق ستانفورد الألباكا هو:
[
{ "instruction" : ...,
"input" : ...,
"output" : ... },
...
]يمكن أيضًا إنشاء البيانات هنا باستخدام طريقة توليد البيانات الصينية-ألاما-ALPACA-USAGE/#.
تعليمات التكوين:
إذا كنت ترغب في مواصلة تدريب أوزان لورا لنموذج الصينيين-ألباكا:
--model_name_or_path : نموذج Llama الأصلي HF (إذا واصلت تدريب نماذج الألبكة غير الزائدة) أو دمج الصينية بلاما لوررا (إذا واصلت تدريب النماذج بالإضافة إلى النماذج) ؛--peft_path : دليل الوزن الصيني-ألباكا لورا ؛ لا حاجة لتحديد --lora_rank ، --lora_alpha ، --lora_dropout ، --trainable و --modules_to_save .
إذا كنت ترغب في ضبط الأوزان Lora على أساس التدريب الصيني واللاما:
--model_name_or_path : دمج نموذج HF تنسيق الصيني الللاما بعد الصينية لما لورا (بغض النظر عما إذا كان نموذجًا زائد أم لا) ؛--peft_path : لا تقدم هذه المعلمة وحذفها- --peft_path من البرنامج النصي ؛ يجب تحديد --lora_rank ، --lora_alpha ، --lora_dropout ، --trainable و --modules_to_save .
آلات متعددة وبطاقات متعددة:
torchrun
- - nnodes ${ num_nodes }
- - nproc_per_node ${ num_gpu_per_node }
- - node_rank ${ node_rank }
- - master_addr ${ master_addr }
- - master_port ${ master_port }
run_clm_sft_with_peft . py
...مناسبة للصينية واللاما ، الصينية بلاما ، الصينية اللباكا
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir وصف المعلمة:
--base_model : الدليل الذي يتم فيه تخزين أوزان نموذج Llama وملفات التكوين بتنسيق HF ؛--lora_model : الدليل الذي يتم فيه إلغاء ضغط الملف في Llama/alpaca lora الصينية ، يمكنك أيضًا استخدام اسم استدعاء طراز Hub Model ؛--output_type : يحدد تنسيق الإخراج ، والذي يمكن أن يكون pth أو huggingface . إذا لم يتم تحديدها ، فإن الافتراضي هو pth ؛--output_dir : يحدد الدليل الذي يحفظ الأوزان النموذجية الكاملة ، الافتراضي هو ./ ؛--offload_dir : بالنسبة للمستخدمين ذوي الذاكرة المنخفضة ، تحتاج إلى تحديد مسار ذاكرة التخزين المؤقت لإزالة التحميل ؛ شرح إضافي على output_type :
.pth لتحديد الكمي ونشر: أدوات llama.cpp ؛.bin لـ: محولات للتفكير ؛ توليد النص Webui لبناء واجهات ؛يتم تنفيذ عملية دمج وزن Lora الفردية عبر الإنترنت وتحديدها في وقت واحد:
يتطلب دمج الصينيين-ألباكا زائد اثنين من الأوزان ، وهما الصينيين بلاما لورا والصينيين-ألباكا زائد لورا.
python scripts / merge_llama_with_chinese_lora . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_plus_lora , path_to_chinese_alpaca_plus_lora
- - output_type [ pth | huggingface ]
- - output_dir path_to_output_dir يتم تنفيذ عملية الدمج متعدد الأوزان على الإنترنت ويحددها في وقت واحد:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_original_llama_hf_dir
- - lora_model path_to_chinese_llama_or_alpaca_lora
- - with_prompt
- - interactive إذا تم تنفيذ البرنامج النصي merge_llama_with_chinese_lora_to_hf.py قبل دمج أوزان Lora ، فلن تكون هناك حاجة لتحديد --lora_model ، وطريقة بدء التشغيل أبسط:
CUDA_VISIBLE_DEVICES = 0 python scripts / inference_hf . py
- - base_model path_to_merged_llama_or_alpaca_hf_dir
- - with_prompt
- - interactive إذا تم حذف CUDA_VISIBLE_DEVICES=0 ، فهو وضع التفكير في وحدة المعالجة المركزية. بالطبع ، يمكنك أيضًا تشغيل ونشره في WebUI. <stes>
تدعم النماذج في هذا المشروع بشكل أساسي أساليب القياس الكمي والتفكير والنشر التالي.
| طرق التفكير والنشر | سمات | منصة | وحدة المعالجة المركزية | GPU | التحميل الكمي | واجهة الرسوم البيانية | درس تعليمي |
|---|---|---|---|---|---|---|---|
| llama.cpp | الخيارات الكمية الغنية والتفكير المحلي الفعال | عام | ✅ | ✅ | ✅ | وصلة | |
| ؟محولات | واجهة الاستدلال المحولات الأصلية | عام | ✅ | ✅ | ✅ | ✅ | وصلة |
| توليد النص ويبوي | كيفية نشر واجهة واجهة مستخدم الويب الواجهة الأمامية | عام | ✅ | ✅ | ✅ | ✅ | وصلة |
| اللاما | واجهة التفاعل الرسومية ضمن MacOS (يجب مطابقتها مع نموذج llama.cpp) | ماكوس | ✅ | ✅ | ✅ | وصلة |