PEFT documentation

LoRA القطري الكتلوي لإزالة عبء الاتصال في تقديم LoRA المتوازي على مستوى الموتر

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LoRA القطري الكتلوي لإزالة عبء الاتصال في تقديم LoRA المتوازي على مستوى الموتر

يُعدّ Block-Diagonal LoRA (BD-LoRA) متغيّرًا من LoRA يتم فيه تقييد بعض عوامل LoRA لتكون قطرية على مستوى الكتل. وهذا يتيح تقديمًا أسرع من خلال إزالة تكاليف الاتصال عند تشغيل الاستدلال على وحدات معالجة رسومية متعددة. وعلى الرغم من قيد القطرية على مستوى الكتل، فإن أداء BD-LoRA مماثل لأداء LoRA العادي عند عدد معاملات مشابه.

صُمِّم BD-LoRA ليُستخدم مع توازي المصفوفات (tensor parallelism)، مما يعني تقسيم أوزان النموذج على عدة وحدات معالجة رسومية (GPU). استراتيجية التقسيم الشائعة هي استراتيجية تقسيم Megatron. بالنسبة لطبقتين خطيتين $W_1$، W2W_2 يتبعان إحداهما الأخرى (مثل الإسقاطات الصاعدة والهابطة في وحدة MLP داخل محوّل)، سنقوم بتقسيم الطبقة الأولى بطريقة توازية الأعمدة (والتي تتطلب أن يكون LoRA B قطريًا كتليًا) والطبقة الثانية بطريقة توازية الصفوف (والتي تتطلب أن يكون LoRA A قطريًا كتليًا). بالنسبة لوحدة الانتباه، يمكن تحقيق ذلك بشكل مشابه عن طريق أخذ إسقاطات Q وK وV معًا على أنها W1W_1 وإسقاط الإخراج على أنه $W_2$، مع التقسيم وفقًا لذلك. يتيح هذا التقسيم لمحرك استدلال متوافق توزيع كل شريحة قطرية كتلية على وحدة معالجة رسومية مختلفة، مما يقلل الحاجة إلى التواصل بين وحدات المعالجة الرسومية لتبادل النتائج الجزئية. في الصورة أدناه، يمكنك رؤية استراتيجية التقسيم الدقيقة وكيف يوفر هذا الجهد الحسابي.

الورقة: https://hf.co/papers/2510.23346

الأداء والترتيب وعدد المعلمات

يحقق BD-LoRA أداءً مماثلاً لأداء LoRA (انظر الصورة أدناه، أو مجلد method_comparison في جذر مستودع peft) عند نفس عدد المعاملات. ومع ذلك، بما أن كل عامل آخر في BD-LoRA هو قطري كتلي، فإن مُكيّف BD-LoRA سيحتوي على عدد أقل من المعاملات مقارنةً بمُكيّف LoRA عند نفس الرتبة. لا يكون أداء BD-LoRA تنافسياً إلا عند زيادة الرتبة وفقاً لذلك. نوفر رمزاً مثالياً لمطابقة الرتب في نهاية هذا الدفتر التعليمي.

واجهة برمجة التطبيقات

BdLoraConfig

فئة peft.BdLoraConfig

< >

( target_modules_bd_a: Optional[list[str]] = Nonetarget_modules_bd_b: Optional[list[str]] = Nonenblocks: int = 1match_strict: bool = True )

المعاملات

  • target_modules_bd_a — وحدات يكون فيها LoRA-A قطريًا على مستوى الكتل. يطابق كل نمط في القائمة مع اسم الوحدة عبر pattern is in target_name. مثال: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’]
  • target_modules_bd_b — وحدات يكون فيها LoRA-B قطريًا كتليًا. يطابق كل نمط في القائمة مع اسم الوحدة عبر pattern is in target_name. مثال: [‘out_proj’, ‘down_proj’]
  • nblocks — عدد الكتل في المصفوفات القطرية الكتلية
  • match_strict — إذا تم ضبطه على true، يتطلب أن يكون لكل target_module إما LoRA-A أو LoRA-B ذات بنية قطرية مفرّغة (block-diagonal)، وإلا فسيُطلق خطأ. يمكنك ضبطه على False لدمج تدريب LoRA مع BD-LoRA، على سبيل المثال إذا كانت بعض الطبقات في وحدةك لا تستفيد من BD-LoRA.

إعدادات BD-LoRA (LoRA القطري الحزمي). BD-LoRA هو متغير من LoRA يمكن استخدامه لتقديم LoRA متعدد بكفاءة في محركات الاستدلال. وينتج التسريع عن تقليل التواصل بين وحدات GPU من خلال تعيين بعض وحدات LoRA لتكون قطرية حزمياً.

لتحديد عوامل LoRA التي يجب ضبطها على أنها قطرية كتلية، اتبع الإرشادات التالية:

  • بالنسبة لآلية الانتباه، اضبط
    • إسقاطات Q وK وV لتكون بلوك قطريًا من نوع LoRA-B
    • إسقاط خارجي ليكون LoRA-A قطريًا بلوك
  • بالنسبة إلى شبكات MLP، اضبط
    • أعلى، إسقاط البوابة ليكون LoRA-B قطريًا بلوك
    • الإسقاط السفلي ليكون LoRA-A قطريًا بلوك

بالنسبة للوحدات الأخرى و/أو البنى المعمارية، راجع كود محرك الاستدلال المستهدف لديك. يجب أن تكون الوحدات المقسمة على مستوى الصفوف ذات LoRA-A قطريًا كتليًا، بينما يجب أن تكون الوحدات المقسمة على مستوى الأعمدة ذات LoRA-B قطريًا كتليًا.

Update on GitHub