PEFT documentation
Eğitilebilir Jetonlar
Eğitilebilir Jetonlar
Trainable Tokens yöntemi, tam gömme matrisini eğitmeye veya gömme matrisine bir adaptör kullanmaya başvurmadan, ince ayar için belirli token gömmelerini hedeflemenin bir yolunu sunar. Bu yöntem, buradaki ilk uygulamaya dayanmaktadır.
Yöntem yalnızca belirli jetonları hedefler ve belirttiğiniz jeton dizinlerini seçici olarak eğitir. Sonuç olarak, tam ince ayarlanmış gömme matrisini depolamaya kıyasla gereken RAM daha düşük olur ve disk belleği de önemli ölçüde daha az yer kaplar.
Bu betik ile elde edilen bazı ön düzey kıyaslama sonuçları, gemma-2-2b (oldukça büyük bir gömme matrisine sahip) için Trainable Tokens yaklaşımının, gömme matrisinin tamamen ince ayarına kıyasla ~4 GiB VRAM tasarrufu sağlayabileceğini göstermektedir. LoRA benzer miktarda VRAM kullanırken, değiştirilmesini istemediğiniz token'lara da etki edebilir. Not: Bunlar yalnızca göstergelerdir ve değişen gömme matrisi boyutları bu sayıları biraz değiştirebilir.
Bu yöntemin sizin için token eklemeyeceğini, tokenleri tokenizer'a kendinizin eklemeniz ve modelin gömme matrisini buna göre yeniden boyutlandırmanız gerektiğini unutmayın. Bu yöntem yalnızca belirttiğiniz tokenler için gömme katmanlarını yeniden eğitecektir. Bu yöntem, LoRA katmanlarıyla birlikte de kullanılabilir! LoRA belgelendirmesine bakın.
Yeni tokenler eklerken modeli save_pretrained() ile kaydetmek veya durum sözlüğünü get_peft_model_state_dict() kullanarak almak, gömme matrisinin yeniden boyutlandırıldığı için önlem olarak yalnızca farkı değil, tam gömme matrisini kaydedebilir. Alan tasarrufu sağlamak için,
save_pretrainedçağrılırkensave_embedding_layers=Falseayarlayarak bu davranışı devre dışı bırakabilirsiniz. Bu, gömme matrisini başka yollarla da değiştirmediğiniz sürece güvenlidir; çünkü bu tür değişiklikler eğitilebilir tokenlar tarafından izlenmez.
Karma performans değerlendirmesi genel bakış
API
TrainableTokensConfig
sınıf peft.TrainableTokensConfig
< 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 = Falsetoken_indices: list[int] = <factory>target_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )
Parametreler
- token_indices (
list[int]) — Eğitilebilir olmasını istediğiniz tokenlerin indekslerini belirten tamsayı listesi. Bir tokenin indeksini bulmak için bir tokenizer ile metni tokenize edip döndürüleninput_idsdeğerlerine bakabilirsiniz. İndeks sayısı toplam token sayısına ne kadar yakınsa, bu yöntemin verimliliği o kadar azalır. - target_modules (
Optional[Union[list[str], str]]) —TrainableTokensLayerile değiştirilecek modül adlarının listesi veya modül adlarının regex ifadesi. Tanımlanmamışsa, modelinget_input_embeddingsmetodu varsa (transformer modelleri genellikle vardır) modelin giriş gömme katmanını almaya çalışır, bu başarısız olursa varsayılan değer ‘embed_tokens’ olur. Diğer örnek hedeflerembedding,encoder.embeddingsveyadecoder.embeddingsşeklindedir. - init_weights (
bool) — Varsayılan olarak yeni token ağırlıkları, ilgili token gömümleriyle aynı olacak şekilde başlatılır. Bu, TrainableTokens'ın eğitilmediğinde bir işe yaramaz (no-op) olmasını sağlar.Falseolarak ayarlanırsa ağırlıklar rastgele değerler olur. Ne yaptığınızı tam olarak bilmiyorsanız bu ayarı değiştirmeyin.
TrainableTokens yöntemi için yapılandırma.
Yeni tokenların (ve mevcut olanların yeniden) tam gömme matrisini eğitmek zorunda kalmadan eğitilmesine olanak tanır. Birkaç seçili tokenı (endeksleriyle tanımlanan) eğitilebilir olarak işaretleyip geri kalanına dokunmadan, bu yöntem yeni token eklemek veya mevcut tokenların gömme değerlerini değiştirmek için hafıza tasarrufu sağlayarak kullanılabilir. Gömme matrisinin tamamen eğitilmesine kıyasla hem depolama hem de çalışma belleği kullanımı azaltılır.
FSDP/DeepSpeed ile eğitimin henüz tam olarak desteklenmediğini unutmayın.
TrainableTokensModel
sınıf peft.TrainableTokensModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )