PEFT documentation

PEFT yapılandırmaları ve modelleri

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

PEFT yapılandırmaları ve modelleri

Bugünün büyük ön eğitilmiş modellerinin boyutu - genellikle milyarlarca parametreye sahip olan - tüm bu hesaplamaları işlemek için daha fazla depolama alanı ve daha fazla hesaplama gücü gerektirdiğinden önemli bir eğitim zorluğu oluşturur. Bu büyük ön eğitilmiş modelleri eğitmek için güçlü GPU'lara veya TPU'lara erişim gereklidir; bu da pahalıdır, herkese yaygın olarak erişilebilir değildir, çevre dostu değildir ve pek pratik değildir. PEFT yöntemleri bu zorlukların çoğunu ele alır. PEFT yöntemlerinin birkaç türü vardır (soft prompting, matrix decomposition, adapters) ancak hepsi aynı şeye odaklanır: eğitilebilir parametre sayısını azaltmak. Bu, büyük modelleri tüketici donanımlarında eğitmeyi ve depolamayı daha erişilebilir hale getirir.

PEFT kütüphanesi, büyük modelleri ücretsiz veya düşük maliyetli GPU'larda hızlı bir şekilde eğitmenize yardımcı olmak üzere tasarlanmıştır ve bu öğreticide, eğitim için önceden eğitilmiş bir taban modele bir PEFT yöntemi uygulamak üzere bir yapılandırma nasıl ayarlayacağınızı öğreneceksiniz. PEFT yapılandırması ayarlandıktan sonra, istediğiniz herhangi bir eğitim çerçevesini (Transformers'ın Trainer sınıfı, Accelerate, özel bir PyTorch eğitim döngüsü) kullanabilirsiniz.

PEFT yapılandırmaları

Her PEFT yöntemi için yapılandırabileceğiniz parametreler hakkında ayrıntılı bilgiyi ilgili API referans sayfalarında bulabilirsiniz.

Bir yapılandırma, belirli bir PEFT yönteminin nasıl uygulanacağını belirleyen önemli parametreleri saklar.

Örneğin, LoRA uygulamak için aşağıdaki LoraConfig ve p-tuning uygulamak için PromptEncoderConfig yapılandırmalarına bir göz atın (bu yapılandırma dosyaları zaten JSON olarak serileştirilmiştir). Bir PEFT adaptörü yüklediğinizde, bunun için gerekli olan ilişkili bir adapter_config.json dosyasının olup olmadığını kontrol etmek iyi bir fikirdir.

LoraConfig
PromptEncoderConfig
{
  "base_model_name_or_path": "facebook/opt-350m", #base model to apply LoRA to
  "bias": "none",
  "fan_in_fan_out": false,
  "inference_mode": true,
  "init_lora_weights": true,
  "layers_pattern": null,
  "layers_to_transform": null,
  "lora_alpha": 32,
  "lora_dropout": 0.05,
  "modules_to_save": null,
  "peft_type": "LORA", #PEFT method type
  "r": 16,
  "revision": null,
  "target_modules": [
    "q_proj", #model modules to apply LoRA to (query and value projection layers)
    "v_proj"
  ],
  "task_type": "CAUSAL_LM" #type of task to train model on
}

Eğitim için kendi yapılandırmanızı oluşturmak için bir LoraConfig başlatabilirsiniz.

from peft import LoraConfig, TaskType

lora_config = LoraConfig(
    r=16,
    target_modules=["q_proj", "v_proj"],
    task_type=TaskType.CAUSAL_LM,
    lora_alpha=32,
    lora_dropout=0.05
)

PEFT modelleri

Elinizde bir PEFT yapılandırması olduğunda, artık bunu herhangi bir önceden eğitilmiş modele uygulayarak bir PeftModel oluşturabilirsiniz. Transformers kütüphanesindeki en son teknoloji modellerden, özel bir modelden ve hatta yeni ve desteklenmeyen transformer mimarilerinden herhangi birini seçebilirsiniz.

Bu öğretici için, ince ayar yapmak üzere bir facebook/opt-350m taban modeli yükleyin.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")

get_peft_model() işlevini kullanarak, temel facebook/opt-350m modelinden ve daha önce oluşturduğunuz lora_config ile bir PeftModel oluşturun.

from peft import get_peft_model

lora_model = get_peft_model(model, lora_config)
lora_model.print_healthcheck()

get_peft_model() çağrıldığında, temel model yerinde değiştirilir. Bu, daha önce aynı şekilde değiştirilmiş bir model üzerinde get_peft_model() çağrıldığında, bu modelin daha da değiştirileceği anlamına gelir. Dolayısıyla, get_peft_model() çağrısından sonra PEFT yapılandırmanızı değiştirmek isterseniz, önce modeli unload() ile yüklemeyi bırakmanız ve ardından yeni yapılandırmanızla get_peft_model() çağırmanız gerekir. Alternatif olarak, yeni bir PEFT yapılandırması uygulamadan önce taze, değiştirilmemiş bir durumdan emin olmak için modeli yeniden başlatabilirsiniz.

Artık PeftModel modelini tercih ettiğiniz eğitim çerçevesiyle eğitebilirsiniz. Eğitimden sonra modelinizi save_pretrained() ile yerel olarak kaydedebilir veya push_to_hub yöntemiyle Hub'a yükleyebilirsiniz.

# save locally
lora_model.save_pretrained("your-name/opt-350m-lora")

# push to Hub
lora_model.push_to_hub("your-name/opt-350m-lora")

Çıkarım için bir PeftModel yüklemek için, modelin oluşturulmasında kullanılan PeftConfig ve eğitildiği temel modeli belirtmeniz gerekir.

from peft import PeftModel, PeftConfig

config = PeftConfig.from_pretrained("ybelkada/opt-350m-lora")
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path)
lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora")

Varsayılan olarak PeftModel çıkarım için ayarlanır, ancak adaptörü biraz daha eğitmek isterseniz is_trainable=True olarak ayarlayabilirsiniz.

lora_model = PeftModel.from_pretrained(model, "ybelkada/opt-350m-lora", is_trainable=True)

PeftModel.from_pretrained() yöntemi, kullanılan model çerçevesinin (Transformers, timm, genel bir PyTorch modeli) önemi olmadığı için bir PeftModel yüklemenin en esnek yoludur. AutoPeftModel gibi diğer sınıflar, temel PeftModel sınıfının etrafındaki pratik bir sarmalayıcıdır ve PEFT ağırlıklarının Hub'dan veya yerel olarak saklandığı yerden doğrudan yüklenmesini kolaylaştırır.

from peft import AutoPeftModelForCausalLM

lora_model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")

AutoPeftModel API referansına göz atarak AutoPeftModel sınıfları hakkında daha fazla bilgi edinebilirsiniz.

Sonraki adımlar

Uygun PeftConfig ile bunu herhangi bir önceden eğitilmiş modele uygulayarak bir PeftModel oluşturabilir ve büyük, güçlü modelleri ücretsiz olarak kullanılabilen GPU'larda daha hızlı eğitebilirsiniz! PEFT yapılandırmaları ve modelleri hakkında daha fazla bilgi edinmek için aşağıdaki kılavuz faydalı olabilir:

  • Transformers dışındaki modeller için bir PEFT yöntemi yapılandırma yöntemini Özel modellerle çalışma kılavuzunda öğrenin.
Update on GitHub