الوحدة 6 — QLoRA والتكميم بأربعة بتّات
LoRA خفّض معاملات التدريب، لكن أوزان النموذج الأصلي ما زالت تشغل الذاكرة بحجمها الكامل: 14 غيغا لنموذج بسبعة مليارات في FP16. لكي يعمل الضبط على بطاقة استهلاكية بسعة 24 غيغا، لا بدّ من ضغط هذه الأوزان أيضًا. هذا ما يفعله QLoRA، اقتراح 2023 من ورقة Dettmers وآخرين.
المبدأ العام
QLoRA يجمع تقنيتين:
- تكميم أوزان النموذج الأصلي إلى 4 بتّات بدل 16. الوزن يحفظ بأربعة بتّات بدل ستّة عشر، أي تقليل الحجم بأربعة.
- تدريب محوّلات LoRA بدقّة عادية فوق هذا النموذج المُكمَّم. المحوّلات تبقى في BF16 لكنّها صغيرة جدًّا.
النموذج بسبعة مليارات يشغل الآن 3.5 غيغا فقط (بدل 14)، مما يجعل بطاقة واحدة بسعة 24 غيغا كافية للتدريب مع دفعة معقولة.
صيغة NF4 (NormalFloat 4-bit)
التكميم البسيط إلى 4 بتّات (16 قيمة ممكنة موزَّعة بانتظام) يفقد جودة كبيرة. QLoRA يستعمل صيغة أذكى: NF4، صيغة مصمَّمة خصّيصًا لأوزان الشبكات العصبية.
الحدس: أوزان الشبكات العصبية تتوزَّع تقريبًا كتوزيع طبيعي مركَّز حول الصفر. NF4 يوزّع نقاطه الستّة عشر بحيث تكون مكافئة الاحتمال ضمن هذا التوزيع: كثيفة قرب الصفر، متفرّقة عند الأطراف. النتيجة: خطأ التكميم أقلّ بكثير من التكميم الخطّي.
هذا يعني عمليًّا أنّ نموذج مُكمَّم بـNF4 يفقد أقلّ من نقطتين مئويّتين من الأداء مقارنة بالنموذج الأصلي، وفي كثير من الحالات أقلّ من نقطة واحدة.
التكميم المزدوج (Double Quantization)
تفصيل ثانٍ: كلّ كتلة من أوزان النموذج المُكمَّم تحتاج إلى ثابت تحجيم
(scale factor) خاصّ بها. هذه الثوابت نفسها تشغل ذاكرة. على نموذج بسبعة
مليارات، ثوابت التحجيم في FP32 تشغل نحو 800 ميغا بايت.
الحلّ: كمِّم الثوابت نفسها بـ8 بتّات. هذا يوفّر نحو 600 ميغا إضافية، بلا أثر يُذكر على الجودة. اسمه الرسمي «التكميم المزدوج».
مُستمثِل الصفحات (Paged Optimizer)
المشكلة الثالثة: حتّى مع LoRA، بعض العمليات (تحديث الحالات، الانتشار الخلفي في الطبقات الكبيرة) تُنتج قممًا مؤقّتة في استهلاك الذاكرة تُفجّر البطاقة. مُستمثِل الصفحات يحلّها بإدارة ذكية للذاكرة: تُنقَل الحالات المؤقّتة إلى RAM النظام عند الحاجة، وتُعاد إلى GPU عند الاستعمال.
هذه الآلية مبنية في bitsandbytes وتُفعَّل تلقائيًّا حين تختار
AdamW8bit أو PagedAdamW.