PEFT documentation

IA3

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

IA3

IA3, mümkün olan en küçük adaptör boyutuna ihtiyaç duyduğunuzda mükemmel bir seçimdir — düşük rütbeli matrisler yerine öğrenilmiş vektörler kullandığı için mevcut en parametre-verimli yöntemlerden biridir. Önceliğiniz minimum disk/bellek ayak izi ve hızlı eğitimse, IA3 güçlü bir adaydır.

IA3 introduces three vectors, lv, lk and lff to scale value, key and feed-forward activations (image source).

İç Aktivasyonları Engelleme ve Yükseltme ile Zenginleştirilmiş Adaptör, yani IA3, öz-dikkat ve kodlayıcı-çözücü dikkat katmanlarındaki anahtar ve değerleri yeniden ölçeklemek ve konum bazlı ileri beslemeli ağın ara aktivasyonunu yeniden ölçeklemek için üç öğrenilmiş vektör ekleyen bir yöntemdir.

Makalenin özeti şudur:

Az örnekli bağlam içi öğrenme (ICL), önceden eğitilmiş dil modellerinin, küçük bir eğitim örneği kümesini girdinin bir parçası olarak sağlayarak, herhangi bir gradyan tabanlı eğitim gerektirmeden daha önce görülmemiş bir görevi gerçekleştirmesini sağlar. ICL, bir tahmin yapıldığında tüm eğitim örneklerinin işlenmesini gerektirdiğinden önemli hesaplama, bellek ve depolama maliyetleri doğurur. Parametre verimli ince ayar (PEFT) (ör. adaptör modülleri, prompt ayarı, seyrek güncelleme yöntemleri vb.) yeni bir görevi gerçekleştirmek için küçük bir parametre kümesinin eğitildiği alternatif bir paradigma sunar. Bu makalede, az örnekli ICL ile PEFT'yi titizlikle karşılaştırıyor ve sonuncunun daha iyi doğruluk sağladığını ve hesaplama maliyetlerini dramatik ölçüde düşürdüğünü gösteriyoruz. Bu süreçte, aktivasyonları öğrenilen vektörlerle ölçekleyen ve nispeten küçük miktarda yeni parametre eklerken daha güçlü performans elde eden (IA)^3 adlı yeni bir PEFT yöntemi tanıtıyoruz. Ayrıca, görev özelinde ayar veya değişiklikler gerektirmeden yeni görevlere uygulanabilen, T0 modeline dayalı T-Few adlı basit bir tarif öneriyoruz. T-Few'un etkinliğini, RAFT benchmark'ına uygulayarak tamamen görülmemiş görevlerde doğruluyoruz; bu sayede ilk kez süper-insan performansına ulaşıyor ve mevcut en iyi performansı mutlak olarak %6 geride bırakıyoruz. Deneylerimizde kullanılan tüm kod herkese açıktır.

İnce ayarın (fine-tuning) daha verimli hale getirilmesi için IA3 (Infused Adapter by Inhibiting and Amplifying Inner Activations), iç aktivasyonları öğrenilmiş vektörlerle yeniden ölçekler. Bu öğrenilmiş vektörler, tipik bir transformer tabanlı mimaride dikkat (attention) ve ileri beslemeli (feedforward) modüllere enjekte edilir. Bu öğrenilmiş vektörler, ince ayar sırasında tek başına eğitilebilir parametrelerdir ve bu nedenle orijinal ağırlıklar donmuş (frozen) kalır. Öğrenilmiş vektörlerle (LoRA gibi bir ağırlık matrisine uygulanan öğrenilmiş düşük rütbeli güncellemelerin aksine) uğraşmak, eğitilebilir parametre sayısını çok daha düşük tutar.

