PEFT documentation

DeLoRA: التكيف منخفض الرتبة المنفصل

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

DeLoRA: التكيف منخفض الرتبة المنفصل

DeLoRA هي تقنية لضبط دقيق فعّال من حيث المعاملات، تحافظ ضمنياً على حدّ فروبينيوس بالنسبة للأوزان المُسبقة التدريب عن طريق تطبيع مصفوفات منخفضة الرتبة القابلة للتعلم وتغيير مقياسها. وهذا يفصل بفعالية بين تعلّم الاتجاهات (حدّ BA) وحجم (حدّ الحدّ) تحديثات الأوزان، مما يتجنّب التغيّرات الكارثية في الأوزان المُكيّفة ويعزز المتانة تجاه اختيارات المعاملات الفائقة.

ملاحظة:

  • استخدم معدل تعلّم أكبر بمقدار 10 إلى 100 مرة من المعدّل المستخدم في متغيرات LoRA القياسية (القيم النموذجية تبدأ من 1e-3/1e-2/..)
  • تأكد من أن معامل الحد الأولي lambda ليس صغيرًا جدًا (القيم النموذجية حوالي 10/15/..). من الممكن تعيين قيم lambda مختلفة للطبقات المختلفة

تخضع DeLoRA حاليًا للقيود التالية:

  • يتم دعم طبقات nn.Linear فقط.
  • لا يتم دعم الطبقات المُكمّاة.

إذا لم تكن هذه القيود مناسبة لحالتك، فكّر في استخدام طرق أخرى بدلاً منها.

ملخص الورقة البحثية هو:

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

نظرة عامة على الاختبارات

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

DeloraConfig

فئة peft.DeloraConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )

المعاملات

  • r (int) — رتبة مُكيّف DeLoRA.
  • delora_lambda (int) — القيمة الأولية للحدّ الخاص بمكيّف DeLoRA. تُعيّن هذه المتغيّرة حدًّا أقصى لطبيعية فروبينيوس لتغيّر الأوزان، مما يمنع النموذج المُعدَّل من الانحراف بشكل كبير عن النموذج الأصلي.
  • module_dropout (float) — احتمالية إسقاط (dropout) لإيقاف وحدات DeLoRA أثناء التدريب.
  • target_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديده على أنه ‘all-linear’، فسيتم اختيار جميع وحدات linear/Conv1D، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.
  • bias (str) — نوع الانحياز في DeLoRA. يمكن أن يكون ‘none’ أو ‘all’ أو ‘delora_only’. إذا كان ‘all’ أو ‘delora_only’، فسيتم تحديث الانحيازات المقابلة أثناء التدريب. انتبه إلى أن هذا يعني أن النموذج لن ينتج نفس المخرجات التي كان سينتجها النموذج الأساسي دون تكييف، حتى عند تعطيل المحولات.
  • init_weights (bool) — ما إذا كان سيتم تنفيذ تهيئة أوزان المُكيِّف (adapter). إذا كان True (الافتراضي): يتم تهيئة A باستخدام تهيئة kaiming المنتظمة، بينما يتم تهيئة B باستخدام الأصفار. إذا كان False: يتم تهيئة كل من A و B باستخدام kaiming المنتظمة، مما يساهم فورًا في فرق غير صفري. يُنصح عمومًا بعدم استخدام هذا الخيار للاستخدام العادي.
  • layers_to_transform (Union[List[int], int]) — فهارس الطبقات المراد تحويلها. إذا تم تمرير قائمة من الأعداد الصحيحة، فسيتم تطبيق المُكيّف على فهارس الطبقات المحددة في هذه القائمة. أما إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق التحويلات على الطبقة الموجودة عند هذا الفهرس.
  • layers_pattern (Optional[Union[List[str], str]]) — اسم نمط الطبقة، يُستخدم فقط إذا كان layers_to_transform مختلفاً عن None. يجب أن يستهدف هذا nn.ModuleList الخاص بالنموذج، والذي يُسمى غالباً 'layers' أو 'h'.
  • rank_pattern (dict) — خريطة من أسماء الطبقات أو تعبيرات نمطية إلى الترتيبات التي تختلف عن الترتيب الافتراضي المحدد بواسطة r. على سبيل المثال، {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • lambda_pattern (dict) — خريطة من أسماء الطبقات أو تعبيرات نمطية منتظمة إلى دوال lambda تختلف عن دالة lambda الافتراضية المحددة بواسطة delora_lambda. على سبيل المثال، {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — قائمة بالوحدات، بخلاف طبقات المُكيِّف (adapter)، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.

هذه هي فئة الإعدادات لتخزين إعدادات DeloraModel.

DeloraModel

فئة peft.DeloraModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module

المعاملات

  • model (torch.nn.Module) — النموذج الذي سيتم تكييفه.
  • config (DeloraConfig) — إعدادات نموذج DeLoRA.
  • adapter_name (str) — اسم المُكيّف، القيمة الافتراضية هي "default".

يعيد

torch.nn.Module

نموذج DeLoRA.

ينشئ نموذج DeLoRA من نموذج transformers مُدرَّب مسبقًا.

يُوصف هذا الأسلوب بالتفصيل في DeLoRA: Decoupled Low-rank Adaptation.

الخصائص:

  • model (PreTrainedModel) — النموذج الذي سيتم تكييفه.
  • peft_config (DeloraConfig): إعدادات نموذج DeLoRA.
Update on GitHub