Transformers documentation
ضبط نموذج
ضبط نموذج
لا يمكن تحديث الأوزان المُكمّمة مباشرةً بواسطة التدرّجات، لذا تُعدّل نموذجًا مُكمّمًا من خلال تدريب مُكيّف صغير فوق الأوزان المُكمّمة المُجمّدة. يُعرف تدريب مُكيّف LoRA على نموذج 4-بت باسم QLoRA، وهو يتيح لك تعديل نموذج لا يتّسع في الذاكرة بصيغة bf16.
يتحقق Trainer من النموذج قبل التدريب للتأكد من:
- تدعم طريقة التكميم التدريب. راجع عمود "Fine-tune" في اختيار طريقة.
- يوجد مُكيّف قابل للتدريب مرفق بالنموذج. تُعدّ الطرق التي تدعم التدريب الواعي بالتكميم استثناءً، وهي موضّحة فيما يلي.
- لم يتم تجميع النموذج باستخدام
torch.compile.
تدريب مُكيّف
قم بتثبيت PEFT.
pip install -U peft
حمّل النموذج بطريقة تدعم التدريب، وأضف مُكيّف LoRA باستخدام add_adapter()، ثم مرّر النموذج إلى Trainer. يستخدم المثال أدناه bitsandbytes بدقة 4 بت، ويفترض أن train_dataset هو مجموعة بيانات مُرمّزة.
import torch
from peft import LoraConfig
from transformers import AutoModelForCausalLM, BitsAndBytesConfig, Trainer, TrainingArguments
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
quantization_config=quantization_config,
device_map="auto",
)
lora_config = LoraConfig(r=16, lora_alpha=32, target_modules="all-linear", task_type="CAUSAL_LM")
model.add_adapter(lora_config)
trainer = Trainer(
model=model,
args=TrainingArguments(output_dir="qwen3-qlora", bf16=True),
train_dataset=train_dataset,
)
trainer.train()تُدرَّب أوزان المُكيِّف فقط. وتبقى أوزان النموذج الأساسي المُكمَّم مجمَّدة.
حفظ المُكيّف
يحفظ save_pretrained() أوزنة المُكيِّف فقط، وهي بضعة ميغابايتات. ويعمل هذا مع كل طريقة، بما في ذلك تلك التي لا تستطيع حفظ أوزنتها المُكمَّاة.
model.save_pretrained("qwen3-qlora-adapter")للاستخدام، حمّل النموذج الأساسي مع إعدادات التكميم (quantization) نفسها، ثم حمّل المُكيّف (adapter) فوقه. راجع تحميل المُكيّف للتفاصيل.
التدريب الواعي بالكمّ
يمكن لـ BitNet و compressed-tensors تدريب النموذج الكامل دون استخدام مُكيّف (adapter)، طالما بقيت الأوزان في شكل قابل للتدريب.
- يتطلب BitNet تضمين
linear_class="autobitlinear"وquantization_mode="online"في BitNetQuantConfig. - يتطلب compressed-tensors نقطة تفتيش غير مضغوطة، أو
dequantize=Trueفي CompressedTensorsConfig. لا يمكن تدريب نقاط التفتيش التي تستخدم نواة FP8.
راجع مفاهيم التكميم لمعرفة كيف يختلف التدريب الواعي بالتكميم عن التكميم بعد التدريب.
Update on GitHub