التدريب مع 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 |
أفضل الممارسات
- احفظ LoRA أولاً دائماً - صغير ويسمح بالتجريب
- استخدم q4_k_m لـ Ollama - أفضل توازن بين الحجم والجودة
- اختبر قبل الدفع - تحقق أن المخرجات تطابق التوقعات
- ضمّن قالب المحادثة - ضروري للنماذج المضبوطة على التعليمات
نصيحة: صدّر إلى GGUF بـ q4_k_m لنشر Ollama - هو النقطة المثلى بين الجودة والحجم لمعظم حالات الاستخدام.
في الوحدة التالية، سنتعلم كيفية تحسين نموذجنا أكثر مع محاذاة DPO. :::