PEFT documentation
Seyrek Yüksek Sıralı Adaptörler
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.Linearkatmanları 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
< 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 = 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ılan32) — 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 torandom) — 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 instantiatingconfig = ShiraConfig(...)and then settingconfig.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ılanNone) — 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 saklayanConv1Dkullanır ve bu nedenle bu değerTrueolarak ayarlanmalıdır. - init_weights (
bool, varsayılanTrue) — 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
< 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 (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:
- model (PreTrainedModel) — Uyarlanacak model.
- peft_config (ShiraConfig): SHiRA modelinin yapılandırması.