LoRA'ya benzer şekilde, IA3 birçok aynı avantaja sahiptir:

  • IA3, eğitilebilir parametre sayısını büyük ölçüde azaltarak ince ayarı daha verimli hale getirir. (T0 için bir IA3 modeli yalnızca yaklaşık %0,01 eğitilebilir parametreye sahipken, LoRA bile > %0,1'e sahiptir)
  • Orijinal önceden eğitilmiş ağırlıklar dondurulur; bu, üzerine çeşitli aşağı akış görevleri için birden fazla hafif ve taşınabilir IA3 modeli inşa edebileceğiniz anlamına gelir.
  • IA3 kullanılarak ince ayar yapılan modellerin performansı, tamamen ince ayar yapılan modellerin performansıyla karşılaştırılabilir düzeydedir.
  • IA3, adaptör ağırlıkları taban modelle birleştirilebildiği için herhangi bir çıkarım gecikmesi eklemez.

İlke olarak, IA3, bir sinir ağında eğitilebilir parametre sayısını azaltmak için ağırlık matrislerinin herhangi bir alt kümesine uygulanabilir. Yazarların uygulamasını takip ederek, IA3 ağırlıkları bir Transformer modelinin anahtar (key), değer (value) ve ileri beslemeli (feedforward) katmanlarına eklenir. Daha spesifik olarak, transformer modellerinde IA3 ağırlıkları, her transformer bloğunda anahtar ve değer katmanlarının çıktılarına ve ikinci ileri beslemeli katmanın girdisine eklenir.

IA3 parametrelerinin enjekte edileceği hedef katmanlar verildiğinde, eğitilebilir parametre sayısı, ağırlık matrislerinin boyutuna göre belirlenebilir.

Kullanım

Otomatik regresif modeller için hedef k_proj, v_proj ve down_proj katmanlarıdır — yazarların en etkili olduğunu bulduğu katmanlar bunlardır. IA3'ün hangi modüllerin ileri besleme katmanları olduğunu bilmesi ve doğru ölçeklendirmeyi uygulaması için feedforward_modules=["down_proj"] ayarlayın.

Sıralı sınıflandırma görevi için bir Llama modeli için IA3 yapılandırması şu şekilde başlatılabilir:

from peft import IA3Config, TaskType, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-135M")
peft_config = IA3Config(
    task_type=TaskType.CAUSAL_LM,
    target_modules=["k_proj", "v_proj", "down_proj"],
    feedforward_modules=["down_proj"],
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()

IA3'ün LoRA'ya göre ne zaman kullanılacağı

IA3, depolama kısıtlı dağıtımlar için mümkün olan en küçük adaptörlere ihtiyaç duyduğunuzda veya daha az eğitilebilir parametreyle hızlı yakınsama istediğinizde özellikle etkilidir. LoRA, LoRA varyantlarının daha geniş ekosistemine (DoRA, QLoRA vb.) ihtiyaç duyduğunuzda veya kapsamlı topluluk desteğine sahip, en yaygın test edilmiş yaklaşımı tercih ettiğinizde daha uygun olabilir.

Karma performans değerlendirmesi genel bakış

API

IA3Config

sınıf peft.IA3Config

< >

( 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonefeedforward_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falsemodules_to_save: Optional[list[str]] = Noneinit_ia3_weights: bool = True )

Parametreler

  • 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.
  • feedforward_modules (Optional[Union[List[str], str]]) — Orijinal makalede olduğu gibi, feedforward modülü olarak ele alınacak modüllerin adları. Bu modüllerin girdisine, çıktı yerine (IA)³ vektörleri çarpılır. feedforward_modules, target_modules içinde bulunan bir ad veya ad alt kümesi olmalıdır.
  • 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.
  • modules_to_save (Optional[List[str]]) — Son kontrol noktasında (checkpoint) kaydedilecek ve eğitilebilir olarak ayarlanacak (IA)³ katmanları dışındaki modüllerin listesi.
  • init_ia3_weights (bool) — (IA)³ katmanlarındaki vektörlerin başlatılıp başlatılmayacağını belirtir, varsayılan değeri True'dir. Bu değeri False olarak ayarlamak önerilmez.

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

IA3Model

sınıf peft.IA3Model

< >

( 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 (IA3Config) — (IA)^3 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

(IA)^3 modeli.

Önceden eğitilmiş bir transformers modelinden, İç Aktivasyonları Engelleme ve Yükseltme (IA)^3) yöntemiyle bir Infused Adapter modeli oluşturur. Yöntem, https://huggingface.co/papers/2205.05638 adresinde ayrıntılı olarak açıklanmıştır.

Örnek:

>>> from transformers import AutoModelForSeq2SeqLM
>>> from peft import IA3Config, get_peft_model

>>> config = IA3Config(
...     peft_type="IA3",
...     task_type="SEQ_2_SEQ_LM",
...     target_modules=["k", "v", "w0"],
...     feedforward_modules=["w0"],
... )

>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
>>> ia3_model = get_peft_model(model, config)

Öznitelikler:

add_weighted_adapter

< >

( adapters: list[str]weights: list[float]adapter_name: str )

Parametreler

  • adapters (list) — List of adapter names to be merged.
  • weights (list) — Her adaptör için ağırlıkların listesi.
  • adapter_name (str) — Yeni adaptörün adı.

Bu yöntem, verilen adaptörleri verilen ağırlıklarla birleştirerek yeni bir adaptör ekler.

Update on GitHub