PEFT documentation

Kartuşlar

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

Kartuşlar

Cartridges, parametrik bir KV-cache öneki olarak sıkıştırılmış uzun bağlam temsilini depolayan bir istem öğrenme yöntemidir. Temel fikir, Cartridges: Lightweight and general-purpose long context representations via self-study makalesinden gelir.

Yüksek düzeyde bir genel bakış ve motivasyon için Cartridges: Storing long contexts in tiny caches with self-study blog yazısına bakın.

Cartridges, Prefix Tuning'den Nasıl Farklıdır

Prefix Tuning ve Cartridges, past_key_values (bir önek KV önbelleği) taban modele enjekte edilerek sunulur.

  • Prefix Tuning, sanal token gömme değerlerini (ve isteğe bağlı olarak bir MLP projeksiyonunu) öğrenir ve bir KV öneki üretir.
  • Cartridge'lar, KV önekini doğrudan öğrenir (p sanal token için katman başına anahtar/değer vektörleri) ve gerçek prefill KV'den (örneğin, bir korpus/sistem isteminin ilk p token'ı) başlatılmak üzere tasarlanmıştır.

Makale, istikrar için ilk token'ın dikkat çukuru (attention sink) olarak dondurulmasını da önerir (num_frozen_tokens=1 varsayılandır).

Kullanım (çıkarım)

Eğitilmiş bir CARTRIDGE adaptörünü yükleyin ve üretim çalıştırın:

from transformers import AutoModelForCausalLM, AutoTokenizer

from peft import PeftModel

model_id = "Qwen/Qwen2.5-0.5B-Instruct"
adapter_path = "path/to/cartridge_adapter"

base = AutoModelForCausalLM.from_pretrained(model_id)
model = PeftModel.from_pretrained(base, adapter_path)

tok = AutoTokenizer.from_pretrained(model_id)
if tok.pad_token is None:
    tok.pad_token = tok.eos_token

out = model.generate(**tok("Question about the corpus:", return_tensors="pt"), max_new_tokens=64)
print(tok.decode(out[0], skip_special_tokens=True))

Eğitimden önce bir kartuş oluşturup başlatmanız gerekiyorsa, aşağıdaki başlatma seçeneklerine bakın.

Başlatma seçenekleri

Makale birkaç pratik başlatma stratejisini tartışır:

  • Rastgele KV (varsayılan): CartridgeConfig oluşturun ve eğitimi başlatın. Bu, KV önekini rastgele başlatır.
  • Bir istem/kurumun ilk token'larından KV: initialize_kv_prefix_from_text(model, tokenizer, text=...) kullanın. Bu, text üzerinde bir prefill çalıştırır ve ilk num_virtual_tokens için oluşan KV önbelleğini adaptöre kopyalar.
  • Mevcut bir önbellekten KV: Temel modelin ön doldurma (prefill) işleminden zaten bir past_key_values nesneniz varsa, initialize_kv_prefix_from_past_key_values(model, past_key_values=...) kullanın.

Eğitim

Cartridges makalesi, SELF-STUDY damıtma hedefini önermektedir (donmuş bir taban model öğretmen logitlerini sağlar; CARTRIDGE adaptörü, öğrencinin hedef segment üzerinde öğretmenin bir sonraki token dağılımıyla eşleşmesi için eğitilir). PEFT, eğitim mantığını çekirdek kütüphanenin dışında tutar; referans iş akışı için https://github.com/huggingface/peft/tree/main/examples/cartridge_self_study adresine bakın. Örnek betikler, donmuş taban modeli öğretmen ve uyarlanmış modeli öğrenci olarak kullandığından, her ikisi de aynı altta yatan checkpoint'i paylaşır.

Bileşim

Bağımsız olarak eğitilmiş kartuşları tek bir adaptöre birleştirmek için compose_cartridge_adapters(...) kullanın.

API

CartridgeConfig

sınıf peft.CartridgeConfig

< >

( 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 = Falsenum_virtual_tokens: int = Nonetoken_dim: int = Nonenum_transformer_submodules: Optional[int] = Nonenum_attention_heads: Optional[int] = Nonenum_layers: Optional[int] = Nonemodules_to_save: Optional[list[str]] = Nonenum_frozen_tokens: int = 1 )

Parametreler

  • num_frozen_tokens (int, varsayılan 1) — Kartuşun başındaki, dondurulacak (gradyan alınmayacak) önek token sayısı. Cartridges makalesi, istikrar için ilk token'ın dikkat çukuru (attention sink) olarak dondurulmasını önerir (bunu 1 olarak ayarlayın), çünkü birçok LLM erken token'ları dikkat çukuru olarak kullanır ve bunların değiştirilmesi eğitimi olumsuz etkileyebilir.

KV önbelleği parametreli bir önek adaptörü olan CARTRIDGE için yapılandırma.

Bu, servis edilme biçimi açısından (bir past_key_values olarak) prefix-tuning'e benzer, ancak KV önbelleğini bir MLP projeksiyonu aracılığıyla öğrenmek yerine doğrudan eğitilebilir parametreler olarak saklar.

Başlatma: Cartridges makalesi birden fazla başlatma seçeneğini tartışır. PEFT'de başlatma, adaptör yapılandırmasını oluşturmaktan ayrı bir adımdır:

  • Rastgele KV başlatma (makale seçeneği 2): get_peft_model(...) ile adaptörü oluşturun. CARTRIDGE istek kodlayıcı parametreleri PyTorch tarafından rastgele başlatılır.

  • Bir istemin/kurpusun ilk tokenlarından türetilen KV (makale seçeneği 3): temel model üzerinde grad'sız bir prefill çalıştırın ve önbelleğe alınan ilk num_virtual_tokens KV token'ını adaptöre kopyalayın. PEFT bunun için yardımcı araçlar sağlar (peft veya peft.tuners.cartridge.utils içinden içe aktarılabilir):

    • initialize_kv_prefix_from_text(model, tokenizer, text=...)
    • initialize_kv_prefix_from_past_key_values(model, past_key_values=...)

    Zaten düzleştirilmiş bir KV-önek tensörünüz varsa, bunu prompt kodlayıcısının load_prompt_embeddings(...) yöntemi üzerinden doğrudan yükleyebilirsiniz.

CartridgeEncoder

sınıf peft.CartridgeEncoder

< >

( config )

Parametreli bir önek KV önbelleği.

Parametreler, PrefixEncoder çıktısıyla aynı düzleştirilmiş yerleşimde saklanır: `[num_virtual_tokens, num_layers

  • 2 * token_dim], wheretoken_dimis per-head hidden size times number of heads (after any GQA adjustment performed by_prepare_prompt_learning_config`).

num_frozen_tokens > 0 ise, ilk num_frozen_tokens sanal token, eğitilemez bir parametre olarak saklanır ve kalan token'lar eğitilebilir.

load_prompt_embeddings

< >

( prompt_embeddings: torch.Tensor )

PEFT tarafından kaydedilen düzleştirilmiş istek gömme değerlerini (prompt_embeddings) yükleyin.

PEFT, prompt-learning adaptörlerini tek bir prompt_embeddings tensörü olarak kaydeder. CARTRIDGE için bu tensörü, self.num_frozen_tokens değerine göre donmuş ve eğitilebilir segmentlere ayırırız.

initialize_kv_prefix_from_past_key_values

peft.initialize_kv_prefix_from_past_key_values

< >

( modeladapter_name: Optional[str] = Nonepast_key_values: Anynum_virtual_tokens: Optional[int] = None )

Mevcut önbelleğe alınmış bir önekten (past_key_values) KV-önek prompt-öğrenme adaptörünü başlatın.

Adaptöre yüklenen istek gömme tensörünü döndürür.

prompt_embeddings_from_past_key_values

peft.prompt_embeddings_from_past_key_values

< >

( past_key_values: Anynum_virtual_tokens: int )

Eski bir past_key_values önbelleğini, PEFT tarafından kaydedilen düzleştirilmiş istek gömme tensörüne dönüştürür.

Çıktı, önek tarzı istem öğrenimi için PeftModel.get_prompt() tarafından beklenen yerleşimle eşleşir: şekil [num_virtual_tokens, num_layers * 2 * token_dim].

Update on GitHub