الدرس 14 من 24

التدريب مع Unsloth

إعداد Unsloth

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

إعداد Unsloth بسيط. لنجهّز بيئتك للضبط الدقيق السريع.

التثبيت

التثبيت القياسي

pip install unsloth

مع إصدار CUDA محدد

# لـ CUDA 12.1
pip install unsloth[cu121]

# لـ CUDA 11.8
pip install unsloth[cu118]

تثبيت Colab

# شغّل هذه الخلية أولاً في Google Colab
!pip install unsloth

التثبيت الكامل مع التبعيات

pip install unsloth transformers datasets trl peft accelerate bitsandbytes

التحقق من التثبيت

# تحقق من تثبيت Unsloth
import unsloth
print(f"إصدار Unsloth: {unsloth.__version__}")

# تحقق أن FastLanguageModel متاح
from unsloth import FastLanguageModel
print("FastLanguageModel استُورد بنجاح!")

# تحقق من GPU
import torch
print(f"CUDA متاح: {torch.cuda.is_available()}")
print(f"GPU: {torch.cuda.get_device_name(0)}")

تحميل النماذج مع Unsloth

FastLanguageModel

الفئة الأساسية لتحميل النماذج:

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,
    dtype=None,  # اكتشاف تلقائي (bfloat16 على GPUs الحديثة)
)

النماذج المحسّنة مسبقاً المتاحة

Unsloth يوفر نماذج محسّنة مسبقاً على HuggingFace:

# نماذج Llama
"unsloth/Llama-3.2-1B-Instruct"
"unsloth/Llama-3.2-3B-Instruct"
"unsloth/Llama-3.3-70B-Instruct"

# نماذج Mistral
"unsloth/Mistral-7B-Instruct-v0.3"
"unsloth/Mixtral-8x7B-Instruct-v0.1"

# نماذج Phi
"unsloth/Phi-4"

# نماذج Qwen
"unsloth/Qwen2.5-7B-Instruct"
"unsloth/Qwen2.5-72B-Instruct"

# نماذج Gemma
"unsloth/gemma-2-9b-it"

استخدام نماذج HuggingFace القياسية

يمكنك أيضاً استخدام معرّفات نماذج HuggingFace العادية:

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="meta-llama/Llama-3.2-3B-Instruct",  # معرّف HF قياسي
    max_seq_length=2048,
    load_in_4bit=True,
)

إضافة LoRA مع Unsloth

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,
)

# أضف محولات LoRA
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    lora_alpha=16,
    lora_dropout=0,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ],
    bias="none",
    use_gradient_checkpointing="unsloth",  # checkpointing محسّن من Unsloth
    random_state=42,
)

خيارات التكوين الرئيسية

max_seq_length

أقصى طول تسلسل للتدريب:

# تسلسلات قصيرة (محادثة، مهام بسيطة)
max_seq_length = 1024

# تسلسلات متوسطة (معظم حالات الاستخدام)
max_seq_length = 2048

# تسلسلات طويلة (مستندات، كود)
max_seq_length = 4096

load_in_4bit

فعّل تكميم 4-bit:

# QLoRA (موصى لمعظم الحالات)
load_in_4bit = True

# دقة كاملة (إذا كان لديك VRAM كافي)
load_in_4bit = False

use_gradient_checkpointing

gradient checkpointing المحسّن من Unsloth:

# محسّن من Unsloth (موصى)
use_gradient_checkpointing = "unsloth"

# PyTorch قياسي
use_gradient_checkpointing = True

# معطّل (VRAM أكثر، أسرع)
use_gradient_checkpointing = False

مقارنة الذاكرة

تحميل Llama 3.2 8B:

الطريقة استخدام VRAM
fp16 قياسي 16GB
4-bit قياسي 6GB
Unsloth 4-bit 4GB
Unsloth 4-bit + checkpointing 3GB

مثال الإعداد الكامل

from unsloth import FastLanguageModel
import torch

# التكوين
model_name = "unsloth/Llama-3.2-3B-Instruct"
max_seq_length = 2048
load_in_4bit = True

# حمّل النموذج والمُرمّز
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_name,
    max_seq_length=max_seq_length,
    load_in_4bit=load_in_4bit,
    dtype=None,
)

# أضف LoRA
model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    lora_alpha=16,
    lora_dropout=0,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ],
    bias="none",
    use_gradient_checkpointing="unsloth",
    random_state=42,
)

# تحقق من النموذج
print(f"النموذج حُمّل على: {model.device}")
print(f"المعاملات القابلة للتدريب: {model.print_trainable_parameters()}")

# إعداد المُرمّز
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"

استكشاف الأخطاء

أخطاء الاستيراد

# إذا فشل استيراد unsloth، جرّب:
!pip install --upgrade unsloth

أخطاء CUDA

# تحقق من توافق CUDA
import torch
print(torch.cuda.get_arch_list())

# تأكد من إصدار CUDA الصحيح
!nvcc --version

أخطاء الذاكرة

# قلل طول التسلسل
max_seq_length = 1024

# فعّل checkpointing قوي
use_gradient_checkpointing = "unsloth"

نصيحة: استخدم دائماً النماذج ذات البادئة unsloth/ من HuggingFace عندما يكون ذلك ممكناً - هي محسّنة مسبقاً لأفضل أداء.

بعد ذلك، لندرّب نموذجاً باستخدام Unsloth مع SFTTrainer. :::

اختبار

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

خذ الاختبار