نحن نهدف إلى تقديم نظرة عامة واضحة عن إيجابيات وسلبيات كل نظام تكميم مدعوم في المحولات لمساعدتك في تحديد النظام الذي يجب أن تختاره.
حاليًا، تُستخدم نماذج القياس لغرضين رئيسيين:
- تشغيل الاستدلال لنموذج كبير على جهاز أصغر
- ضبط المحولات على رأس النماذج الكمية
حتى الآن، تم بذل مجهودين للتكامل، ولا يزالان كذلك محليا المدعومة في المحولات: bitsandbytes و auto-gptq. لاحظ أن بعض مخططات التكميم الإضافية مدعومة أيضًا في المكتبة المثالية، ولكن هذا خارج نطاق منشور المدونة هذا.
لمعرفة المزيد حول كل من المخططات المدعومة، يرجى إلقاء نظرة على أحد الموارد المشتركة أدناه. يرجى أيضًا إلقاء نظرة على الأقسام المناسبة من الوثائق.
لاحظ أيضًا أن التفاصيل المشتركة أدناه صالحة فقط لـ PyTorch هذا خارج نطاق نماذج Tensorflow وFlax/JAX حاليًا.
جدول المحتويات
موارد
مقارنة وحدات البت ساندبايت وgptq التلقائي
في هذا القسم، سنتناول إيجابيات وسلبيات تكميم البتات ساندبايت وgptq. لاحظ أن هذه الميزات تعتمد على التعليقات الواردة من المجتمع ويمكن أن تتطور بمرور الوقت حيث أن بعض هذه الميزات موجودة في خريطة الطريق الخاصة بالمكتبات المعنية.
ما هي فوائد البت ساند بايت؟
سهل: لا تزال وحدات البت ساندبايت هي الطريقة الأسهل لقياس أي نموذج لأنها لا تتطلب معايرة النموذج الكمي ببيانات الإدخال (وتسمى أيضًا التكميم الصفري). من الممكن تكميم أي نموذج خارج الصندوق طالما أنه يحتوي عليه torch.nn.Linear وحدات. كلما تم إضافة بنية جديدة في المحولات، طالما أنه يمكن تحميلها مع التسارع device_map=”auto”، يمكن للمستخدمين الاستفادة من تكميم البتات والبايتات مباشرة خارج الصندوق مع الحد الأدنى من تدهور الأداء. يتم إجراء التكميم عند تحميل النموذج، دون الحاجة إلى تشغيل أي خطوة ما بعد المعالجة أو الإعداد.
قابلية التشغيل البيني عبر الطريقة: بما أن الشرط الوحيد لتكميم النموذج هو أن يحتوي على أ torch.nn.Linear الطبقة، يعمل التكميم خارج الصندوق لأي طريقة، مما يجعل من الممكن تحميل نماذج مثل Whisper، وViT، وBlip2، وما إلى ذلك في 8 بت أو 4 بت خارج الصندوق.
0 تدهور الأداء عند دمج المحولات: (اقرأ المزيد عن المحولات وPEFT في منشور المدونة هذا إذا لم تكن على دراية بها). إذا قمت بتدريب محولات أعلى النموذج الأساسي المكمّم، فيمكن دمج المحولات أعلى النموذج الأساسي للنشر، دون أي انخفاض في أداء الاستدلال. يمكنك أيضًا دمج المحولات الموجودة أعلى النموذج المجزأ! وهذا غير مدعوم لـ GPTQ.
ما هي فوائد autoGPTQ؟
سريع لتوليد النص: نماذج GPTQ الكمية سريعة مقارنة بالنماذج الكمية للبت ساندبايت لإنشاء النص. سنتناول مقارنة السرعة في القسم المناسب.
دعم ن بت: خوارزمية GPTQ تجعل من الممكن تكميم النماذج حتى 2 بت! ومع ذلك، قد يأتي هذا مع تدهور شديد في الجودة. العدد الموصى به من البتات هو 4، والذي يبدو أنه يمثل مقايضة رائعة لـ GPTQ في هذا الوقت.
يمكن تسلسلها بسهولة: تدعم نماذج GPTQ التسلسل لأي عدد من البتات. تحميل النماذج من مساحة الاسم TheBloke: https://huggingface.co/TheBloke (ابحث عن النماذج التي تنتهي بـ -GPTQ suffix) مدعومة خارج الصندوق، طالما تم تثبيت الحزم المطلوبة. تدعم Bitsandbytes تسلسل 8 بت ولكنها لا تدعم تسلسل 4 بت اعتبارًا من اليوم.
دعم AMD: يجب أن يعمل التكامل خارج الصندوق بالنسبة لوحدات معالجة الرسومات AMD!
ما هي الغرف المحتملة لتحسينات bitsandbytes؟
أبطأ من GPTQ لإنشاء النص: نماذج bitsandbytes 4 بت بطيئة مقارنة بـ GPTQ عند الاستخدام generate.
الأوزان ذات 4 بتات غير قابلة للتسلسل: حاليًا، لا يمكن إجراء تسلسل لنماذج 4 بت. يعد هذا طلبًا متكررًا من المجتمع، ونعتقد أنه يجب معالجته قريبًا جدًا بواسطة مشرفي bitsandbytes لأنه موجود في خريطة الطريق الخاصة بهم!
ما هي الغرف المحتملة لتحسينات autoGPTQ؟
مجموعة بيانات المعايرة: قد تؤدي الحاجة إلى مجموعة بيانات المعايرة إلى تثبيط بعض المستخدمين عن استخدام GPTQ. علاوة على ذلك، قد يستغرق الأمر عدة ساعات لتحديد حجم النموذج (على سبيل المثال، 4 ساعات من وحدة معالجة الرسومات لنموذج بمقياس 175B وفقًا للورقة البحثية – القسم 2)
يعمل فقط مع نماذج اللغة (في الوقت الحالي): اعتبارًا من اليوم، تم تصميم واجهة برمجة التطبيقات (API) لتحديد حجم النموذج باستخدام GPTQ التلقائي لدعم نماذج اللغة فقط. ينبغي أن يكون من الممكن قياس النماذج غير النصية (أو متعددة الوسائط) باستخدام خوارزمية GPTQ، ولكن لم يتم تفصيل العملية في الورقة الأصلية أو في مستودع gptq التلقائي. إذا كان المجتمع متحمسًا لهذا الموضوع، فقد يتم النظر في ذلك في المستقبل.
الغوص في معايير السرعة
لقد قررنا توفير معيار شامل لكل من محولات الاستدلال والضبط الدقيق باستخدام وحدات البت ساندبايت وgptq التلقائي على أجهزة مختلفة. يجب أن يمنح معيار الاستدلال المستخدمين فكرة عن اختلاف السرعة الذي قد يحصلون عليه بين الأساليب المختلفة التي نقترحها للاستدلال، وينبغي أن يعطي معيار الضبط الدقيق للمهايئ فكرة واضحة للمستخدمين عندما يتعلق الأمر بتحديد النهج الذي سيتم استخدامه عند ضبط المحولات على أعلى وحدات البت ساندبايت ونماذج GPTQ الأساسية.
سوف نستخدم الإعداد التالي:
- bitsandbytes: تكميم 4 بت مع
bnb_4bit_compute_dtype=torch.float16. تأكد من الاستخدامbitsandbytes>=0.41.1لنواة سريعة 4 بت. - auto-gptq: تكميم 4 بت باستخدام حبات exllama. سوف تحتاج
auto-gptq>=0.4.0لاستخدام حبات اللاما السابقة.
سرعة الاستدلال (التمرير إلى الأمام فقط)
يقيس هذا المعيار خطوة التعبئة المسبقة فقط، والتي تتوافق مع التمريرة الأمامية أثناء التدريب. تم تشغيله على وحدة معالجة الرسومات NVIDIA A100-SXM4-80GB واحدة بطول سريع يبلغ 512. النموذج الذي استخدمناه هو meta-llama/Llama-2-13b-hf.
مع حجم الدفعة = 1:
| التكميم | act_order | أجزاء | حجم المجموعة | نواة | وقت التحميل (ق) | زمن الاستجابة لكل رمز مميز (ملي ثانية) | الإنتاجية (توك/ثانية) | ذاكرة الذروة (ميجابايت) |
|---|---|---|---|---|---|---|---|---|
| fp16 | لا أحد | لا أحد | لا أحد | لا أحد | 26.0 | 36.958 | 27.058 | 29152.98 |
| gptq | خطأ شنيع | 4 | 128 | تعجب | 36.2 | 33.711 | 29.663 | 10484.34 |
| bitsandbytes | لا أحد | 4 | لا أحد | لا أحد | 37.64 | 52.00 | 19.23 | 11018.36 |
بحجم الدفعة = 16:
| التكميم | act_order | أجزاء | حجم المجموعة | نواة | وقت التحميل (ق) | زمن الاستجابة لكل رمز مميز (ملي ثانية) | الإنتاجية (توك/ثانية) | ذاكرة الذروة (ميجابايت) |
|---|---|---|---|---|---|---|---|---|
| fp16 | لا أحد | لا أحد | لا أحد | لا أحد | 26.0 | 69.94 | 228.76 | 53986.51 |
| gptq | خطأ شنيع | 4 | 128 | تعجب | 36.2 | 95.41 | 167.68 | 34777.04 |
| bitsandbytes | لا أحد | 4 | لا أحد | لا أحد | 37.64 | 113.98 | 140.38 | 35532.37 |
من خلال المعيار، يمكننا أن نرى أن bitsandbyes وGPTQ متساويان، مع كون GPTQ أسرع قليلاً بالنسبة لحجم الدفعة الكبيرة. تحقق من هذا الرابط للحصول على مزيد من التفاصيل حول هذه المعايير.
توليد السرعة
تقيس المعايير التالية سرعة إنشاء النموذج أثناء الاستدلال. يمكن العثور على البرنامج النصي المرجعي هنا من أجل إمكانية تكرار نتائج.
use_cache
دعونا اختبار use_cache لفهم تأثير التخزين المؤقت للحالة المخفية بشكل أفضل أثناء عملية الإنشاء.
تم تشغيل المعيار على A100 بطول فوري قدره 30 وقمنا بإنشاء 30 رمزًا بالضبط. النموذج الذي استخدمناه كان meta-llama/Llama-2-7b-hf.
مع use_cache=True
مع use_cache=False

