الذكاء الاصطناعي
الدليل الوحيد الذي تحتاجه لتعديل لاما 3 أو أي نموذج مفتوح المصدر آخر
تعديل نماذج اللغة الكبيرة (LLMs) مثل لاما 3 يتضمن تعديل نموذج تم تدريبه مسبقًا على مهام محددة باستخدام مجموعة بيانات محددة للنطاق. هذا العملية تستفيد من المعرفة الموجودة مسبقًا للنموذج، مما يجعلها فعالة من حيث التكلفة وموفرة للوقت مقارنةً بتدريبها من الصفر. في هذا الدليل، سنقوم بمراجعة الخطوات لتعديل لاما 3 باستخدام QLoRA (Quantized LoRA)، وهي طريقة فعالة من حيث المعلمات تقلل من استخدام الذاكرة وتكلفة الحوسبة.
نظرة عامة على التعديل
يتضمن التعديل عدة خطوات رئيسية:
- اختيار نموذج تم تدريبه مسبقًا: اختر نموذجًا أساسيًا يتوافق مع هيكلك المطلوب.
- جمع مجموعة بيانات ذات صلة: جمّع مجموعة بيانات محددة لمهامك.
- التعديل: تعديل النموذج باستخدام المجموعة البيانية لتحسين أدائه على مهام محددة.
- التقييم: تقييم أداء النموذج المعدل باستخدام معايير نوعية وكمية.
مفاهيم وتقنيات
التعديل الكامل
التعديل الكامل يقوم بتحديث جميع معلمات النموذج، مما يجعله محددًا للمهمة الجديدة. هذه الطريقة تتطلب موارد حوسبة كبيرة وغالبًا ما تكون غير عملية للنماذج الكبيرة جدًا.
تعديل فعال من حيث المعلمات (PEFT)
PEFT يقوم بتحديث جزء فقط من معلمات النموذج، مما يقلل من متطلبات الذاكرة وتكلفة الحوسبة. هذه التقنية تمنع نسيان كارثي ويحافظ على المعرفة العامة للنموذج.
التكيف منخفض الرتبة (LoRA) والتحويل الكمومي LoRA (QLoRA)
LoRA يقوم بتعديل مصفوفات منخفضة الرتبة فقط، بينما QLoRA يقوم بتحويل هذه المصفوفات إلى صيغة كمومية لتقليل بصمة الذاكرة进一步.
طرق التعديل
- التعديل الكامل: يتضمن تدريب جميع معلمات النموذج على مجموعة البيانات المحددة للمهمة. بينما يمكن أن تكون هذه الطريقة فعالة جدًا، فإنها مكلفة من حيث الحوسبة وتتطلب ذاكرة كبيرة.
- تعديل فعال من حيث المعلمات (PEFT): PEFT يقوم بتحديث جزء فقط من معلمات النموذج، مما يجعله أكثر كفاءة في استخدام الذاكرة. تقنيات مثل التكيف منخفض الرتبة (LoRA) والتحويل الكمومي LoRA (QLoRA) تناسب هذه الفئة.
ما هو LoRA؟
LoRA هو طريقة تعديل محسنة حيث، بدلاً من تعديل جميع أوزان النموذج المُدرب مسبقًا، يتم تعديل مصفوفين صغيرين يتقريبان المصفوفة الأكبر. هذه المصفوفات تشكل محول LoRA. يتم بعد ذلك تحميل هذا المحول المعدل إلى النموذج المُدرب مسبقًا واستخدامه للاستدلال.
المزايا الرئيسية ل LoRA:
- كفاءة الذاكرة: LoRA يقلل من بصمة الذاكرة عن طريق تعديل مصفوفات صغيرة بدلاً من النموذج كله.
- إعادة الاستخدام: يبقى النموذج الأصلي غير معدل، ويمكن استخدام محولات LoRA المتعددة معه، مما يسهل التعامل مع مهام متعددة بمتطلبات ذاكرة أقل.
ما هو QLoRA؟
QLoRA يأخذ LoRA خطوة إلى الأمام عن طريق تحويل أوزان محولات LoRA إلى دقة أقل (مثل 4 بت بدلاً من 8 بت). هذا يقلل من استخدام الذاكرة ومتطلبات التخزين بشكل أكبر مع الحفاظ على مستوى فعالية قابل للمقارنة.
المزايا الرئيسية ل QLoRA:
- كفاءة الذاكرة الأكبر: عن طريق تحويل الأوزان، يقلل QLoRA بشكل كبير من متطلبات الذاكرة والتخزين للنموذج.
- الحفاظ على الأداء: على الرغم من الدقة المنخفضة، يحافظ QLoRA على مستويات أداء قريبة من تلك التي تم الحصول عليها مع نماذج الدقة الكاملة.
التكيف المحدد للمهمة
خلال التعديل، يتم تعديل معلمات النموذج بناءً على مجموعة البيانات الجديدة، مما يساعده على فهم المحتوى المتعلق بالمهمة المحددة بشكل أفضل وتوليد محتوى ذي صلة. هذا العملية يحافظ على المعرفة اللغوية العامة التي تم الحصول عليها خلال التدريب المسبق بينما يعدل النموذج على دقة المجال المستهدف.
التعديل في الممارسة
التعديل الكامل مقابل PEFT
- التعديل الكامل: يتضمن تدريب النموذج كله، مما يمكن أن يكون مكلفًا من حيث الحوسبة ويحتاج إلى ذاكرة كبيرة.
- PEFT (LoRA و QLoRA): PEFT يقوم بتعديل جزء فقط من المعلمات، مما يقلل من متطلبات الذاكرة ويلغي نسيان كارثي، مما يجعله بديلاً أكثر كفاءة.
خطوات التنفيذ
- إعداد البيئة: تثبيت المكتبات اللازمة وإعداد بيئة الحوسبة.
- تحميل وتحويل المجموعة البيانية: تحميل المجموعة البيانية وتحويلها إلى صيغة مناسبة للنموذج.
- تحميل النموذج المُدرب مسبقًا: تحميل النموذج الأساسي مع تكوين التحويل الكمومي إذا كنت تستخدم QLoRA.
- التحويل الكمومي: تحويل المجموعة البيانية لتحضيرها للتدريب.
- التدريب: تعديل النموذج باستخدام المجموعة البيانية المُحضرة.
- التقييم: تقييم أداء النموذج باستخدام معايير نوعية وكمية.
دليل خطوة بخطوة لتعديل 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. تحميل المجموعة البيانية
dataset_name = "neil-code/dialogsum-test" dataset = load_dataset(dataset_name)
4. إنشاء تكوين BitsAndBytes
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. تحميل النموذج المُدرب مسبقًا
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
)
تعديل لاما 3 أو نماذج أخرى
عند تعديل نماذج مثل لاما 3 أو أي نماذج مفتوحة المصدر متقدمة أخرى، هناك اعتبارات وتعديلات محددة مطلوبة لضمان الأداء الأمثل. هنا هي الخطوات والرؤى حول كيفية التعامل مع هذا بالنسبة لنماذج مختلفة، بما في ذلك لاما 3 و GPT-3 و Mistral.
5.1 استخدام لاما 3
اختيار النموذج:
- تأكد من أن لديك معرّف النموذج الصحيح من مركز نماذج Hugging Face. على سبيل المثال، قد يتم تحديد نموذج لاما 3 باسم
meta-llama/Meta-Llama-3-8Bعلى Hugging Face. - تأكد من طلب الوصول وتسجيل الدخول إلى حساب Hugging Face الخاص بك إذا كان ذلك مطلوبًا لنماذج مثل لاما 3.
التحويل الكمومي:
- استخدم معالج التحويل الكمومي المناسب لاما 3، مع التأكد من توافقه مع النموذج ودعمه للميزات المطلوبة مثل الحشو والرموز الخاصة.
الذاكرة والحوسبة:
- يتطلب تعديل نماذج كبيرة مثل لاما 3 موارد حوسبة كبيرة. تأكد من أن بيئتك، مثل إعداد GPU قوي، يمكنها التعامل مع متطلبات الذاكرة والprocessing.
5.2 استخدام نماذج أخرى شائعة (مثل GPT-3، Mistral)
اختيار النموذج:
- لنماذج مثل GPT-3 و Mistral، تأكد من استخدام اسم النموذج ومعرّف正确 من مركز نماذج Hugging Face أو مصادر أخرى.
7. اختبار النموذج مع الاستدلال بدون شوط
from transformers import set_seed
set_seed(42)
index = 10
prompt = dataset['test'][index]['dialogue']
formatted_prompt = f"Instruct: Summarize the following conversation.\n{prompt}\nOutput:\n"
# Generate output
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)
التقييم الكمّي
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)












