PEFT documentation

Seyrek Yüksek Sıralı Adaptörler

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

Seyrek Yüksek Sıralı Adaptörler

Seyrek Yüksek Sıra Adaptörleri veya SHiRA, alternatif bir adaptör türüdür ve düşük sıra adaptörlere kıyasla önemli avantajlara sahip olduğu görülmüştür. Özellikle SHiRA, çeşitli görme ve dil görevlerinde LoRA'dan daha iyi doğruluk elde eder. Ayrıca, düşük sıra adaptörlerin karşılaştığı yaygın bir sorun olan kavram kaybını önemli ölçüde azaltarak daha basit ve daha yüksek kaliteli çoklu adaptör füzyonu sunar. SHiRA, modeli herhangi bir uyarlama görevinde ince ayarlamak için temel modelin küçük bir parametre kümesini doğrudan ince ayarlar.

SHiRA şu anda aşağıdaki kısıtlamaya sahiptir:

  • Yalnızca nn.Linear katmanları desteklenir.

Makalenin özeti şudur:

Low Rank Adaptation (LoRA), son dönemdeki üretken yapay zeka araştırmalarında büyük ilgi görmüştür. LoRA'nın başlıca avantajlarından biri, çıkarım sırasında ek bir maliyet oluşturmaksızın önceden eğitilmiş modellerle birleştirilebilmesidir. Ancak mobil dağıtım açısından bakıldığında, birleştirilmiş modda çıkarım maliyetinden kaçınmak için hızlı adaptör değiştirme yeteneğinden vazgeçmek ya da birleştirilmemiş modda hızlı değiştirme imkânı sunarken önemli ölçüde (en fazla %30 daha yüksek) çıkarım gecikmesine katlanmak gerekir. LoRA, birden fazla adaptörün eş zamanlı kullanıldığı durumlarda kavram kaybı (concept-loss) sergiler. Bu makalede, çıkarım maliyeti oluşturmayan, hızlı değiştirme imkânı sunan ve kavram kaybını önemli ölçüde azaltan yeni bir paradigma olan Sparse High Rank Adapters (SHiRA)'yi öneriyoruz. Özellikle SHiRA, diğer ağırlıkları değiştirmeden temel model ağırlıklarının yalnızca %1-2'sini doğrudan ayarlayarak eğitilebilir. Bu, birleştirilmiş modda doğrudan değiştirilebilen son derece seyrek (sparse) bir adaptörle sonuçlanır. SHiRA'daki yüksek seyrekliğin (sparsity), kavram kaybını azaltarak çoklu adaptör birleştirmesine nasıl yardımcı olabileceğine dair teorik ve ampirik içgörüler de sunuyoruz. LVM ve LLM'ler üzerinde gerçekleştirdiğimiz kapsamlı deneyler, temel modeldeki parametrelerin yalnızca küçük bir kısmının ince ayarlanmasının, hem hızlı değiştirme hem de çoklu adaptör birleştirmeyi mümkün kılarken LoRA'yı önemli ölçüde geride bıraktığını göstermektedir. Son olarak, neredeyse LoRA ile aynı hızda eğitim yaparken tepe GPU bellek tüketimini en fazla %16 daha düşük tutan, gecikme ve bellek açısından verimli bir SHiRA uygulaması sunuyoruz; bu uygulama Parameter-Efficient Finetuning (PEFT) Library üzerine kuruludur ve SHiRA'nın pratik kullanım senaryolarında benimsenmesini kolaylaştırır. Çıkarım sırasında hızlı değiştirme avantajlarını göstermek için, SHiRA'nın bir temel modele yüklenmesinin, CPU üzerinde LoRA birleştirmesine kıyasla 5x-16x daha hızlı olabileceğini gösteriyoruz.

Karma performans değerlendirmesi genel bakış

API

ShiraConfig

sınıf peft.ShiraConfig

< >

( 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 = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )

Parametreler

  • r (int, isteğe bağlı, varsayılan 32) — Belirli bir hedef modül için, SHiRA parametre sayısı, orijinal tensör boyutları m x n olmak üzere r(m+n) olarak hesaplanır. Bu, SHiRA parametre sayısının bir LoRA adaptörü için olan sayıyla aynı olduğu anlamına gelir. SHiRA yüksek rütbeli bir adaptördür. Bu r parametresini ayarlamak, rütbeyi bu değere sınırlamaz.
  • mask_type (str, defaults to random) — Type of mask function. Defaults to a random sparse mask. An optional user-defined mask_fn to compute the mask value can also be supplied by instantiating config = ShiraConfig(...) and then setting config.mask_fn = <your custom mask function>. For a pretrained weight with shape m x n, the custom mask function must return only one mask (shape: m x n) which must be binary 0 or 1 with num_shira_parameters = r(m + n) for linear layers. Device and dtype of mask must be same as base layer’s weight’s device and dtype. Please see mask_functions.py for more details and to see the default random sparse mask implementation.
  • random_seed (int, isteğe bağlı, varsayılan None) — random_mask için torch üreticisinin rastgele tohumu.
  • target_modules (Union[List[str], str]) — SHiRA ile değiştirilecek modül adlarının listesi veya modül adlarının regex ifadesi. Örneğin, [‘q’, ‘v’] veya ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Yalnızca lineer katmanlar desteklenir.
  • fan_in_fan_out (bool) — Değiştirilecek katman ağırlıkları (fan_in, fan_out) biçiminde saklıyorsa bunu True olarak ayarlayın. Örneğin, gpt-2 ağırlıkları (fan_in, fan_out) biçiminde saklayan Conv1D kullanır ve bu nedenle bu değer True olarak ayarlanmalıdır.
  • init_weights (bool, varsayılan True) — SHiRA ağırlıklarını sıfır değerlere sahip olacak şekilde başlatır. False olarak ayarlanırsa, SHiRA ağırlıkları sıfırlar yerine randn değerleriyle başlatılır ve bu yalnızca test için kullanılır.
  • modules_to_save (List[str]) — SHiRA katmanları dışında, eğitilebilir olarak ayarlanacak ve nihai checkpoint'te kaydedilecek modüllerin listesi.

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

ShiraModel

sınıf peft.ShiraModel

< >

( 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 (PreTrainedModel) — Uyarlanacak model.
  • config (ShiraConfig) — SHiRA modelinin yapılandırması.
  • adapter_name (str) — Adaptörün adı, varsayılan olarak "default"'tır.

Dönüş değeri

torch.nn.Module

SHiRA modeli.

Önceden eğitilmiş bir modelden Sparse High Rank Adapter (SHiRA) Modeli oluşturur.

Örnek:

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

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

Öznitelikler:

Update on GitHub