PEFT documentation
MiSS
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_featuresboyutu boyunca daha küçük bir rank kullanır ve bu,mini_rile kontrol edilir. Bu, eğitilebilir parametreleri daha da azaltır. Bu mod kullanıldığındamini_rayarlanmalı veout_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
< 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 = 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=miniayarladığınızda,mini_rdeğerini belirlemeniz gerekir. Lütfenout_features'inmini_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 == 0koş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ızcalayers_to_transformNone'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
< 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 (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 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
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ı.