PEFT documentation

ضبط LayerNorm

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

ضبط LayerNorm

ضبط طبقة LayerNorm (LN Tuning) هو أسلوب PEFT يقوم فقط بضبط معاملات طبقات LayerNorm في النموذج. اختبرت الورقة أداء هذا الأسلوب على نماذج اللغة الكبيرة وأثبتت أنه يمكنه تحقيق أداء قوي مع تقليل كبير في عدد المعاملات القابلة للتدريب واستهلاك ذاكرة GPU. ومع ذلك، لا يقتصر الأسلوب على نماذج اللغة ويمكن تطبيقه على أي نموذج يستخدم طبقات LayerNorm. في هذا التنفيذ، الافتراضي هو ضبط جميع طبقات layernorm داخل النموذج، لكن يمكن استخدامه لاستهداف أنواع طبقات أخرى مثل طبقات MLP أو Attention، ويمكن القيام بذلك عن طريق تحديد target_modules في LNTuningConfig.

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

تُقدّم هذه الورقة استراتيجية فعّالة لتحويل نماذج اللغة الكبيرة (LLMs) إلى نماذج لغة كبيرة متعددة الوسائط (MLLMs). من خلال اعتبار هذا التحويل عملية تكيّف مع المجال، أي الانتقال من فهم النص إلى استيعاب وسائط متعددة، نلاحظ بشكل مثير للاهتمام أنه، داخل كل كتلة انتباه، يكفي ضبط LayerNorm لتحقيق أداء قوي. علاوة على ذلك، عند مقارنته بأساليب الضبط الأخرى مثل ضبط المعاملات الكاملة أو LoRA، فإن فوائده من حيث الكفاءة كبيرة. على سبيل المثال، عند مقارنته بـ LoRA على نطاق نموذج 13B، يمكن تحسين الأداء بمتوسط يتجاوز 20% عبر خمس مهام متعددة الوسائط، وفي الوقت نفسه، يؤدي إلى تقليل كبير في عدد المعاملات القابلة للضبط بنسبة 41.9% وانخفاض في استخدام ذاكرة GPU بنسبة 17.6%. إلى جانب استراتيجية LayerNorm هذه، نُظهر أن الضبط الانتقائي باستخدام بيانات المحادثة فقط يمكن أن يحسّن الكفاءة بشكل أكبر. إلى جانب هذه النتائج التجريبية، نوفر تحليلاً شاملاً لاستكشاف دور LayerNorm في تكييف LLMs مع المجال متعدد الوسائط وتحسين القدرة التعبيرية للنموذج.

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

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

LNTuningConfig

فئة peft.LNTuningConfig

< >

( 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[Union[list[str], str]] = None )

المعاملات

  • target_modules (Optional[Union[List[str], str]]) — قائمة بأسماء الوحدات أو تعبير نمطي (regex) لأسماء الوحدات التي سيتم استبدالها بـ LNTuning. على سبيل المثال، ‘.decoder.’ أو ‘.encoder.’. إذا لم يتم تحديد هذا، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة.
  • modules_to_save (Optional[Union[List[str], str]]) — قائمة بالوحدات التي سيتم تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية. على سبيل المثال، في مهام تصنيف التسلسل أو تصنيف الرموز، يتم تهيئة الطبقة النهائية classifier/score بشكل عشوائي، وبالتالي فهي بحاجة إلى أن تكون قابلة للتدريب والحفظ.

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

LNTuningModel

فئة peft.LNTuningModel

< >

( 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 (LNTuningConfig) — إعدادات نموذج ضبط LN.
  • adapter_name (str) — اسم المُكيّف، القيمة الافتراضية هي "default".
  • low_cpu_mem_usage (bool, optional, defaults to False) — لا يؤثر هذا الخيار على ضبط LN، لكنه موجود من أجل الاتساق مع طرق PEFT الأخرى.

يعيد

‘torch.nn.Module’

النموذج المُكيَّف مع تفعيل ضبط LayerNorm.

ينشئ ضبط LayerNorm من نموذج محوّل (transformer) مُدرَّب مسبقًا.

يُوصف هذا الأسلوب بالتفصيل في https://huggingface.co/papers/2312.11420.

مثال:

>>> from transformers import AutoModelForCausalLM
>>> from peft import get_peft_model, TaskType, LNTuningConfig

>>> peft_config = LNTuningConfig(
...     task_type=TaskType.CAUSAL_LM,
... )

>>> model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
>>> model = get_peft_model(model, peft_config)
>>> model.print_trainable_parameters()

الخصائص:

Update on GitHub