🌐 Detecting your location…

كيفية ضبط LLMs محليًا

⏱️2 min read  ·  424 words

How to Fine-Tune LLMs Locally

ضبط نموذج لغة كبير مستخدم محليًا ليتطلب مجموعة من وحدات معالجة الرسومات. في عام 2026، بفضل أساليب القياس الكمي وكفاءة المعلمات مثل LoRA، يمكنك ضبط نموذج المعلمة 7-8B على وحدة معالجة رسومات مستهلكة واحدة مزودة بذاكرة VRAM تتراوح سعتها بين 12 و24 جيجابايت – أو حتى على Apple Silicon مع ذاكرة موحدة. يستعرض هذا الدليل المسار الكامل: إعداد البيانات، وتشغيل الضبط الدقيق لـ LoRA، ودمج النتيجة في نموذج يمكنك تشغيله فعليًا.

جدول المحتويات

لماذا الضبط الدقيق بدلاً من المطالبة

تعمل الهندسة السريعة وRAG على حل معظم المشكلات – جربها أولاً. يستحق الضبط الدقيق بذل جهد إضافي على وجه التحديد عندما تحتاج إلى أن يتبع النموذج تنسيق إخراج ضيق باستمرار، أو يتبنى نغمة معينة عبر آلاف الأجيال، أو ينفذ مهمة يتعامل معها النموذج الأساسي بشكل غير متسق حتى مع المطالبات والأمثلة الجيدة. إنه يصنف السلوك في الأوزان بدلاً من إعادة شرحه في كل مطالبة.

متطلبات الأجهزة والبرامج

بالنسبة للنموذج الأساسي ذو المعلمات 7-8B مع تكميم 4 بت وLoRA، فإن ذاكرة VRAM بسعة 12-16 جيجابايت تكون واقعية على وحدة معالجة رسومات واحدة. تدفعك الطرز الأكبر حجمًا 13-14B نحو بطاقات سعة 24 جيجابايت. تثبيت المكدس الأساسي:

pip install torch transformers peft bitsandbytes accelerate datasets trl

peft(الضبط الدقيق بكفاءة المعلمة) يطبق LoRA.bitsandbytesيتعامل مع تكميم 4 بت بحيث يتناسب النموذج الأساسي مع الذاكرة.trlيوفر حلقة تدريب مصممة لضبط نموذج اللغة بشكل خاص.

إعداد مجموعة بيانات التدريب

يعد التنسيق أكثر أهمية من الحجم بالنسبة للمهام الضيقة – غالبًا ما يتفوق 200-500 مثال عالي الجودة على 5000 مثال صاخب. استخدم تنسيق تعليمات بسيط مثل JSONL:

{"instruction": "Summarize this support ticket in one sentence.", "input": "Customer reports login failures since the 2.3 update...", "output": "User cannot log in after updating to version 2.3."}
{"instruction": "Summarize this support ticket in one sentence.", "input": "Payment declined for annual plan renewal...", "output": "Annual plan renewal payment was declined."}

قم بتحميله بـdatasetsالمكتبة:

from datasets import load_dataset

dataset = load_dataset("json", data_files="train.jsonl", split="train")

def format_example(example):
    return {
        "text": f"### Instruction:\n{example['instruction']}\n\n### Input:\n{example['input']}\n\n### Response:\n{example['output']}"
    }

dataset = dataset.map(format_example)

الضبط الدقيق باستخدام LoRA

يقوم LoRA بتجميد أوزان النموذج الأساسي وتدريب مصفوفات محولات صغيرة منخفضة الرتبة يتم حقنها في طبقات الانتباه بدلاً من ذلك. يؤدي هذا إلى تقليل المعلمات القابلة للتدريب من المليارات إلى الملايين، وهذا هو سبب ملاءمتها للأجهزة الاستهلاكية:

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
import torch

model_name = "meta-llama/Meta-Llama-3-8B"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=bnb_config, device_map="auto")

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()

عادةً ما يطبع هذا السطر الأخير شيئًا مثل “المعلمات القابلة للتدريب: 0.06% من الإجمالي” – وهو تذكير ملموس لسبب ملاءمة هذا لوحدة معالجة رسومات واحدة حيث لا يمكن الضبط الدقيق الكامل.

تشغيل حلقة التدريب

trl|||| يلف عناق الوجهSFTTrainerمع الإعدادات الافتراضية المعقولة لضبط التعليمات:Trainer📋 نسخ

from trl import SFTTrainer, SFTConfig

training_args = SFTConfig(
    output_dir="./lora-output",
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    num_train_epochs=3,
    learning_rate=2e-4,
    logging_steps=10,
    save_strategy="epoch",
    bf16=True,
)

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    args=training_args,
    dataset_text_field="text",
)

trainer.train()

بقدر ما تسمح به الذاكرة، ثم قم بزيادةper_device_train_batch_sizeللوصول إلى حجم الدفعة الفعال من 8-16.gradient_accumulation_stepsدمج وتصدير النموذج

