PEFT documentation
PEFT yapılandırmaları ve modelleri
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.
{
"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
){
"base_model_name_or_path": "roberta-large", #base model to apply p-tuning to
"encoder_dropout": 0.0,
"encoder_hidden_size": 128,
"encoder_num_layers": 2,
"encoder_reparameterization_type": "MLP",
"inference_mode": true,
"num_attention_heads": 16,
"num_layers": 24,
"num_transformer_submodules": 1,
"num_virtual_tokens": 20,
"peft_type": "P_TUNING", #PEFT method type
"task_type": "SEQ_CLS", #type of task to train model on
"token_dim": 1024
}Eğitim için kendi yapılandırmanızı oluşturmak için bir PromptEncoderConfig başlatabilirsiniz.
from peft import PromptEncoderConfig, TaskType
p_tuning_config = PromptEncoderConfig(
encoder_reparameterization_type="MLP",
encoder_hidden_size=128,
num_attention_heads=16,
num_layers=24,
num_transformer_submodules=1,
num_virtual_tokens=20,
token_dim=1024,
task_type=TaskType.SEQ_CLS
)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ızlaget_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=Trueolarak 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.