PEFT documentation
IA3
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.

İç 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_projvedown_projkatmanları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çinfeedforward_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
< 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 = 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_modulesiç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 saklayanConv1Dkullanır ve bu nedenle bu değerTrueolarak 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ğeriTrue'dir. Bu değeriFalseolarak 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
< 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 (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 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
(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:
- model (PreTrainedModel) — Uyarlanacak model.
- peft_config (IA3Config): (IA)^3 modelinin yapılandırması.
add_weighted_adapter
< source >( adapters: list[str]weights: list[float]adapter_name: str )
Bu yöntem, verilen adaptörleri verilen ağırlıklarla birleştirerek yeni bir adaptör ekler.