الدرس 16 من 24

التدريب مع Unsloth

تصدير نموذجك

3 دقيقة للقراءة

بعد التدريب، تحتاج لتصدير نموذجك للنشر. Unsloth يوفر عدة خيارات تصدير بما في ذلك GGUF لـ Ollama.

خيارات التصدير

الصيغة حالة الاستخدام الأدوات
محولات LoRA الاستدلال مع النموذج الأساسي PEFT، vLLM
نموذج مدمج HuggingFace Hub transformers
GGUF Ollama، llama.cpp النشر المحلي
ONNX النشر على الحافة ONNX Runtime

حفظ محولات LoRA فقط

أصغر تصدير - فقط الأوزان المدرّبة:

from unsloth import FastLanguageModel

# بعد التدريب، احفظ محول LoRA فقط
model.save_pretrained("./outputs/lora-adapter")
tokenizer.save_pretrained("./outputs/lora-adapter")

# الحجم: ~50-200 MB حسب الرتبة

تحميل محولات LoRA

from unsloth import FastLanguageModel

# حمّل النموذج الأساسي
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Llama-3.2-3B-Instruct",
    max_seq_length=2048,
    load_in_4bit=True,
)

# حمّل المحول
model.load_adapter("./outputs/lora-adapter")

دمج وحفظ النموذج الكامل

ادمج المحولات في النموذج الأساسي للنشر المستقل:

from unsloth import FastLanguageModel

# الطريقة 1: احفظ نموذج 16-bit مدمج
model.save_pretrained_merged(
    "outputs/merged-model-16bit",
    tokenizer,
    save_method="merged_16bit",
)

# الطريقة 2: احفظ نموذج 4-bit مدمج (أصغر)
model.save_pretrained_merged(
    "outputs/merged-model-4bit",
    tokenizer,
    save_method="merged_4bit",
)

التصدير إلى GGUF لـ Ollama

GGUF هي الصيغة المستخدمة من Ollama و llama.cpp:

from unsloth import FastLanguageModel

# صدّر إلى GGUF بمستويات تكميم مختلفة
model.save_pretrained_gguf(
    "outputs/model-gguf",
    tokenizer,
    quantization_method="q4_k_m",  # تكميم 4-bit
)

خيارات التكميم

الطريقة الحجم الجودة حالة الاستخدام
q8_0 الأكبر الأفضل عندما الجودة مهمة
q6_k كبير جيدة جداً توازن
q5_k_m متوسط جيدة الاستخدام العام
q4_k_m صغير جيدة الخيار الافتراضي
q4_0 أصغر مقبولة ذاكرة محدودة
q2_k الأصغر أقل قيود شديدة
# جودة عالية
model.save_pretrained_gguf("outputs/q8", tokenizer, quantization_method="q8_0")

# متوازن (موصى)
model.save_pretrained_gguf("outputs/q4km", tokenizer, quantization_method="q4_k_m")

# صغير
model.save_pretrained_gguf("outputs/q4", tokenizer, quantization_method="q4_0")

الاستخدام مع Ollama

بعد التصدير إلى GGUF:

1. إنشاء Modelfile

# أنشئ Modelfile
cat > Modelfile << 'EOF'
FROM ./outputs/model-gguf/unsloth.Q4_K_M.gguf

TEMPLATE """<|begin_of_text|><|start_header_id|>system<|end_header_id|>

أنت مساعد مفيد.<|eot_id|><|start_header_id|>user<|end_header_id|>

{{ .Prompt }}<|eot_id|><|start_header_id|>assistant<|end_header_id|>

"""

PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER stop "<|eot_id|>"
EOF

2. إنشاء نموذج Ollama

ollama create my-finetuned-model -f Modelfile

3. تشغيل نموذجك

ollama run my-finetuned-model "مرحباً، كيف حالك؟"

الدفع إلى HuggingFace Hub

شارك نموذجك مع المجتمع:

# سجّل الدخول أولاً
from huggingface_hub import login
login(token="your_token")

# ادفع محول LoRA
model.push_to_hub("your-username/my-lora-adapter")
tokenizer.push_to_hub("your-username/my-lora-adapter")

# أو ادفع نموذج مدمج
model.push_to_hub_merged(
    "your-username/my-merged-model",
    tokenizer,
    save_method="merged_16bit",
)

# ادفع GGUF
model.push_to_hub_gguf(
    "your-username/my-model-gguf",
    tokenizer,
    quantization_method="q4_k_m",
)

سكريبت التصدير الكامل

from unsloth import FastLanguageModel
from huggingface_hub import login

# حمّل النموذج المدرّب
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="./outputs/unsloth-finetune/final",
    max_seq_length=2048,
    load_in_4bit=True,
)

# ============================================
# خيارات التصدير
# ============================================

# 1. احفظ محول LoRA فقط (الأصغر)
model.save_pretrained("exports/lora-only")
tokenizer.save_pretrained("exports/lora-only")
print("محول LoRA حُفظ!")

# 2. احفظ نموذج مدمج (للنشر على HuggingFace)
model.save_pretrained_merged(
    "exports/merged-16bit",
    tokenizer,
    save_method="merged_16bit",
)
print("النموذج المدمج حُفظ!")

# 3. احفظ GGUF (لـ Ollama)
model.save_pretrained_gguf(
    "exports/gguf",
    tokenizer,
    quantization_method="q4_k_m",
)
print("نموذج GGUF حُفظ!")

# 4. ادفع إلى HuggingFace (اختياري)
# login(token="your_token")
# model.push_to_hub_gguf("username/model-name", tokenizer, quantization_method="q4_k_m")

مقارنة حجم التصدير

لـ Llama 3.2 3B مضبوط:

نوع التصدير الحجم
محول LoRA فقط ~100 MB
مدمج fp16 ~6 GB
GGUF q8_0 ~3 GB
GGUF q4_k_m ~2 GB
GGUF q4_0 ~1.7 GB

أفضل الممارسات

  1. احفظ LoRA أولاً دائماً - صغير ويسمح بالتجريب
  2. استخدم q4_k_m لـ Ollama - أفضل توازن بين الحجم والجودة
  3. اختبر قبل الدفع - تحقق أن المخرجات تطابق التوقعات
  4. ضمّن قالب المحادثة - ضروري للنماذج المضبوطة على التعليمات

نصيحة: صدّر إلى GGUF بـ q4_k_m لنشر Ollama - هو النقطة المثلى بين الجودة والحجم لمعظم حالات الاستخدام.

في الوحدة التالية، سنتعلم كيفية تحسين نموذجنا أكثر مع محاذاة DPO. :::

اختبار

الوحدة 4: التدريب مع Unsloth

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.