من المعيارين، نستنتج أن الإنشاء يكون أسرع عندما نستخدم التخزين المؤقت للانتباه، كما هو متوقع. علاوة على ذلك، فإن GPTQ بشكل عام أسرع من البتات ساندبايت. على سبيل المثال، مع batch_size=4 و use_cache=True، فهو أسرع مرتين! لذلك دعونا نستخدم use_cache للمعايير المقبلة. لاحظ أن use_cache سوف تستهلك المزيد من الذاكرة.
الأجهزة
في المعيار التالي، سنجرب أجهزة مختلفة لمعرفة التأثير على النموذج الكمي. استخدمنا طولًا سريعًا قدره 30 وقمنا بإنشاء 30 رمزًا بالضبط. النموذج الذي استخدمناه كان meta-llama/Llama-2-7b-hf.
مع نفيديا A100:

مع نفيديا T4:

مع تيتان RTX:

من المعيار أعلاه، يمكننا أن نستنتج أن GPTQ أسرع من وحدات البت والبايت بالنسبة لوحدات معالجة الرسوميات الثلاثة هذه.
طول الجيل
في المعيار التالي، سنجرب أطوال أجيال مختلفة لمعرفة تأثيرها على النموذج الكمي. تم تشغيله على A100 واستخدمنا طولًا فوريًا قدره 30 وقمنا بتغيير عدد الرموز المميزة التي تم إنشاؤها. النموذج الذي استخدمناه كان meta-llama/Llama-2-7b-hf.
مع 30 رمزًا تم إنشاؤها:

