نماذج ومنصات الذكاء الاصطناعي
الدليل الوحيد الذي تحتاجه لتعديل نموذج Llama 3 أو أي نموذج مفتوح المصدر آخر
تعديل النماذج اللغة الكبيرة (LLMs) مثل Llama 3 يتضمن تعديل نموذج مدرب مسبقًا على مهام محددة باستخدام مجموعة بيانات محددة لتحقيق أداء عالٍ. هذا الإجراء يستفيد من المعرفة الموجودة مسبقًا في النموذج، مما يجعله فعالًا من حيث التكلفة وموفرًا للوقت. في هذا الدليل، سنقوم بمراجعة الخطوات لتعديل Llama 3 باستخدام QLoRA (Quantized LoRA)، وهي طريقة فعالة من حيث المعلمات تقلل من استخدام الذاكرة وتكاليف الحوسبة.
نظرة عامة على التعديل
يتضمن التعديل عدة خطوات رئيسية:
- اختيار نموذج مدرب مسبقًا: اختر نموذجًا قاعديًا يتوافق مع الهيكل المطلوب.
- جمع مجموعة بيانات ذات صلة: جمع وتمهيد مجموعة بيانات محددة للمهمة.
- التعديل: تعديل النموذج باستخدام المجموعة البيانات لتحسين أدائه على مهام محددة.
- التقييم: تقييم أداء النموذج المعدل باستخدام مقاييس نوعية وكمية.
مفاهيم وأساليب
التعديل الكامل
التعديل الكامل يقوم بتحديث جميع معلمات النموذج، مما يجعله محددًا للمهمة الجديدة. هذه الطريقة تتطلب موارد حوسبية كبيرة وغالبًا ما تكون غير عملية للنماذج الكبيرة جدًا.
تعديل فعال من حيث المعلمات (PEFT)
PEFT يقوم بتحديث فقط جزء من معلمات النموذج، مما يقلل من متطلبات الذاكرة والحوسبة. هذه التقنية تمنع النسيان الكارثي وتحافظ على المعرفة العامة للنموذج.
التكيف منخفض الرتبة (LoRA) والتحويل الكمومي (QLoRA)
LoRA يقوم بتعديل فقط بعض المصفوفات منخفضة الرتبة، بينما QLoRA يقوم بتحويل هذه المصفوفات إلى دقة أقل لتحقيق تخفيض أكبر في استخدام الذاكرة.
أساليب التعديل
- التعديل الكامل: يتضمن هذا تعليم جميع معلمات النموذج على مجموعة بيانات المهمة. بينما يمكن أن يكون هذا الأسلوب فعالًا، إلا أنه يتطلب موارد حوسبية كبيرة.
- تعديل فعال من حيث المعلمات (PEFT): PEFT يقوم بتحديث فقط جزء من معلمات النموذج، مما يجعله أكثر كفاءة في استخدام الذاكرة. تقنيات مثل LoRA وQLoRA تنتمي إلى هذه الفئة.
ما هو LoRA؟
LoRA هو أسلوب تعديل محسّن حيث، بدلاً من تعديل جميع أوزان النموذج المدرب مسبقًا، يتم تعديل مصفوفين صغيرين يتقريبان المصفوفة الأكبر. هذه المصفوفات تشكل محول LoRA. يتم بعد ذلك تحميل هذا المحول المعدل إلى النموذج المدرب مسبقًا واستخدامه للاستدلال.
المزايا الرئيسية لLoRA:
- كفاءة الذاكرة: LoRA يقلل من استخدام الذاكرة عن طريق تعديل مصفوفات صغيرة بدلاً من النموذج بالكامل.
- إعادة الاستخدام: النموذج الأصلي يبقى غير معدل، ويمكن استخدام محولات LoRA متعددة معه، مما يسهل التعامل مع مهام متعددة بتخفيض متطلبات الذاكرة.
ما هو QLoRA؟
QLoRA يأخذ LoRA خطوة إلى الأمام عن طريق كمومية أوزان محولات LoRA إلى دقة أقل (مثل 4 بت بدلاً من 8 بت). هذا يقلل من استخدام الذاكرة ومتطلبات التخزينさらに، مع الحفاظ على مستوى من الفعالية.
المزايا الرئيسية لQLoRA:
- كفاءة الذاكرة الأكبر: بكمومية الأوزان، QLoRA يقلل بشكل كبير من متطلبات الذاكرة والتخزين للنموذج.
- الحفاظ على الأداء: على الرغم من الدقة المنخفضة، QLoRA يحافظ على مستويات الأداء قريبة من تلك التي تحققها النماذج بدقة كاملة.
التكيف المحدد للمهمة
خلال عملية التعديل، يتم تعديل معلمات النموذج بناءً على مجموعة البيانات الجديدة، مما يساعده على فهم وتوليد محتوى ذي صلة بالمهمة المحددة. هذه العملية تحتفظ بالمعرفة اللغوية العامة المكتسبة خلال التدريب المسبق، بينما يتم توجيه النموذج إلى دقة المجال المستهدف.
التعديل في الممارسة
التعديل الكامل مقابل PEFT
- التعديل الكامل: يتضمن تعليم النموذج بالكامل، وهو ما يمكن أن يكون مكلفًا حوسبيًا ويتطلب ذاكرة كبيرة.
- PEFT (LoRA وQLoRA): يقوم بتعديل فقط جزء من معلمات النموذج، مما يقلل من متطلبات الذاكرة ويمنع النسيان الكارثي، مما يجعله بديلًا أكثر كفاءة.
خطوات التنفيذ
- إعداد البيئة: تثبيت المكتبات اللازمة وإعداد بيئة الحوسبة.
- تحميل وتحويل المجموعة البيانات: تحميل المجموعة البيانات وتحويلها إلى صيغة مناسبة للنموذج.
- تحميل النموذج المدرب مسبقًا: تحميل النموذج القاعدي مع تكوين الكمومية إذا كنت تستخدم QLoRA.
- التمييز: تمييز المجموعة البيانات لتحضيرها للتدريب.
- الtraining: تعديل النموذج باستخدام المجموعة البيانات المعدة.
- التقييم: تقييم أداء النموذج على مهام محددة باستخدام مقاييس نوعية وكمية.
دليل خطوة بخطوة لتعديل LLM
إعداد البيئة
سنستخدم دفتر ملاحظات Jupyter لهذا البرنامج التعليمي. منصات مثل Kaggle، التي تقدم استخدام GPU مجاني، أو Google Colab مثالية لتشغيل هذه التجارب.
1. تثبيت المكتبات المطلوبة
أولاً، تأكد من تثبيت المكتبات اللازمة:
!pip install -qqq -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score
2. استيراد المكتبات وإعداد البيئة
import os import torch from datasets import load_dataset from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments, pipeline, HfArgumentParser ) from trl import ORPOConfig, ORPOTrainer, setup_chat_format, SFTTrainer from tqdm import tqdm import gc import pandas as pd import numpy as np from huggingface_hub import interpreter_login # تعطيل تسجيل Weights and Biases os.environ['WANDB_DISABLED'] = "true" interpreter_login()
3. تحميل المجموعة البيانات
سنستخدم مجموعة بيانات DialogSum لهذا البرنامج التعليمي:
dataset_name = "neil-code/dialogsum-test" dataset = load_dataset(dataset_name)
4. إنشاء تكوين BitsAndBytes
لتحميل النموذج بضغط 4 بت:
compute_dtype = getattr(torch, "float16") bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type='nf4', bnb_4bit_compute_dtype=compute_dtype, bnb_4bit_use_double_quant=False, )
5. تحميل النموذج المدرب مسبقًا
استخدام نموذج Microsoft’s Phi-2 لهذا البرنامج التعليمي:
model_name = 'microsoft/phi-2'
device_map = {"": 0}
original_model = AutoModelForCausalLM.from_pretrained(
model_name,
device_map=device_map,
quantization_config=bnb_config,
trust_remote_code=True,
use_auth_token=True
)
6. التمييز
تكوين التمييز:
tokenizer = AutoTokenizer.from_pretrained( model_name, trust_remote_code=True, padding_side="left", add_eos_token=True, add_bos_token=True, use_fast=False ) tokenizer.pad_token = tokenizer.eos_token
تعديل Llama 3 أو نماذج أخرى
عند تعديل نماذج مثل Llama 3 أو أي نماذج مفتوحة المصدر أخرى، هناك اعتبارات وضبط خاص يجب مراعاته لضمان الأداء الأمثل. هنا هي الخطوات المفصلة وآراء حول كيفية التعامل مع هذه النماذج، بما في ذلك Llama 3 وGPT-3 وMistral.
5.1 استخدام Llama 3
اختيار النموذج:
- تأكد من أن لديك معرّف النموذج الصحيح من مركز نموذج Hugging Face. على سبيل المثال، قد يتم تحديد نموذج Llama 3 باسم
meta-llama/Meta-Llama-3-8Bعلى Hugging Face. - تأكد من طلب الوصول وتسجيل الدخول إلى حساب Hugging Face الخاص بك إذا لزم الأمر لنماذج مثل Llama 3.
5.2 استخدام نماذج أخرى شائعة (مثل GPT-3 وMistral)
اختيار النموذج:
- لنماذج مثل GPT-3 وMistral، تأكد من استخدام اسم النموذج الصحيح ومعرّفه من مركز نموذج Hugging Face أو مصادر أخرى.
7. اختبار النموذج مع الاستدلال بدون 샷
تقييم النموذج الأساسي مع مدخل عينة:
from transformers import set_seed
index = 10
prompt = dataset['test'][index]['dialogue']
formatted_prompt = f"Instruct: Summarize the following conversation.\n{prompt}\nOutput:\n"
# توليد الإخراج
def gen(model, prompt, max_length):
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_length=max_length)
return tokenizer.batch_decode(outputs, skip_special_tokens=True)
res = gen(original_model, formatted_prompt, 100)
output = res[0].split('Output:\n')[1]
print(f'INPUT PROMPT:\n{formatted_prompt}')
print(f'MODEL GENERATION - ZERO SHOT:\n{output}')
8. تحويل المجموعة البيانات
تحويل أزواج الحوار-الملخص إلى مدخلات:
def create_prompt_formats(sample):
blurb = "Below is an instruction that describes a task. Write a response that appropriately completes the request."
instruction = "### Instruct: Summarize the below conversation."
input_context = sample['dialogue']
response = f"### Output:\n{sample['summary']}"
end = "### End"
parts = [blurb, instruction, input_context, response, end]
formatted_prompt = "\n\n".join(parts)
sample["text"] = formatted_prompt
return sample
dataset = dataset.map(create_prompt_formats)
المعلمات وآثارها
المعلمات تلعب دورًا حاسمًا في تحسين أداء النموذج. هنا بعض المعلمات الرئيسية التي يجب مراعاتها:
- معدل التعلم: يتحكم في سرعة تحديث معلمات النموذج. معدل تعلم عالٍ قد يؤدي إلى تلاشي أسرع ولكن قد يتجاوز الحل الأمثل. معدل تعلم منخفض يضمن تلاشيًا مستمرًا ولكن قد يتطلب المزيد من الفصول الدراسية.
- حجم الدفعة: عدد العينات المعالجة قبل تحديث معلمات النموذج. أحجام دفعة أكبر يمكن أن تحسن الاستقرار ولكنها تتطلب المزيد من الذاكرة. أحجام دفعة أصغر قد تؤدي إلى المزيد من الضوضاء في عملية التدريب.
- خطوات تجميع التدرج: هذا المعلم يساعد في محاكاة أحجام دفعة أكبر عن طريق تجميع التدرج على عدة خطوات قبل تحديث المعلمات.
- عدد الفصول: عدد المرات التي يتم فيها تمرير المجموعة البيانات الكاملة عبر النموذج. المزيد من الفصول يمكن أن يحسن الأداء ولكن قد يؤدي إلى التأثير السلبي إذا لم يتم إدارته بشكل صحيح.
- انحدار الوزن: تقنية تنظيم لمنع التأثير السلبي عن طريق معاقبة الأوزان الكبيرة.
- مجدول معدل التعلم: يعدل معدل التعلم خلال التدريب لتحسين الأداء والتقارب.
مثال لتكوين التدريب
orpo_args = ORPOConfig( learning_rate=8e-6, lr_scheduler_type="linear",max_length=1024,max_prompt_length=512, beta=0.1,per_device_train_batch_size=2,per_device_eval_batch_size=2, gradient_accumulation_steps=4,optim="paged_adamw_8bit",num_train_epochs=1, evaluation_strategy="steps",eval_steps=0.2,logging_steps=1,warmup_steps=10, report_to="wandb",output_dir="./results/")
10. تدريب النموذج
إعداد المدرب وبدء التدريب:
trainer = ORPOTrainer(
model=original_model,
args=orpo_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
tokenizer=tokenizer,
)
trainer.train()
trainer.save_model("fine-tuned-llama-3")
تقييم النموذج المعدل
بعد التدريب، تقييم أداء النموذج باستخدام مقاييس نوعية وكمية.
1. التقييم البشري
مقارنة الملخصات المولدة مع تلك المكتوبة من قبل البشر لتقييم الجودة.
2. التقييم الكمي
استخدام مقاييس مثل ROUGE لتقييم الأداء:
from rouge_score import rouge_scorer scorer = rouge_scorer.RougeScorer(['rouge1', 'rouge2', 'rougeL'], use_stemmer=True) scores = scorer.score(reference_summary, generated_summary) print(scores)
التحديات الشائعة والحلول
1. قيود الذاكرة
استخدام QLoRA يساعد في التغلب على مشاكل الذاكرة عن طريق كمومية أوزان النموذج إلى 4 بت. تأكد من أن لديك ذاكرة كافية لتعامل مع حجم الدفعة وحجم النموذج.
2. التأثير السلبي
مراقبة معايير التحقق لمنع التأثير السلبي. استخدم تقنيات مثل الإيقاف المبكر والانحدار الوزني.
3. التدريب البطيء
تحسين سرعة التدريب عن طريق تعديل حجم الدفعة ومعدل التعلم واستخدام تجميع التدرج.
4. جودة البيانات
تأكد من أن مجموعتك البيانات نظيفة ومحسنة جيدًا. جودة البيانات الرديئة يمكن أن تؤثر بشكل كبير على أداء النموذج.
الختام
تعديل النماذج اللغة الكبيرة باستخدام QLoRA هو طريقة فعالة لتعديل نماذج كبيرة مدربة مسبقًا على مهام محددة بتكلفة حوسبية مخفضة. باتباع هذا الدليل، يمكنك تعديل PHI، Llama 3 أو أي نموذج مفتوح المصدر آخر لتحقيق أداء عالٍ على مهامك المحددة.














