PEFT documentation

MiSS

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

MiSS

MiSS (Matrix Shard Sharing), model performansı ile hesaplama verimliliği arasında iyi bir denge sağlayan bir PEFT yöntemidir. Yalnızca tek bir eğitilebilir matris gerektirir ve LoRA'dan farklı bir shard paylaşım mekanizması sunar.

Makalenin özeti şudur:

Parametre Verimli İnce Ayar (PEFT) yöntemleri, özellikle Düşük Sıralı Uyarlanma (LoRA), Büyük Dil Modelleri'ndeki (LLM) eğitilebilir parametre sayısını etkili bir şekilde azaltır. Ancak, model ölçekleri büyümeye devam ettikçe hesaplama kaynaklarına olan talep önemli bir zorluk olmaya devam etmektedir. Mevcut LoRA varyantları, uyarlanabilirlik (model performansı ve yakınsama hızı) ile verimlilik (hesaplama yükü, bellek kullanımı ve başlatma süresi) arasında optimal bir denge kurmakta genellikle zorlanmaktadır. Bu makale, bu ödünleşimi basit bir parça paylaşım mekanizması yoluyla ele alan yeni bir PEFT yaklaşımı olan MiSS'i (Matrix Shard Sharing) tanıtmaktadır. MiSS, ağırlık matrisinin birden fazla parça matrisine ayrıştırılması ve paylaşılan, eğitilebilir ortak bir parçanın kullanılması yoluyla düşük sıralı bir uyarlanmanın gerçekleştirilebileceği içgörüsünden yararlanmaktadır. Bu yöntem, düşük sıralı güncelleme matrisini, bu paylaşılan, bölünmüş parçaların çoğaltılması yoluyla oluşturur. Ayrıca MiSS için donanım verimli ve geniş kapsamlı bir uygulama öneriyoruz. Çeşitli görevlerde gerçekleştirilen kapsamlı deneyler ve hesaplama performansının sistematik analizi, MiSS'in üstünlüğünü göstermektedir. Sonuçlar, MiSS'in hem model performans metriklerinde hem de başlatma hızı ve eğitim verimliliği dahil olmak üzere hesaplama verimliliğinde standart LoRA ve önde gelen varyantlarını önemli ölçüde geride bıraktığını göstermektedir. İfade gücü ile kaynak kullanımını etkili bir şekilde dengeleyerek MiSS, büyük ölçekli modellerin verimli bir şekilde uyarlanması için ikna edici bir çözüm sunmaktadır.

Karma performans değerlendirmesi genel bakış

MiSS'in ne zaman kullanılacağı

MiSS şu durumlarda iyi bir seçimdir:

  • PiSSA, LoRA-GA veya OLoRA gibi pahalı kurulumlar kullanan gelişmiş LoRA başlatma şemalarından daha hızlı başlatma ve daha yüksek eğitim verimliliği istiyorsunuz.
  • LoRA'nın yerini alacak, minimal yapılandırma değişikliği gerektiren bir alternatif arıyorsunuz.

Bazı verimlilikten ödün vererek daha güçlü bir ifade gücüne ihtiyacınız varsa, bat başlatma varyantını (aşağıda) göz önünde bulundurun.

init_weights modları

MiSS, init_weights parametresi aracılığıyla üç başlatma modunu destekler:

  • True (varsayılan): Standart MiSS başlatma. Çoğu kullanım senaryosu için en iyi başlangıç noktası.
  • "bat": Farklı shard'lar arasında doğrusal olmayan güncellemeleri etkinleştirir. Standart MiSS'e göre daha iyi sonuçlar üretir ancak daha fazla bellek kullanır ve yaklaşık iki kat daha yavaştır. Performansın verimliliğe öncelikli olduğu durumlarda bunu kullanın.
  • "mini": out_features boyutu boyunca daha küçük bir rank kullanır ve bu, mini_r ile kontrol edilir. Bu, eğitilebilir parametreleri daha da azaltır. Bu mod kullanıldığında mini_r ayarlanmalı ve out_features, mini_r'e tam bölünmelidir.

Hızlı başlangıç

import torch
from peft import MissConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer.pad_token_id = tokenizer.eos_token_id

# Standard MiSS
config = MissConfig(
    r=64,
    miss_dropout=0.01,
    task_type="CAUSAL_LM"
)

# BAT variant — better performance, more memory
# config = MissConfig(
#     r=64,
#     init_weights="bat",
#     task_type="CAUSAL_LM"
# )

# Mini variant — fewer trainable parameters
# config = MissConfig(
#     r=64,
#     init_weights="mini",
#     mini_r=8,
#     task_type="CAUSAL_LM"
# )

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

Eğitim ve çıkarımı içeren tam bir ince ayar örneği için MiSS ince ayar örneğine bakın.

API

MissConfig

sınıf peft.MissConfig

< >

( 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 = 64miss_dropout: float = 0.0mini_r: int = 1target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool | Literal['bat', 'mini'] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[str] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

Parametreler

  • r (int) — MiSS'in farklı katmanlar arasındaki rütbesi. 'r' değerinin çift sayı olarak ayarlanması en iyisidir; aksi takdirde varsayılan başlatma yöntemi çalışmaz. MiSS'in rütbesi, in_features boyutu boyunca düşük rütbeli bir ayrıştırmaya karşılık gelir.
  • miss_dropout (float) — MiSS katmanları için dropout olasılığı.
  • mini_r (int) — MiSS'in rütbesi, out_features boyutu boyunca düşük rütbeli bir ayrıştırmaya karşılık gelir. init_weights=mini ayarladığınızda, mini_r değerini belirlemeniz gerekir. Lütfen out_features'in mini_r'e tam bölündüğünden emin olun.
  • 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 sonlanıp sonlanmadığı kontrol edilir. Bu parametre ‘all-linear’ olarak belirtilirse, çıktı katmanı hariç tüm lineer modüller 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 | Literal[“bat”, “mini”]) — Farklı başlatma yöntemleri, farklı MiSS varyantlarına karşılık gelir. Varsayılan (balance) durumda, MiSS içindeki en verimli ve genel yöntem kullanılır. ‘bat’: Bu modda, farklı shard'lar arasında doğrusal olmayan güncellemeleri etkinleştirebilirsiniz. ‘mini’: Bu modda, daha az eğitilebilir parametre kullanmak için daha küçük bir rank ayarlayabilirsiniz, ancak out_features % mini_r == 0 koşulunun sağlanmasına dikkat etmeniz önerilir.
  • 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 (str) — Katman desen adı, yalnızca layers_to_transform None'den farklıysa kullanılır.
  • bias (str) — MiSS için sapma türü. 'none', 'all' veya 'MiSS_only' olabilir.
  • modules_to_save (List[str]) — Son kontrol noktasında kaydedilecek ve eğitilebilir olarak ayarlanacak, adaptör katmanları dışındaki modüllerin listesi.

Bu, bir MissModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.

MissModel

sınıf peft.MissModel

< >

( 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 (MissConfig) — MiSS 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

MiSS modeli.

Önceden eğitilmiş bir modelden Matrix Shard Sharing (MiSS) modeli oluşturur. Yöntem https://huggingface.co/papers/2409.15371 adresinde açıklanmıştır.

Örnek:

>>> from transformers import AutoModelForCausalLM
>>> from peft import MissConfig, get_peft_model

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = MissConfig(r=64)
>>> model = get_peft_model(base_model, config)

Öznitelikler:

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