مع 512 رمزًا تم إنشاؤها:

من المعيار أعلاه، يمكننا أن نستنتج أن GPTQ أسرع من البتات والبايتات بشكل مستقل عن طول الجيل.
ضبط المحول (للأمام + للخلف)
ليس من الممكن إجراء تدريب خالص على نموذج كمي. ومع ذلك، يمكنك ضبط النماذج الكمية من خلال الاستفادة من أساليب الضبط الدقيق الفعالة للمعلمات (PEFT) وتدريب المحولات فوقها. ستعتمد طريقة الضبط الدقيق على طريقة حديثة تسمى “محولات الرتبة المنخفضة” (LoRA): بدلاً من الضبط الدقيق للنموذج بأكمله، عليك فقط ضبط هذه المحولات وتحميلها بشكل صحيح داخل النموذج. دعونا نقارن سرعة الضبط الدقيق!
تم تشغيل الاختبار على وحدة معالجة الرسوميات NVIDIA A100 واستخدمناه meta-llama/Llama-2-7b-hf نموذج من المحور. لاحظ أنه بالنسبة لنموذج GPTQ، كان علينا تعطيل نواة exllama لأن exllama غير مدعوم للضبط الدقيق.

من النتيجة، نستنتج أن وحدات البت ساند بايت أسرع من GPTQ في الضبط الدقيق.
تدهور الأداء
يعتبر التكميم أمرًا رائعًا لتقليل استهلاك الذاكرة. ومع ذلك، فإنه يأتي مع تدهور الأداء. دعونا نقارن الأداء باستخدام لوحة المتصدرين Open-LLM!
مع نموذج 7 ب:
| model_id | متوسط | قوس | هيلاسواج | MMLU | صادقQA |
|---|---|---|---|---|---|
| ميتا اللاما/اللاما-2-7b-hf | 54.32 | 53.07 | 78.59 | 46.87 | 38.76 |
| ميتا اللاما/اللاما-2-7b-hf-bnb-4bit | 53.4 | 53.07 | 77.74 | 43.8 | 38.98 |
| TheBloke/Llama-2-7B-GPTQ | 53.23 | 52.05 | 77.59 | 43.99 | 39.32 |
مع نموذج 13 ب:
| model_id | متوسط | قوس | هيلاسواج | MMLU | صادقQA |
|---|---|---|---|---|---|
| ميتا اللاما/اللاما-2-13b-hf | 58.66 | 59.39 | 82.13 | 55.74 | 37.38 |
| TheBloke/Llama-2-13B-GPTQ (المراجعة = ‘gptq-4bit-128g-actorder_True’) | 58.03 | 59.13 | 81.48 | 54.45 | 37.07 |
| TheBloke/Llama-2-13B-GPTQ | 57.56 | 57.25 | 81.66 | 54.81 | 36.56 |
| ميتا اللاما/اللاما-2-13b-hf-bnb-4bit | 56.9 | 58.11 | 80.97 | 54.34 | 34.17 |
من النتائج أعلاه نستنتج أن هناك تدهور أقل في النماذج الأكبر. والأمر الأكثر إثارة للاهتمام هو أن التدهور في حده الأدنى!
الخاتمة والكلمات النهائية
في هذه المدونة، قمنا بمقارنة وحدات البت ساندبايت وتكميم GPTQ عبر إعدادات متعددة. لقد رأينا أن وحدات البت ساندبايت أكثر ملاءمة للضبط بينما GPTQ أفضل للإنشاء. من هذه الملاحظة، إحدى الطرق للحصول على نماذج مدمجة أفضل هي:
- (1) قياس النموذج الأساسي باستخدام وحدات البت والبايت (تكميم الطلقة الصفرية)
- (2) إضافة وضبط المحولات
- (3) دمج المحولات المدربة أعلى النموذج الأساسي أو النموذج المجزأ!
- (4) قياس النموذج المدمج باستخدام GPTQ واستخدامه للنشر
نأمل أن تسهل هذه النظرة العامة على الجميع استخدام LLMs في تطبيقاتهم وحالات الاستخدام الخاصة بهم، ونحن نتطلع إلى رؤية ما ستبنيه بها!
شكر وتقدير
نود أن نشكر إلياس وكليمنتين وفيليكس لمساعدتهم في قياس الأداء.
أخيرًا، نود أن نشكر بيدرو كوينكا لمساعدته في كتابة هذه التدوينة.