PEFT documentation

جسر الفجوة بين التكيف منخفض الرتبة والتكيف المتعامد عبر تكيف انعكاس هاوس هولدر (HRA)

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

جسر الفجوة بين التكيف منخفض الرتبة والتكيف المتعامد عبر تكيف انعكاس هاوس هولدر (HRA)

Bridging The Gap between Low-rank and Orthogonal Adaptation via Householder Reflection Adaptation

يوفر HRA منظورًا جديدًا يربط بين LoRA و OFT، مما يعني أنه يمكنه الاستفادة من مزايا كلتا الاستراتيجيتين، وذلك من خلال الاعتماد على Householder reflections لتقليل عدد المعاملات وتكاليف الحساب مع معاقبة فقدان المعرفة المكتسبة أثناء التدريب المسبق. يحقق باستمرار أداءً أفضل بعدد أقل من المعاملات القابلة للتدريب، ويتفوق على محولات الحالة الفنية عبر نماذج مختلفة، بما في ذلك النماذج اللغوية الكبيرة (LLMs) ومولّدات الصور الشرطية.

يبني HRA سلسلة من r انعكاسات Householder القابلة للتدريب (HRs). وبما أن مصفوفة انعكاس Householder هي مصفوفة متعامدة، وأن حاصل ضرب المصفوفات المتعامدة هو أيضاً مصفوفة متعامدة، فإن HRA يحقق الضمان النظري للضبط الدقيق المتعامد (OFT). وفي الوقت نفسه، يمكن النظر إلى HRA أيضاً على أنه مُكيّف (adapter) للضبط الدقيق منخفض الرتبة. كلما ارتفعت قيمة r, ، زادت عدد المعلمات القابلة للتدريب، مما يؤدي إلى سعة نموذج أكبر وأداء أفضل. بالإضافة إلى ذلك، بسبب البنية السلسلة، يؤثر تعامد مستويات HR على سعة HRA وانتظامها. لتحقيق توازن بين سعة النموذج وانتظامه، يُضاف مُنظِّم تعامد لمستويات HR إلى دالة الخسارة. يمكن للوزنλ\lambda أن يتحكم في قوة المُنظِّم.

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

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

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

HRAConfig

فئة peft.HRAConfig

< >

( 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 = 8apply_GS: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

المعاملات

  • r (int) — رتبة HRA عبر الطبقات المختلفة. من الأفضل تعيين ‘r’ إلى رقم زوجي؛ وإلا فإن طريقة التهيئة الافتراضية لن تعمل.
  • apply_GS (bool) — ما إذا كان سيتم تطبيق تقسيم غرام-شميدت المتعامد.
  • target_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديده على أنه ‘all-linear’، فسيتم اختيار جميع الوحدات الخطية، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.
  • init_weights (bool) — ما إذا كان سيتم تنفيذ تهيئة أوزان HRA.
  • layers_to_transform (Union[List[int], int]) — فهارس الطبقات المراد تحويلها. إذا تم تمرير قائمة من الأعداد الصحيحة، فسيتم تطبيق المُكيّف على فهارس الطبقات المحددة في هذه القائمة. أما إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق التحويلات على الطبقة الموجودة عند هذا الفهرس.
  • layers_pattern (Optional[Union[List[str], str]]) — اسم نمط الطبقة، يُستخدم فقط إذا كان layers_to_transform مختلفاً عن None. يجب أن يستهدف هذا nn.ModuleList الخاص بالنموذج، والذي يُسمى غالباً 'layers' أو 'h'.
  • bias (str) — نوع الانحياز لـ HRA. يمكن أن يكون 'none' أو 'all' أو 'hra_only'.
  • modules_to_save (List[str]) — قائمة بالوحدات، بخلاف طبقات المُكيِّف (adapter)، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.

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

HRAModel

فئة peft.HRAModel

< >

( 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) — النموذج الذي ستُربط به طبقات مُعدِّل المُكيّف (adapter tuner).
  • config (HRAConfig) — إعدادات نموذج HRA.
  • adapter_name (str) — اسم المُكيّف، القيمة الافتراضية هي "default".
  • low_cpu_mem_usage (bool, optional, defaults to False) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل.

يعيد

torch.nn.Module

نموذج HRA.

ينشئ نموذج تكيّف الانعكاس هاوزهولدر (HRA) من نموذج مُدرَّب مسبقًا. يتم وصف الطريقة في https://huggingface.co/papers/2405.17484

مثال:

>>> from diffusers import StableDiffusionPipeline
>>> from peft import HRAConfig, get_peft_model

>>> config_te = HRAConfig(
...     r=8,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     init_weights=True,
... )
>>> config_unet = HRAConfig(
...     r=8,
...     target_modules=[
...         "proj_in",
...         "proj_out",
...         "to_k",
...         "to_q",
...         "to_v",
...         "to_out.0",
...         "ff.net.0.proj",
...         "ff.net.2",
...     ],
...     init_weights=True,
... )

>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = get_peft_model(model.text_encoder, config_te)
>>> model.unet = get_peft_model(model.unet, config_unet)

الخصائص:

  • النموذج (~torch.nn.Module) — النموذج الذي سيتم تكييفه.
  • peft_config (HRAConfig): إعدادات نموذج HRA.
Update on GitHub