بعد التدريب، قم بدمج أوزان محول LoRA مرة أخرى في النموذج الأساسي لنقطة تفتيش مستقلة يمكنك توزيعها أو تحويلها:

📋 نسخ

from peft import PeftModel

base_model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto")
merged_model = PeftModel.from_pretrained(base_model, "./lora-output/checkpoint-final")
merged_model = merged_model.merge_and_unload()

merged_model.save_pretrained("./merged-model")
tokenizer.save_pretrained("./merged-model")

قم بتحويل النموذج المدمج إلى تنسيق GGUF للاستدلال المحلي السريع باستخدام

أو أولاما:llama.cpp📋 نسخ

python convert_hf_to_gguf.py ./merged-model --outfile my-model.gguf --outtype q4_k_m

ollama create my-model -f Modelfile
ollama run my-model

المزالق الشائعةq4_k_mيعد التجاوز في مجموعات البيانات الصغيرة هو الفشل الأكثر شيوعًا – إذا انخفضت خسارتك إلى ما يقرب من الصفر خلال حقبة ما، فمن المحتمل أنك تحفظ بدلاً من التعميم، ويجب مراقبة فقدان التحقق بشكل منفصل عن فقدان التدريب. معدل التعلم هو المشكلة الثانية الأكثر شيوعًا: يعمل 2e-4 مع معظم إعدادات 7-8B LoRA، ولكن الارتفاع في مجموعات البيانات الصغيرة يؤدي إلى زعزعة استقرار التدريب بسرعة.

شاهد أيضًا تناسق التنسيق الفوري. إذا كانت بيانات التدريب الخاصة بك تستخدم قالب تعليمات محدد، فيجب أن تستخدم استدعاءات الاستدلال نفس القالب تمامًا – يؤدي التنسيق غير المتطابق في وقت الاستدلال إلى انخفاض جودة الإخراج بصمت دون حدوث أي خطأ.

لمعرفة المزيد حول تشغيل النماذج بكفاءة بمجرد ضبطها بدقة، لدينا

المعمل المنزلي ودليل DevOps

يغطي البنية التحتية للاستضافة الذاتية، وإذا كنت تقوم بإنشاء واجهة برمجة تطبيقات حول النموذج الخاص بك، فاطلع علىالبرنامج التعليمي FastAPI REST.الأسئلة الشائعةما مقدار البيانات التي أحتاجها بالفعل؟

بالنسبة للمهام الضيقة والمحددة جيدًا، غالبًا ما يكفي 200-500 مثال عالي الجودة. تستفيد التغييرات السلوكية الأوسع (النغمة، اتباع تعليمات المهام المتعددة) من آلاف الأمثلة المتنوعة.

هل يمكنني ضبط جهاز MacBook؟
For narrow, well-defined tasks, 200-500 high-quality examples is often enough. Broader behavior changes (tone, multi-task instruction following) benefit from thousands of diverse examples.

Can I fine-tune on a MacBook?
نعم، باستخدام دعم التدريب الخاص بـ MLX أو llama.cpp على Apple Silicon. الذاكرة الموحدة تعني أن جهاز MacBook بسعة 32-64 جيجابايت يمكنه التعامل مع الضبط الدقيق 7-8B LoRA، على الرغم من أنه أبطأ من وحدة معالجة الرسومات NVIDIA المخصصة.

ما الفرق بين لورا وQLoRA؟
يضيف QLoRA تكميم 4 بت للنموذج الأساسي المجمد أعلى LoRA، مما يقلل متطلبات الذاكرة بشكل أكبر مع الحد الأدنى من فقدان الجودة – وهذا ما يجعل نماذج 8B قابلة للتدريب على وحدات معالجة الرسومات سعة 12-16 جيجابايت.

هل أحتاج إلى الضبط أم أن RAG سيعمل؟
إذا كانت المشكلة هي أن “النموذج لا يعرف هذه المعلومات”، فاستخدم RAG. إذا كانت المشكلة هي أن “النموذج يعرف المعلومات ولكنه لا يقوم بالتنسيق أو التصرف بالطريقة التي أحتاجها”، فإن الضبط الدقيق هو الأداة الأفضل.

كم من الوقت يستغرق ضبط LoRA؟
بالنسبة لـ 500 مثال و3 فترات على وحدة معالجة الرسومات (GPU) لمستهلك واحد، توقع في أي مكان من 20 دقيقة إلى بضع ساعات اعتمادًا على طول التسلسل وفئة وحدة معالجة الرسومات (GPU).

هل أنت مستعد للضبط الدقيق؟

ابدأ بمجموعة بيانات صغيرة ونظيفة تتكون من 200 إلى 300 مثال لمهمة واحدة ضيقة قبل التوسع. خط الأنابيب أعلاه – محول LoRA، وSFTTrainer، ودمج، وتصدير GGUF – هو نفس الشكل المستخدم لضبط الإنتاج الدقيق، فقط على نطاق يناسب الأجهزة التي ربما تمتلكها بالفعل.

تب
فريق TechPulse
تم النشر في 1 أغسطس 2026


MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা