PEFT documentation

C3A: Dairesel Konvolüsyon ile Parametre Verimli İnce Ayar

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

C3A: Dairesel Konvolüsyon ile Parametre Verimli İnce Ayar

C3A, makul kaynak sınırları içinde yüksek rütba uyarlama (high rank adaptation) elde etmek için Dairesel Konvolüsyon'u (Circular Convolution) kullanan parametre-verimli bir ince ayar (fine-tuning) tekniğidir.

C3A için diğer yöntemlere kıyasla çok daha yüksek bir öğrenme oranı (LR) kullanmanız gerektiğini unutmayın. Örneğin, C3A için 1e-1 LR iyi bir başlangıç noktasıdır. Ayrıca, çok daha küçük bir ağırlık çürümesi (weight decay) kullanılmalıdır. Daha fazla ayrıntı için method_comparison klasörüne başvurabilirsiniz.

için block_size, ayarlanabilir parametreleri ve performansı etkiler. Başlangıç olarak, şu değere yakın bir gcd(d1,d2)\mathrm{gcd}(d_1,d_2) değeri seçebilirsiniz; burada rr bu görev için LoRA'da kullanacağınız rütbedir.

C3A şu anda aşağıdaki kısıtlamalara sahiptir:

  • Yalnızca nn.Linear katmanları desteklenir.
  • Kantize katmanlar desteklenmez.
  • Blok boyutu, hedef katmanların hem girdi hem de çıktı boyutlarının ortak bir böleni olmalıdır.

Bu kısıtlamalar kullanım senaryonuza uygun değilse, bunun yerine başka yöntemleri düşünün.

Makalenin özeti şudur:

Low-Rank Adaptation (LoRA), düşük rütbeli matrisleri kullanarak büyük temel modellerin ince ayarında popülerlik kazanmıştır A\mathbf{A} ve B\mathbf{B} ile ağırlık değişikliklerini (yani $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$) temsil etmek için kullanılır. Bu yöntem, tam delta matrisleriyle ilişkili yoğun bellek tüketimini azaltmak ve eğitilebilir parametre sayısını düşürmek için A\mathbf{A} ve B\mathbf{B} matrislerini aktivasyonla sıralı olarak çarparak gerçekleştirir. Başarısına rağmen, içsel düşük rütbeli özellik, performansını sınırlayabilir. Bu sorunu ele almak için çeşitli varyantlar önerilmiş olsa da, bunlar genellikle LoRA'nın sağladığı kritik hesaplama ve bellek verimliliğini göz ardı eder. Bu makalede, hem yüksek rütbeli uyarlama ile geliştirilmiş performans elde eden hem de hem hesaplama gücünde hem de bellek kullanımında üstün olan Circular Convolution Adaptation (C3A) yöntemini öneriyoruz. Kapsamlı deneyler, C3A'nın çeşitli ince ayar görevlerinde LoRA ve varyantlarını tutarlı bir şekilde geride bıraktığını göstermektedir.

Karma performans değerlendirmesi genel bakış

API

C3AConfig

sınıf peft.C3AConfig

< >

( 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 = Falseblock_size: int = 256target_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

Parametreler

  • block_size (int) — C3A için blok boyutu, hedef katmanın hem giriş hem de çıkış boyutuna tam bölünmelidir. Hangi block_size değerini kullanmanız gerektiği konusunda bir fikriniz yoksa, hedef katmanlarınızın tüm giriş ve çıkış boyutlarının en büyük ortak bölenini (EBOB) kullanın. Bu değeri artırmak, daha az parametre kullanılmasına yol açar.
  • target_modules (Union[list[str],str]) — C3A'nın uygulanacağı modüllerin adları.
  • bias (str) — C3A için sapma türü. ‘none’, ‘all’ veya ‘c3a_only’ olabilir. ‘all’ veya ‘c3a_only’ seçilirse, ilgili sapmalar eğitim sırasında güncellenir. Bu, adaptörler devre dışı bırakılsa bile, modelin adaptasyon olmadan temel modelin üreteceğiyle aynı çıktıyı üretmeyeceği anlamına gelir.
  • modules_to_save (list[str]) — C3A katmanları dışında, eğitilebilir olarak ayarlanacak ve nihai checkpoint'te kaydedilecek modüllerin listesi
  • layers_to_transform (Union[list[int],int]) — Dönüştürülecek katman indeksleri. Bu argüman belirtilirse, C3A bu listede belirtilen katman indekslerine uygulanır. Tek bir tamsayı geçirilirse, C3A bu indeksteki katmana uygulanır.
  • layers_pattern (str) — Katman deseni adı, yalnızca layers_to_transform None'den farklıysa ve katman deseni ortak katman desenlerinde yer almıyorsa kullanılır.
  • block_size_pattern (dict) — Varsayılan olarak belirtilenden farklı olan block_size değerlerine sahip katman adlarından veya regexp ifadelerinden block_size'a yapılan eşleme. Örneğin, {"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — Varsayılan olarak ‘xavier_uniform’ kullanılır. Bu değeri False olarak ayarlamak da ‘xavier_uniform’ kullanır. Ağırlıkları sıfıra ayarlamak (bununla da C3A’yı etkisiz kılmak) için değeri True olarak ayarlayın.

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

C3AModel

sınıf peft.C3AModel

< >

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

Dönüş değeri

torch.nn.Module

C3A modeli.

Önceden eğitilmiş bir transformers modelinden C3A modeli oluşturur.

Yöntem, https://huggingface.co/papers/2407.19342 adresinde ayrıntılı olarak açıklanmıştır.

Öznitelikler:

Update on GitHub