دليل الضبط الدقيق لـ Gemma 4 | وثائق Unsloth
دليل Unsloth الرسمي لضبط نموذج Gemma 4 الدقيق يركز على التدريب المحلي للنماذج. يشرح كيفية تكييف نماذج Google مفتوحة الأوزان باستخدام سير عمل مبسّطة لضبط دقيق سريع وموفّر للذاكرة، مما يجعل التخصيص عمليًا على الأجهزة الاستهلاكية.
الوسوم
ملخص سريع
دليل Unsloth الرسمي لضبط نموذج Gemma 4 الدقيق يركز على التدريب المحلي للنماذج. يشرح كيفية تكييف نماذج Google مفتوحة الأوزان باستخدام سير عمل مبسّطة لضبط دقيق سريع وموفّر للذاكرة، مما يجعل التخصيص عمليًا على الأجهزة الاستهلاكية.
دليل الضبط الدقيق لـ Gemma 4 | توثيق Unsloth
لم يعد الضبط الدقيق لنموذج لغوي كبير مفتوح الأوزان نشاطًا مقتصرًا على البحث فقط؛ بل أصبح خطوة قياسية في العديد من خطوط الإنتاج. يعرف النموذج الأساسي كيفية توليد نص بطلاقة، لكنه لا يعرف تنسيق بياناتك، أو مفردات مجالك، أو أسلوب منتجك. هذا هو المكان الذي يأتي فيه الضبط الدقيق. مع عائلة Gemma 4 من Google ومجموعة أدوات التدريب المحسّنة من Unsloth، تتقلص الفجوة بين "نموذج مُدرَّب مسبقًا" و"مساعد قابل للنشر" إلى تشغيل تدريب واحد سريع.
هذا الدليل عبارة عن شرح عملي خطوة بخطوة لسير عمل الضبط الدقيق لـ Gemma 4 كما هو موصوف في توثيق Unsloth. يغطي البيئة التي تحتاج إليها، وخطوات التثبيت، وإعداد مجموعة البيانات، وتكوين LoRA، والتدريب، وأخيرًا كيفية تشغيل وتصدير نموذجك المضبوط بدقة. صفحة التوثيق التي يستند إليها هذا الدليل تم تحديثها آخر مرة في 2026-07-18T14:46:20.453Z، لذا تعكس التعليمات أدناه الحالة الحالية لأدوات Unsloth.
ما يفترضه هذا الدليل
تم بناء Unsloth حول فكرة بسيطة: يجب أن يكون الضبط الدقيق سريعًا، ويستخدم أقل قدر ممكن من VRAM، ولا يتطلب إعادة كتابة حلقة التدريب الخاصة بك. يحقق ذلك من خلال مجموعة من النوى (kernels) المحسّنة لطبقات الانتباه والطبقات الخطية، ومعالجة تلقائية للتكميم (quantization)، وتكامل وثيق مع حزمتي Transformers و TRL للتدريب من Hugging Face.
Gemma 4، من Google، هي عائلة النماذج مفتوحة الأوزان التي صُمم سير العمل هذا من أجلها. اعتمادًا على حجم النسخة التي تختارها، ستحتاج إلى ذاكرة GPU أكبر أو أصغر، لكن كود التدريب نفسه يظل متطابقًا تقريبًا.
يجب أن تكون مرتاحًا مع لغة Python، وأن يكون لديك فهم أساسي لماهية LoRA و QLoRA، وأن تعرف طريقك في الطرفية (Terminal). لست بحاجة إلى أن تكون مهندس تعلم آلة — تحتاج إلى GPU والاستعداد لتنفيذ بضعة أوامر.
المتطلبات
قبل تشغيل أي شيء، تأكد من أن بيئتك تستوفي الحد الأدنى من المتطلبات.
العتاد (Hardware)
- GPU من NVIDIA مع دعم CUDA. تأتي تسريعات Unsloth من نوى مخصصة تستهدف بنى معمارية حديثة لـ GPU، لذا يُنصح باستخدام GPU من جيل Turing (سلسلة RTX 20) أو أحدث. ستمنحك بنى Ampere و Ada Lovelace و Hopper أفضل النتائج.
- ذاكرة VRAM كافية. يعتمد المقدار الدقيق على نسخة Gemma 4 التي تريد ضبطها بدقة ومستوى التكميم الذي تستخدمه. مع QLoRA بدقة 4-bit، يمكنك ضبط نموذج Gemma 4 أصغر على أجهزة المستهلك بذاكرة VRAM تتراوح بين 8–16 غيغابايت. تتطلب النسخ الأكبر محطة عمل أو GPU سحابي بذاكرة 24 غيغابايت أو أكثر.
- ذاكرة نظام (RAM) ومساحة تخزين كافية لاحتواء أوزان النموذج، ومجموعة بيانات التدريب، ونقاط التحقق (checkpoints) التي تحفظها.
البرمجيات
- توزيعة لينكس 64 بت أو نظام Windows Subsystem for Linux (WSL2). تفترض معظم التعليمات وجود قشرة (shell) بنمط Unix.
- Python 3.9 أو أحدث.
- مجموعة أدوات CUDA وبرامج تشغيل NVIDIA. تعتمد النسخة التي تحتاجها تحديدًا على إصدار PyTorch الذي تثبّته؛ يسرد الموقع الرسمي لـ PyTorch وتوثيق Unsloth التوافقات الممكنة.
- إصدار حديث من PyTorch. يواكب Unsloth إصدارات PyTorch عن كثب، وتثبيت بناء حديث سيجنّبك مشاكل عدم تطابق الإصدارات.
إذا كنت تستخدم Google Colab، فأنت مغطى في معظم الجوانب: يأتي Colab مزودًا بإصدارات حديثة من PyTorch و CUDA، ويوفر Unsloth مسار تثبيت محددًا لبيئات Colab.
التثبيت خطوة بخطوة
عملية تثبيت Unsloth قصيرة عمدًا. المكتبة موزعة كحزمة Python، وأسهل طريقة للحصول عليها هي عبر pip.
افتح طرفية وثبّت الحزمة الأساسية:
pip install unslothيقوم هذا بسحب حزمة Unsloth الرئيسية مع تبعياتها، بما في ذلك transformers و datasets و trl و peft و accelerate. إذا وجدت أن بيئتك تحتوي بالفعل على إصدار معين من PyTorch وتريد تجنب قيام Unsloth باستبداله، يمكنك تخطي حل التبعيات وتثبيت المكتبة فقط:
pip install --no-deps unslothعلى Google Colab، المسار الموصى به هو تثبيت الإضافة colab-new، التي تقوم تلقائيًا بحل إصدارات التبعيات الخاصة بالبيئة:
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"لتثبيت نسخة متطورة مباشرة من المستودع، يمكنك استخدام نفس الأمر مع الإضافة colab-new على أي جهاز لينكس:
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"بمجرد انتهاء التثبيت، تحقق من أن المكتبة تُستورد بشكل سليم وأن الإصدار يبدو معقولًا:
python -c "import unsloth; print(unsloth.__version__)"يجب أن ترى سلسلة إصدار مطبوعة دون أي تحذيرات حول امتدادات CUDA المفقودة. إذا تلقيت خطأ يذكر بيئة تشغيل CUDA مفقودة، فتحقق مجددًا من تثبيت PyTorch وإصدار برنامج تشغيل CUDA قبل المتابعة.
يفضل بعض المستخدمين أيضًا تثبيت إصدار معين من PyTorch أولاً، ثم إضافة Unsloth فوقه. هذا نهج جيد إذا كان مشروعك مثبتًا على إصدار محدد من transformers:
pip install torch --index-url https://download.pytorch.org/whl/cu124
pip install unslothفقط تذكر: ثبّت PyTorch أولاً، ثم Unsloth، واترك Unsloth يقوم بمواءمة بقية حزمة التدريب.
تحميل Gemma 4 باستخدام Unsloth
تتمحور واجهة برمجة تطبيقات Unsloth بأكملها حول دالتين: FastLanguageModel.from_pretrained و FastLanguageModel.get_peft_model. الأولى تحمّل نموذجًا وتطبّق التحسينات والتكميم؛ والثانية تحوّل النموذج المحمّل إلى نموذج LoRA قابل للتدريب وفعّال من حيث المعلمات.
كتلة التحميل القياسية تبدو كالتالي:
import torch
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/gemma-4-...", # pick the Gemma 4 variant you need
max_seq_length=2048,
dtype=None,
load_in_4bit=True,
)تستحق ثلاث وسائط اهتمامًا خاصًا:
model_name— هذا هو معرّف Hugging Face لنقطة تفتيش Gemma 4 التي تريد ضبطها بدقة. يعتمد المعرّف الدقيق على حجم النموذج وما إذا كنت تريد النموذج الأساسي أو نسخة مضبوطة بالتعليمات (instruction-tuned). يستضيف Unsloth نسخًا مكمّمة ومحسّنة مسبقًا من هذه النماذج على مركز Hugging Face الخاص به، وهذه هي التي يجب عليك استخدامها للاستفادة من تحسينات السرعة.max_seq_length— يضبط نافذة السياق للتدريب. تدعم عائلة Gemma 4 سياقات طويلة، لكن يجب عليك تعيين هذه القيمة بما يتوافق مع بياناتك الفعلية. قيمة 2048 مناسبة لمعظم مجموعات بيانات المحادثات، بينما قد تتطلب مهام المستندات الأطول قيمة 4096 أو أكثر. ضع في اعتبارك أن استخدام الذاكرة ينمو مع طول التسلسل.load_in_4bit— يفعّل التكميم بنمط QLoRA. هذا يقلل بصورة كبيرة من بصمة VRAM للنموذج، مما يسمح لك بالضبط الدقيق على وحدات معالجة رسوميات استهلاكية قد تكون صغيرة جدًا لولا ذلك. إذا كان لديك GPU عالي المستوى بذاكرة وفيرة، يمكنك تعيين هذا إلىFalseوالضبط الدقيق بدقة كاملة أو بدقة 8-bit.
يمكن ترك المتغير dtype بقيمة None، مما يسمح لـ Unsloth باختيار نوع النقطة العائمة الأمثل بناءً على عتادك. على وحدات Ampere والأحدث، سيكون هذا عادةً bfloat16، وهو أكثر استقرارًا من float16 أثناء التدريب.
إعداد مجموعة البيانات الخاصة بك
لا يجبرك Unsloth على تنسيق بيانات واحد. إذا سبق لك استخدام مكتبة datasets من Hugging Face أو SFTTrainer من TRL، فأنت تعرف بالفعل كيفية إدخال البيانات. التنسيق الأكثر شيوعًا للضبط الدقيق للمحادثات هو تنسيق بأسلوب المحادثة، حيث تكون كل محادثة عبارة عن قائمة من الرسائل مع حقلي role و content.
على سبيل المثال، يبدو تنسيق ShareGPT الشهير كالتالي:
{
"conversations": [
{"from": "human", "value": "Explain what a vector database is."},
{"from": "gpt", "value": "A vector database stores embeddings..."}
]
}يمكنك تحميل مثل هذه المجموعة باستخدام مكتبة datasets من Hugging Face:
from datasets import load_dataset
dataset = load_dataset("json", data_files="my_data.json", split="train")إذا كانت بياناتك نصًا عاديًا، يمكنك تعريف قالب محادثة بسيط وإعادة تنسيق مجموعة البيانات مباشرة:
def format_chat(example):
text = ""
for turn in example["conversations"]:
if turn["from"] == "human":
text += f"<|user|>\n{turn['value']}\n"
elif turn["from"] == "gpt":
text += f"<|assistant|>\n{turn['value']}\n"
return {"text": text}
dataset = dataset.map(format_chat, remove_columns=dataset.column_names)يقبل SFTTrainer الذي سنستخدمه لاحقًا وسيطة dataset_text_field ويتولى الباقي. الشيء المهم هو أن مجموعة البيانات تحتوي على حقل نصي يمثل المحادثة المنسقة بالكامل، بما في ذلك الرموز الخاصة التي تفصل بين الأدوار.
تكوين محولات LoRA
بعد تحميل النموذج وإعداد مجموعة البيانات، الخطوة التالية هي تكوين إعداد الضبط الدقيق الفعّال من حيث المعلمات. يكشف Unsloth عن غلاف رفيع حول PEFT يجعل هذا الأمر مباشرًا:
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
lora_alpha=16,
lora_dropout=0,
bias="none",
use_gradient_checkpointing="unsloth",
random_state=3407,
)المعلمات الرئيسية هي:
r— رتبة مصفوفات LoRA. الرتبة 16 هي قيمة افتراضية جيدة لمعظم المهام. القيم الأكبر تزيد من القدرة التعبيرية لكنها تستخدم أيضًا ذاكرة VRAM أكبر أثناء التدريب.lora_alpha— عامل القياس لأوزان LoRA. إبقاؤه مساويًا للرتبة هو نقطة بداية شائعة.lora_dropout— مضبوط على0لأن نوى Unsloth والمحسّنات المدمجة تضيف بالفعل تنظيمًا خاصًا بها أثناء التدريب؛ نادرًا ما يكون التسرب (dropout) على طبقات المحول ضروريًا.target_modules— طبقات الإسقاط حيث يتم ربط محولات LoRA. تغطية جميع إسقاطات الانتباه الأربعة بالإضافة إلى إسقاطات MLP هي طريقة قياسية لنماذج من فئة Gemma.use_gradient_checkpointing="unsloth"— يفعّل تنفيذ حفظ الذاكرة من Unsloth للفحص النقطي للتدرجات (gradient checkpointing). هذا أحد الأسباب التي تمكنك من تدريب نماذج أكبر على وحدات GPU أصغر.
التدريب باستخدام SFT Trainer
الآن بعد أن أصبحت مجموعة البيانات والنموذج جاهزين، نبدأ التدريب. يعمل Unsloth مباشرة مع trl.SFTTrainer، لذا تحصل على القوة الكاملة لنظام التدريب البيئي من Hugging Face دون تعلم واجهة برمجة تطبيقات جديدة.
from trl import SFTTrainer
from transformers import TrainingArguments
training_args = TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=5,
max_steps=60,
learning_rate=2e-4,
fp16=True,
logging_steps=1,
output_dir="gemma4-finetuned",
optim="adamw_8bit",
seed=3407,
)
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=2048,
args=training_args,
)لاحظ اختيار optim="adamw_8bit"، الذي يقلل من ذاكرة حالة المحسّن. مع التكميم بدقة 4-bit والفحص النقطي للتدرجات، هذا ما يسمح لوحدة معالجة رسوميات استهلاكية متواضعة بضبط نموذج Gemma 4 بدقة.
ابدأ تشغيل التدريب:
trainer.train()أثناء التدريب سترى الخسارة تتناقص في السجلات. إذا واجهت خطأ نفاد الذاكرة (CUDA out of memory)، اخفض per_device_train_batch_size إلى 1 أو 2 وزد gradient_accumulation_steps للتعويض. حجم الدفعة المنخفض مع التراكم ينتج نتيجة شبه مماثلة لحجم الدفعة الكبير بينما يستخدم ذاكرة أقل بكثير.
معظم مجموعات البيانات الصغيرة والمتوسطة تكفيها بضع مئات من الخطوات. لست بحاجة إلى التدريب لعدة مرورات (epochs)؛ يتقارب LoRA بسرعة، ومن السهل الإفراط في تدريب محول صغير على مجموعة بيانات صغيرة.
حفظ وتحميل نموذجك مرة أخرى
بمجرد انتهاء التدريب، لديك خياران: حفظ أوزان المحول فقط، أو دمج المحول في النموذج الكامل وتصديره إلى تنسيق قياسي.
الخيار الأبسط هو حفظ محول LoRA فقط:
model.save_pretrained("gemma4-lora")
tokenizer.save_pretrained("gemma4-lora")يمنحك هذا مجموعة صغيرة من الملفات، عادةً بضع عشرات من الميغابايتات، تحتوي فقط على المحولات المدربة. لاستخدام النموذج المضبوط بدقة مجددًا، أعد تحميل نموذج Gemma 4 الأساسي باستخدام Unsloth ثم حمّل المحول فوقه:
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/gemma-4-...",
max_seq_length=2048,
load_in_4bit=True,
)
from peft import PeftModel
model = PeftModel.from_pretrained(model, "gemma4-lora")إذا كنت تريد نموذجًا مدمجًا بالكامل يمكن تشغيله دون Unsloth أو PEFT، يمكنك دمج المحول في الأوزان الأساسية:
model = model.merge_and_unload()
model.save_pretrained("gemma4-merged")
tokenizer.save_pretrained("gemma4-merged")يحتوي الدليل الناتج على نقطة تفتيش قياسية من Transformers يمكن تحميلها مثل أي نموذج آخر.
أمثلة الاستخدام
تشغيل الاستدلال
بعد الضبط الدقيق، بدّل النموذج إلى وضع الاستدلال باستخدام أداة مساعدة بسيطة من Unsloth:
model = FastLanguageModel.for_inference(model)ثم مرر مطالبتك بنفس تنسيق المحادثة الذي استخدمته أثناء التدريب:
messages = [
{"role": "user", "content": "Write a support response for a user whose order is delayed."},
]
inputs = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
return_tensors="pt",
).to("cuda")
outputs = model.generate(input_ids=inputs, max_new_tokens=512)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)يجب أن يعكس الناتج الأسلوب والتنسيق والمعرفة التي دربتها في النموذج — وهذا هو الهدف الأساسي من العملية برمتها.
التصدير إلى GGUF للنشر المحلي
من أكثر المهام شيوعًا بعد التدريب تصدير النموذج المضبوط بدقة إلى GGUF لاستخدامه مع أدوات مثل llama.cpp أو Ollama. يوفر Unsloth أمرًا واحدًا لهذا:
model.save_pretrained_gguf(
"gemma4-gguf",
tokenizer,
quantization_method="q8_0",
)يمكنك اختيار طرق تكميم أخرى مثل f16 أو q4_k_m أو q5_k_m. تحافظ طريقة q8_0 على معظم جودة النموذج مع إنتاج ملف بحجم معقول يعمل جيدًا على مضيفات CPU.
أفضل الممارسات واستكشاف الأخطاء وإصلاحها
المشكلتان الأكثر شيوعًا أثناء تشغيل الضبط الدقيق هما أخطاء نفاد الذاكرة وبطء التدريب. إليك كيف يعالج Unsloth كلتيهما:
- استخدم التكميم بدقة 4-bit. إذا لم يكن
load_in_4bit=Trueمضبوطًا، فاضبطه. هذا وحده يمكن أن يخفض استخدام VRAM بنسبة تصل إلى ثلاثة أرباع. - فعّل `use_gradient_checkpointing="unsloth"`. هذا يقايض كمية صغيرة من وقت التدريب مقابل تقليل كبير في الذاكرة.
- استخدم محسّن AdamW بدقة 8-bit. غالبًا ما تكون حالة المحسّن هي مستهلك الذاكرة الخفي؛ حالتها بدقة 8-bit تقللها بشكل كبير.
- قلّص نافذة السياق. إذا كانت مهمتك لا تتطلب مستندات طويلة، أبقِ
max_seq_lengthمتواضعًا. - زد تراكم التدرجات بدلاً من حجم الدفعة. حجم دفعة بمقدار 1 مع عدد تراكم مرتفع أكثر أمانًا من دفعة كبيرة قد لا تلائم الذاكرة.
في جانب السرعة، تأكد من تحميل نقاط تفتيش النموذج المستضافة على Unsloth بدلاً من نقاط تفتيش Google الأصلية. إصدارات Unsloth تحتوي على تحسينات محسوبة مسبقًا وأوزان مكمّمة مصممة للعمل مع نوى المكتبة السريعة. تحميل نقطة تفتيش عادية من الـ Hub سيعمل، لكنك ستفقد معظم فائدة الأداء.
الخلاصة
يصف توثيق Unsloth لـ Gemma 4 سير عمل قصيرًا وقابلًا للتكرار وسهل التكيف مع أحجام النماذج ومجموعات البيانات المختلفة. ثبّت المكتبة، وحمّل نموذج Gemma 4 مكمّمًا، وأرفق محول LoRA، وتدرب باستخدام SFT trainer، واحفظ النتيجة — هذه هي الدورة بأكملها. ما يهم أكثر من الكود هو الانضباط حوله: حضّر مجموعة بيانات نظيفة بتنسيق متسق، واختر رتبة LoRA تتناسب مع تعقيد مهمتك، وحافظ على أطوال تسلسل صادقة، وقاوم الرغبة في الإفراط في التدريب.
النموذج المضبوط بدقة الذي ستحصل عليه لن يكون مجرد نسخة من Gemma 4 بنص جديد. سيكون نسخة من النموذج تعرف تنسيقك المحدد، ومجالك المحدد، وقيودك المحددة. ومع حلقة تدريب Unsloth الفعّالة من حيث الذاكرة، يمكنك الوصول إلى ذلك على عتاد يمتلكه معظم الفرق بالفعل. سواء كنت تبني مساعد دعم عملاء، أو أداة مساعدة لتوليد الأكواد، أو أداة تلخيص مستندات داخلية، يمنحك هذا الدليل المسار الموثق من النموذج الأساسي إلى الضبط الدقيق القابل للنشر.



