PEFT documentation

LoKr

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

LoKr

Navigating Text-To-Image Customization: From LyCORIS Fine-Tuning to Model Evaluation

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

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

حظيت نماذج توليد الصور من النص باهتمام هائل لقدرتها على إنتاج صور عالية الدقة من أوامر نصية. ومن بين هذه النماذج، يبرز Stable Diffusion كنموذج مفتوح المصدر رائد في هذا المجال سريع النمو. ومع ذلك، فإن تعقيدات الضبط الدقيق لهذه النماذج تفرض تحديات متعددة، بدءًا من دمج منهجيات جديدة وصولًا إلى التقييم المنهجي. لمعالجة هذه القضايا، يقدم هذا الورقة LyCORIS Lora beYond Conventional methods, Other Rank adaptation Implementations for Stable diffusion، وهي مكتبة مفتوحة المصدر توفر مجموعة واسعة من منهجيات الضبط الدقيق لـ Stable Diffusion. علاوة على ذلك، نقدم إطارًا شاملًا للتقييم المنهجي لتقنيات الضبط الدقيق المتنوعة. يعتمد هذا الإطار على مجموعة متنوعة من المقاييس ويتعمق في جوانب متعددة من الضبط الدقيق، بما في ذلك ضبط المعلمات الفائقة والتقييم بأنواع مختلفة من الأوامر النصية عبر فئات مفاهيمية متنوعة. من خلال هذا النهج الشامل، يوفر عملنا رؤى أساسية حول التأثيرات الدقيقة لمعلمات الضبط الدقيق، مما يسد الفجوة بين أحدث الأبحاث والتطبيق العملي.

الاستخدام

from peft import LoKrConfig, get_peft_model

config = LoKrConfig(
    r=16,
    alpha=16,
    target_modules=["query", "value"],
    module_dropout=0.1,
    modules_to_save=["classifier"],
)
model = get_peft_model(model, config)
model.print_healthcheck()

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

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

LoKrConfig

فئة peft.LoKrConfig

< >

( 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 = Falserank_pattern: Optional[dict] = <factory>alpha_pattern: Optional[dict] = <factory>r: int = 8alpha: int = 8rank_dropout: float = 0.0module_dropout: float = 0.0use_effective_conv2d: bool = Falsedecompose_both: bool = Falsedecompose_factor: int = -1rank_dropout_scale: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: Union[bool, Literal['lycoris']] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )

المعاملات

  • r (int) — رتبة LoKr.
  • alpha (int) — معامل alpha الخاص بمقياس LoKr.
  • rank_dropout (float) — احتمالية الإسقاط (dropout) لبُعد الرتبة أثناء التدريب.
  • module_dropout (float) — احتمالية إسقاط (dropout) لتعطيل وحدات LoKr أثناء التدريب.
  • use_effective_conv2d (bool) — استخدام معامل التفكيك الفعّال لـ Conv2d (و Conv1d) عندما يكون ksize > 1 (“Proposition 3” من ورقة FedPara).
  • decompose_both (bool) — تنفيذ تحليل الرتبة لمصفوفة ضرب كرونكر اليسرى.
  • decompose_factor (int) — عامل تفكيك حاصل ضرب كرونكر.
  • rank_dropout_scale (‘bool) — ما إذا كان سيتم قياس إسقاط الرتبة أثناء التدريب، الافتراضي هو False.
  • target_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديده على أنه ‘all-linear’، فسيتم اختيار جميع وحدات linear/Conv1D، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.
  • init_weights (bool) — ما إذا كان سيتم تنفيذ تهيئة أوزان المُكيِّف. القيمة الافتراضية هي True. استخدم “lycoris” لتهيئة الأوزان بأسلوب مستودع LYCORIS. يُنصح بعدم تمرير False.
  • 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}.
  • alpha_pattern (dict) — خريطة من أسماء الطبقات أو تعبيرات نمطية منتظمة إلى قيم ألفا التي تختلف عن قيمة ألفا الافتراضية المحددة بواسطة alpha. على سبيل المثال، {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — قائمة بالوحدات، بخلاف طبقات المُكيِّف (adapter)، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.

فئة التهيئة الخاصة بـ LoKrModel.

LoKrModel

فئة peft.LoKrModel

< >

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

يعيد

torch.nn.Module

نموذج LoKr.

ينشئ نموذج حاصل الضرب الكرونر منخفض الرتبة من نموذج مُدرَّب مسبقًا. تم وصف الطريقة الأصلية جزئيًا في https://huggingface.co/papers/2108.06098 وفي https://huggingface.co/papers/2309.14859 تستعير التنفيذ الحالي بشكل كبير من https://github.com/KohakuBlueleaf/LyCORIS/blob/eb460098187f752a5d66406d3affade6f0a07ece/lycoris/modules/lokr.py

مثال:

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

>>> config_te = LoKrConfig(
...     r=8,
...     alpha=32,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     rank_dropout=0.0,
...     module_dropout=0.0,
...     init_weights=True,
... )
>>> config_unet = LoKrConfig(
...     r=8,
...     alpha=32,
...     target_modules=[
...         "proj_in",
...         "proj_out",
...         "to_k",
...         "to_q",
...         "to_v",
...         "to_out.0",
...         "ff.net.0.proj",
...         "ff.net.2",
...     ],
...     rank_dropout=0.0,
...     module_dropout=0.0,
...     init_weights=True,
...     use_effective_conv2d=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 (LoKrConfig): إعدادات نموذج LoKr.
Update on GitHub