QLoRA
يضبط QLoRA نماذج اللغة الكبيرة ضبطًا دقيقًا عبر تدريب محوّلات LoRA على نموذج أساسي مجمّد مخزّن بتنسيق NF4 ذي 4 بتات، ما يتيح تشغيل نموذج بمعلمات عددها 65B على وحدة GPU واحدة بذاكرة 48 GB.
QLoRA (التكيّف منخفض الرتبة المُكمَّم) طريقة للضبط الدقيق تجمّد نموذج لغة كبيرًا (LLM) مُدرّبًا مسبقًا بدقة 4 بت، وتدرّب محوّلات LoRA صغيرة فوقه، مع تمرير الانتشار العكسي عبر الأوزان المُكمَّمة إلى المحوّلات. قدّمها Dettmers وزملاؤه في ورقة QLoRA لعام 2023، وخفّضت ذاكرة GPU اللازمة للضبط الدقيق لنموذج ذي 65 مليار معلمة من أكثر من 780 GB إلى أقل من 48 GB، بما يكفي لوحدة GPU واحدة في محطة عمل، مع الحفاظ على أداء المهمة نفسه الذي يحققه الضبط الدقيق بدقة 16 بت. وحققت نماذج Guanaco في الورقة، التي ضُبطت بهذه الطريقة، 99.3% من نتيجة ChatGPT على معيار Vicuna بعد 24 ساعة من التدريب على وحدة GPU واحدة.
آلية عمل QLoRA#
يجمع QLoRA بين نموذج أساسي مجمّد ومضغوط وثلاث تقنيات لتوفير الذاكرة:
- NormalFloat (NF4) بدقة 4 بت: يُخزَّن كل وزن بوصفه رمزًا من 4 بت يشير إلى مستوى واحد من 16 مستوى موزعة عند الكميات لتوزيع طبيعي، مع مقياس للقيمة المطلقة القصوى لكل كتلة من 64 وزنًا. تتبع أوزان النموذج المدرّب مسبقًا توزيعًا طبيعيًا تقريبًا؛ لذا توفّر مستويات الكميات دقة أكبر قرب الصفر، حيث تتركز معظم الأوزان.
- التكميم المزدوج: تُكمَّم المقاييس لكل كتلة بدورها إلى 8 بت في كتل من 256، ما يخفض الحمل الإضافي من 0.5 إلى نحو 0.127 بت لكل معلمة، ويوفر نحو 3 GB في نموذج ذي 65 مليار معلمة.
- المحسّنات المرحّلة: توجد حالات المحسّن في الذاكرة الموحدة من NVIDIA، وتُنقل إلى ذاكرة CPU عند ارتفاع استهلاك الذاكرة، مثلما يحدث مع التسلسلات الطويلة أثناء نقاط التحقق للتدرجات، كي لا يتعطل التدريب بسبب نفاد الذاكرة.
في التمرير الأمامي، تفك كل طبقة مجمّدة تكميم أوزان NF4 إلى bfloat16 مباشرةً قبل ضرب المصفوفات، ثم تضيف ناتج مسار LoRA. ويحسب الانتشار العكسي التدرجات عبر الأوزان بعد فك تكميمها، لكنه لا يحدّث إلا مصفوفتَي LoRA منخفضتي الرتبة. ووجدت الورقة ضرورة وضع محوّلات في كل طبقة خطية من كتلة Transformer لمضاهاة الضبط الدقيق الكامل:
ينشئ المقتطف أدناه مستويات NF4 بالطريقة التي تستخدمها مكتبة bitsandbytes، ويقارنها بـ16 مستوى متساوي التباعد على كتل من أوزان موزعة طبيعيًا:
import torch
torch.manual_seed(0)
normal = torch.distributions.Normal(0.0, 1.0)
# NF4: 16 levels at quantiles of a normal distribution, with an exact zero (as built in bitsandbytes)
positive = normal.icdf(torch.linspace(0.9677083, 0.5, 9)[:-1])
negative = -normal.icdf(torch.linspace(0.9677083, 0.5, 8)[:-1])
nf4 = torch.cat([negative, torch.zeros(1), positive]).sort().values
nf4 = nf4 / nf4.max()
int4 = torch.linspace(-1, 1, 16) # evenly spaced 4-bit levels for comparison
weights = torch.randn(4096, 64) * 0.02 # pretrained weights are roughly normal, in blocks of 64
absmax = weights.abs().amax(dim=1, keepdim=True) # one scale per block
for name, levels in (("NF4", nf4), ("INT4", int4)):
codes = ((weights / absmax)[..., None] - levels).abs().argmin(dim=-1) # 4-bit index per weight
restored = levels[codes] * absmax
print(f"{name} mean squared error: {(restored - weights).pow(2).mean():.3e}")يطبع المقتطف متوسط خطأ تربيعيًا قدره 3.395e-06 لـNF4 و4.053e-06 للمستويات متساوية التباعد: وباستخدام المستويات الـ16 نفسها ومقاييس الكتل نفسها، يخفض توزيع الكميات في NF4 خطأ إعادة البناء بنحو 16% للأوزان الموزعة طبيعيًا. عمليًا، تحمّل Hugging Face Transformers نموذجًا بصيغة NF4 عبر bitsandbytes مع BitsAndBytesConfig الذي يضبط load_in_4bit=True وbnb_4bit_quant_type="nf4" وbnb_4bit_use_double_quant=True وbnb_4bit_compute_dtype=torch.bfloat16، وتضيف مكتبة PEFT محوّلات LoRA.
QLoRA والأساليب ذات الصلة#
- LoRA: تدرّب النوع نفسه من المحوّلات على نموذج أساسي محفوظ بدقة 16 بت. وتستهلك الأوزان بدقة 16 بت وحدها في نموذج ذي 65 مليار معلمة نحو 130 GB، بينما يخزنها NF4 بنحو ربع هذا الحجم.
- الضبط الدقيق الكفء في المعلمات (PEFT): فئة من الأساليب التي تدرّب مجموعة صغيرة من المعلمات، وتشمل LoRA وQLoRA والمحوّلات وضبط المطالبات.
- تكميم النموذج بعد التدريب: يضغط نموذجًا مكتملًا للاستدلال. وغالبًا ما يُدمج نموذج ضُبط باستخدام QLoRA في أوزان بدقة 16 بت، ثم يُكمَّم مجددًا للتشغيل.
- التدريب الواعي بالتكميم (QAT): يحاكي التقريب بدقة منخفضة في التمرير الأمامي بينما تتدرب جميع الأوزان، كي يحافظ النموذج المنشور على دقته عند استخدام دقة منخفضة. يشغّل Ultralytics YOLO26 تدريب QAT بدقة INT8 عند تدريبه باستخدام
quantize=8، إذ يدرج تكميمًا زائفًا في طبقات الالتفاف والطبقات الخطية عبر NVIDIA ModelOpt، لضمان احتفاظ الأوزان المتعلَّمة بأدائها عند التصدير بدقة INT8.
المفاضلات#
يستبدل QLoRA السرعة بالذاكرة: إذ يؤدي فك تكميم كل وزن مجمّد في كل تمرير أمامي وعكسي إلى إبطاء خطوة التدريب مقارنةً بـLoRA بدقة 16 بت. وتكون المحوّلات صغيرة بما يكفي لتخزينها وتبديلها حسب المهمة، لكن دمجها في النموذج الأساسي يتطلب أولًا فك تكميمه إلى 16 بت. وبالنسبة إلى نموذج 65B، تشغل الأوزان ذات 4 بت ومقاييس التكميم المزدوج نحو 34 GB، ما يترك بقية ذاكرة GPU البالغة 48 GB للمحوّلات والتنشيطات وحالات المحسّن المرحّلة.










