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

Düşük Sıralı Kronecker Çarpımı (LoKr), büyük ağırlık matrisini iki düşük sıralı matrisle yaklaşık olarak ifade eden ve bunları Kronecker çarpımı ile birleştiren bir LoRA türevi yöntemdir. LoKr, ince ayar sırasında daha iyi kontrol sağlamak için isteğe bağlı üçüncü bir düşük sıralı matris de sunar. Ağırlık güncelleme matrisini bir Kronecker çarpımı ayrışması olarak ifade ederek bir blok matris oluşturan LoKr, orijinal ağırlık matrisinin sırasını koruyabilir. Daha küçük matrislerin boyutu, sırası veya r ile belirlenir. Kronecker çarpımının bir diğer avantajı da matris sütunlarının yığılmasıyla vektörleştirilebilmesidir. Bu, ∆W'nin tamamen yeniden oluşturulmaması sayesinde süreci hızlandırabilir.

Makalenin özeti şudur:

Metinden görüntüye üretken modeller, metin istemlerinden yüksek sadakatli görüntüler üretme yetenekleri sayesinde büyük ilgi görmüştür. Bunlar arasında Stable Diffusion, bu hızla büyüyen alanda önde gelen açık kaynaklı model olarak öne çıkmaktadır. Ancak bu modellerin ince ayarının karmaşıklıkları, yeni metodoloji entegrasyonundan sistematik değerlendirmeye kadar çeşitli zorluklar ortaya koymaktadır. Bu sorunlara çözüm getirmek amacıyla bu makale, Stable Diffusion için geniş bir ince ayar metodolojisi seçeneği sunan açık kaynaklı bir kütüphane olan LyCORIS Lora beYond Conventional methods, Other Rank adaptation Implementations for Stable diffusion'i tanıtmaktadır. Ayrıca, çeşitli ince ayar tekniklerinin sistematik değerlendirmesi için kapsamlı bir çerçeve sunuyoruz. Bu çerçeve, çeşitli bir metrik seti kullanmakta ve ince ayarın birden fazla boyutuna, hiperparametre ayarlamaları dahil olmak üzere, farklı kavram kategorilerinde farklı istem türleriyle değerlendirme gibi konulara derinlemesine inmektedir. Bu kapsamlı yaklaşım aracılığıyla, çalışmamız ince ayar parametrelerinin nüanslı etkilerine ilişkin temel içgörüler sağlayarak, son teknoloji araştırmalar ile pratik uygulama arasındaki boşluğu kapatmaktadır.

Kullanım

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()

Karma performans değerlendirmesi genel bakış

API

LoKrConfig

sınıf 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 )

Parametreler

  • r (int) — LoKr rütbesi.
  • alpha (int) — LoKr ölçeklendirme için alpha parametresi.
  • rank_dropout (float) — Eğitim sırasında rank boyutu için dropout olasılığı.
  • module_dropout (float) — Eğitim sırasında LoKr modüllerini devre dışı bırakmak için kullanılan dropout olasılığı.
  • use_effective_conv2d (bool) — ksize > 1 olan Conv2d (ve Conv1d) için effective decomposition parametresini kullanır (FedPara makalesindeki “Proposition 3”).
  • decompose_both (bool) — Sol kronecker çarpım matrisinin rank ayrıştırmasını gerçekleştirir.
  • decompose_factor (int) — Kronecker çarpımı ayrıştırma faktörü.
  • rank_dropout_scale (‘bool) — Eğitim sırasında rank dropout'un ölçeklendirilip ölçeklendirilmeyeceğini belirtir, varsayılan değeri False'dir.
  • target_modules (Optional[Union[List[str], str]]) — Uyarlamanın (adapter) uygulanacağı modüllerin adları. Bu parametre belirtilirse, yalnızca belirtilen adlara sahip modüller değiştirilir. Bir dize (string) geçirildiğinde, bir regex eşleşmesi yapılır. Dize listesi geçirildiğinde, tam bir eşleşme yapılır veya modül adının, geçirilen dizelerden herhangi biriyle sona erip ermediği kontrol edilir. Bu parametre ‘all-linear’ olarak belirtilirse, çıktı katmanı hariç tüm linear/Conv1D modülleri seçilir. Bu parametre belirtilmezse, modüller model mimarisine göre seçilir. Mimari bilinmiyorsa bir hata oluşturulur — bu durumda, hedef modülleri manuel olarak belirtmelisiniz.
  • exclude_modules (Optional[Union[List[str], str]]) — Uyarlamanın (adapter) uygulanmaması istenen modüllerin adları. Bir dize geçirildiğinde, bir regex eşleşmesi yapılır. Bir dize listesi geçirildiğinde, tam bir eşleşme yapılır veya modül adının, geçirilen dizelerden herhangi biriyle sonlanıp sonlanmadığı kontrol edilir.
  • init_weights (bool) — Adapter ağırlıklarının başlatılmasının yapılıp yapılmayacağını belirtir. Varsayılan değeri True'dir. Ağırlıkları LYCORIS deposu tarzında başlatmak için “lycoris” kullanın. False geçilmesi önerilmez.
  • layers_to_transform (Union[List[int], int]) — Dönüştürülecek katman indeksleri. Bir int listesi geçirilirse, adaptör bu listede belirtilen katman indekslerine uygulanır. Tek bir tamsayı geçirilirse, dönüşümler bu indeksteki katmana uygulanır.
  • layers_pattern (Optional[Union[List[str], str]]) — Katman desen adı, yalnızca layers_to_transform None'den farklıysa kullanılır. Bu, genellikle 'layers' veya 'h' olarak adlandırılan modelin nn.ModuleList'ini hedeflemelidir.
  • rank_pattern (dict) — r ile belirtilen varsayılan rank'ten farklı rank'lara sahip katman adlarının veya regexp ifadelerinin eşlemesi. Örneğin, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • alpha_pattern (dict) — alpha ile belirtilen varsayılan alfa'dan farklı olan alfaların, katman adlarına veya regexp ifadesine eşlenmesi. Örneğin, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — Adapter katmanları dışında, eğitilebilir olarak ayarlanacak ve nihai checkpoint'te kaydedilecek modüllerin listesi.

LoKrModel yapılandırma sınıfı.

LoKrModel

sınıf 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

Parametreler

  • model (torch.nn.Module) — Adaptör ayarlayıcı katmanlarının bağlanacağı model.
  • config (LoKrConfig) — LoKr modelinin yapılandırması.
  • adapter_name (str) — Adaptörün adı, varsayılan olarak "default"'tır.
  • low_cpu_mem_usage (bool, optional, defaults to False) — Meta cihazda boş adaptör ağırlıkları oluşturur. Yükleme sürecini hızlandırmak için faydalıdır.

Dönüş değeri

torch.nn.Module

LoKr modeli.

Önceden eğitilmiş bir modelden Düşük Sıralı Kronecker Çarpımı modeli oluşturur. Orijinal yöntem kısmen https://huggingface.co/papers/2108.06098 ve https://huggingface.co/papers/2309.14859 adreslerinde açıklanmıştır. Mevcut uygulama büyük ölçüde https://github.com/KohakuBlueleaf/LyCORIS/blob/eb460098187f752a5d66406d3affade6f0a07ece/lycoris/modules/lokr.py adresinden ödünç alınmıştır.

Örnek:

>>> 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)

Öznitelikler:

  • model (~torch.nn.Module) — Uyarlanacak model.
  • peft_config (LoKrConfig): LoKr modelinin yapılandırması.
Update on GitHub