PEFT documentation
LoKr
LoKr

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
< source >( 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ğeriTrue'dir. Ağırlıkları LYCORIS deposu tarzında başlatmak için “lycoris” kullanın.Falsegeç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ızcalayers_to_transformNone'den farklıysa kullanılır. Bu, genellikle'layers'veya'h'olarak adlandırılan modelinnn.ModuleList'ini hedeflemelidir. - rank_pattern (
dict) —rile 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) —alphaile 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
< source >( 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 toFalse) — 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ı.