PEFT documentation

FRoD: ضبط دقيق فعّال بترتيب كامل مع درجات دوران

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

FRoD: ضبط دقيق فعّال بترتيب كامل مع درجات دوران

FRoD هو أسلوب لضبط دقيق فعّال من حيث المعاملات يجمع بين أساس كامل الرتبة مشترك ودرجات دوران قابلة للتعلم متناثرة. يُعبَّر عن تحديث المُكيّف (adapter) من خلال مُشغِّلات إسقاط ثابتة ومعاملات قابلة للتدريب، مما يتيح لـ FRoD تطبيق تحديثات كاملة الرتبة مع الحفاظ على عدد المعاملات المدربة صغيراً.

الورقة: Full-Rank Efficient Fine-Tuning with Rotational Degrees.

عند حفظ معاملات المُكيّف، يمكن تجنّب تخزين متجهات الإسقاط عن طريق تعيين save_projection=False على FrodConfig. في هذه الحالة، تُستعاد الإسقاطات من أوزان النموذج الأساسي وبذرة العشوائية الثابتة من projection_prng_key. يقلّل هذا من حجم نقطة الحفظ، لكن القيمة الافتراضية هي save_projection=True لجعل تحميل نقطة الحفظ مستقلاً عن تفاصيل إعادة التوليد.

مقارنةً بـ LoRA، يمكن لـ FRoD التعبير عن تحديث كامل الرتبة في كل طبقة خطية مُكيَّفة أثناء تدريب معاملات القطر فقط ومجموعة متناثرة من معاملات الدوران خارج القطر. وقد يكون ذلك مفيدًا عندما يكون تحديث الرتبة المنخفضة مقيدًا للغاية. والمقابل هو أن FRoD يحسب متجهات إسقاط ثابتة من الأوزان الأساسية أثناء حقن المُكيِّف، مما يجعل الإعداد أكثر تكلفة والتنفيذ أقل دعمًا على نطاق واسع مقارنةً بـ LoRA.

قد تكون تهيئة الإسقاط بطيئة في النماذج الكبيرة لأن FRoD يقوم بتشغيل تفكيكات المصفوفات على فئات الوحدات المستهدفة قبل حقن الملاءمات. يتم عرض شريط تقدم بشكل افتراضي ويمكن تعطيله باستخدام FrodConfig(progressbar=False).

لتدريب مقيد بالذاكرة، يحافظ runtime_offload_base_weight=True على أوزان الأساس المستهدفة على وحدة المعالجة المركزية (CPU) عندما لا تكون المسار النشط لـ FRoD بحاجة إليها. هذا الخيار اختياري لأن طرق PEFT عادةً ما تحتفظ بجميع معاملات الأساس على المعالج التسريعي (accelerator) بعد نقل النموذج وبعد عمليات المرور الأمامي.

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

  • يتم دعم طبقات nn.Linear وtransformers.pytorch_utils.Conv1D فقط.

البدء السريع

from transformers import AutoModelForSequenceClassification

from peft import FrodConfig, TaskType, get_peft_model

model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)

peft_config = FrodConfig(
    task_type=TaskType.SEQ_CLS,
    target_modules=["query", "value"],
    modules_to_save=["classifier"],
    sparse_rate=0.02,
    frod_dropout=0.0,
    runtime_offload_base_weight=True,
)

model = get_peft_model(model, peft_config)
model.print_healthcheck()

FrodConfig

فئة peft.FrodConfig

< >

( 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]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )

المعاملات

  • target_modules (Union[List[str], str]) — أسماء الوحدات التي سيتم تطبيق FRoD عليها. يتم دعم الطبقات الخطية فقط.
  • projection_prng_key (int) — البذرة العشوائية المستخدمة عند تهيئة نمط FRoD المتناثر بصيغة COO.
  • save_projection (bool) — ما إذا كان سيتم حفظ متجهات الإسقاط الخاصة بـ FRoD في قاموس الحالة. يؤدي هذا إلى زيادة حجم نقطة الحفظ (checkpoint) لكنه يجعل إعادة تحميل المكيّف (adapter) مستقلة عن إعادة توليد الكاش المحلي. القيمة الافتراضية هي True.
  • frod_dropout (float) — احتمالية الإسقاط لطبقات FRoD.
  • fan_in_fan_out (bool) — اضبط هذا على True إذا كانت الطبقة التي سيتم استبدالها تخزن الأوزان على شكل (fan_in, fan_out). على سبيل المثال، يستخدم gpt-2 Conv1D الذي يخزن الأوزان على شكل (fan_in, fan_out) وبالتالي يجب ضبط هذا على True.
  • bias (str) — نوع الانحياز لـ FRoD. يمكن أن يكون ‘none’ أو ‘all’ أو ‘frod_only’. إذا كان ‘all’ أو ‘frod_only’، فسيتم تحديث الانحيازات المقابلة أثناء التدريب. انتبه إلى أن هذا يعني أنه حتى عند تعطيل المحولات، لن ينتج النموذج نفس المخرجات التي كان سينتجها النموذج الأساسي دون تكييف.
  • modules_to_save (List[str]) — قائمة بالوحدات، بخلاف طبقات FRoD، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.
  • init_weights (bool) — ما إذا كان سيتم تهيئة أوزان طبقات FRoD باستخدام التهيئة الافتراضية. لا تغيّر هذا الإعداد إلا إذا كنت تعرف بالضبط ما تفعله.
  • layers_to_transform (Union[List[int],int]) — فهارس الطبقات المراد تحويلها، إذا تم تحديد هذا الحُجج، فسيُطبَّق تحويلات FRoD على فهارس الطبقات المحددة في هذه القائمة. إذا تم تمرير عدد صحيح واحد، فسيُطبَّق تحويلات FRoD على الطبقة الموجودة عند هذا الفهرس.
  • layers_pattern (Optional[Union[List[str], str]]) — اسم نمط الطبقة، يُستخدم فقط إذا كان layers_to_transform مختلفاً عن None. يجب أن يستهدف هذا nn.ModuleList الخاص بالنموذج، والذي يُسمى غالباً 'layers' أو 'h'.
  • sparse_rate (float) — النسبة المئوية للعناصر غير القطرية في مصفوفة الدوران القابلة للتدريب المتناثرة. تزيد القيم الأعلى من السعة وعدد المعاملات القابلة للتدريب، بينما تكون القيم الأقل أقل تكلفة. القيمة الافتراضية هي 0.01.
  • regularization_alpha (float) — قيمة موجبة صغيرة تُستخدم أثناء بناء الأساس المشترك من الأوزان الأساسية. فهي تُثبّت معكوس المصفوفة عندما تكون الأوزان في الطبقات ضمن نفس الفئة مترابطة. القيمة الافتراضية هي 1e-3.
  • progressbar (bool) — ما إذا كان يجب عرض شريط تقدّم أثناء بناء إسقاطات FRoD. قد يكون تهيئة الإسقاط بطيئة على النماذج الكبيرة لأنها تُجري تفكيكات مصفوفية عبر فئات الوحدات المستهدفة. القيمة الافتراضية هي True.
  • runtime_offload_base_weight (bool) — ما إذا كان يجب إبقاء أوزان الأساس المستهدفة على وحدة المعالجة المركزية (CPU) عندما لا تكون المسار النشط لـ FRoD بحاجة إليها. يمكن أن يقلل هذا من ذاكرة وحدة معالجة الرسوميات (GPU) لأن FRoD يعيد بناء الوزن المُكيَّف مباشرةً، لكنه يغيّر اتفاقية PEFT المعتادة التي تنص على بقاء جميع معاملات الأساس على المُسرِّع بعد نقل النموذج أو تشغيل الأمامي. القيمة الافتراضية هي False.

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

الورقة: https://doi.org/10.1609/aaai.v40i31.39813.

FrodModel

فئة peft.FrodModel

< >

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

Update on GitHub