Latih Lora menggunakan implementasi resmi Microsoft dengan model difusi yang stabil. Ini adalah cara yang paling efisien dan termudah untuk melatih Loras tanpa kompleksitas tambahan sementara juga dapat dibagikan antara perpustakaan dan implementasi.
? Repo ini masih dalam pengembangan aktif. Harapkan bug sampai bendera WIP dihapus. ?
Klone repositori ini ke folder pelatihan Anda:
git clone https://github.com/ExponentialML/Stable-LoRAInstal persyaratan dari repositori ini:
pip install -r requirements.txtPelatihan dilakukan dengan menggunakan Perpustakaan Diffusers.
Lihat example_train_script.sh untuk contoh skrip DreamBooth.
Menjalankannya semudah melakukan:
accelerate launch train_lora . py
- - pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"
- - instance_data_dir = "instance_images"
- - lora_rank = 64
- - output_dir = "./output"
- - instance_prompt = "a shld dog"
- - resolution = 512
- - mixed_precision = "fp16"
- - train_text_encoder
- - learning_rate = 1e-4
- - resize = True
- - save_steps = 200
- - preview_steps = 100
- - lr_scheduler = "constant_with_warmup"
- - lr_warmup_steps = 50
- - max_train_steps = 5000
- - save_preview
- - preview_prompt = "a shld dog as a super hero"Setelah pelatihan, hasilnya akan disimpan di folder output Anda.
Secara default, varian WebUI Automatic1111 disimpan bersama mereka (Ekstensi WebUI sedang dalam pengembangan).
Cukup tambahkan ke model Anda sebelum loop pelatihan.
# Import function to add the LoRA, as well as target modules.
from stable_lora . lora import add_lora_to , UNET_REPLACE , TEXT_ENCODER_REPLACE
from diffusers import StableDiffusionPipeline
# Load a Stable Diffusion Model
pipeline = StableDiffusionPipeline . from_pretrained ( pretrained_model_name_or_path )
# Freeze the models. Remember, only the LoRA weights get trained, not the model itself.
pipeline . unet . requires_grad_ ( False )
pipeline . text_encoder . requires_grad_ ( False )
# Add LoRA to the UNET
add_lora_to (
pipeline . unet ,
target_module = UNET_REPLACE ,
search_class = [ torch . nn . Linear , torch . nn . Conv2d ],
r = 32
)
# Add LoRA to the Text Encoder
add_lora_to ( pipeline . text_encoder , target_module = TEXT_ENCODER_REPLACE , r = 32 )
# Your optimizers and training code...Setelah menambahkan lora ke model Anda, Anda dapat dengan mudah menambahkan parameter wise optimizer params jika diperlukan.
# Example
unet_params = []
text_encoder_params = []
for n , p in unet . named_parameters ():
if 'lora' in n :
unet_params . append ({
"params" : p ,
"lr" : args . learning_rate
})
for n , p in text_encoder . named_parameters ():
if 'lora' in n :
text_encoder_params . append ({
"params" : p ,
"lr" : args . learning_rate_text
})
optimizer_params = unet_params + text_encoder_params Menyimpan dapat dilakukan dengan menggunakan Safetensor atau cara tradisional, menggunakan file .pt :
from stable_lora . lora import save_lora
save_lora ( unet , path = 'save_file_path.safetensors' )
save_lora ( text_encoder = text_encoder , use_safetensors = False , path = 'save_file_path.pt' )Selain itu, Anda dapat mengatur mode ke mode evaluasi atau kereta.
from stable_lora . lora import set_mode
# Train mode
set_mode ( unet , is_train = True )
# Evaluation mode
set_mode ( unet , is_train = False )Ini telah diuji pada model berbasis difusi 1.5 yang stabil.
Dianjurkan untuk mencoba tingkat pembelajaran 5e-6 , 3e-5 , dan 1e-4 .
Peringkat default adalah 32 , tetapi dapat ditetapkan dengan melewatkannya melalui parameter r Menggunakan peringkat yang lebih rendah akan mengkonsumsi lebih sedikit memori, dengan peringkat tinggi lebih banyak mengkonsumsi. Ini juga berkontribusi untuk mengajukan ukuran menyimpan.
Faktor -faktor ini hanya akan tergantung pada tugas Anda, tetapi merupakan titik awal yang baik.
Anda juga dapat mengaktifkan bias untuk berlatih juga.
Bergantung pada data dan tingkat pembelajaran Anda, Anda mungkin dapat memeras kinerja tambahan dari pelatihan.
# Example | Applicable to Unet or Text Encoder
lora_bias = 'lora_only'
add_lora_to ( pipeline . text_encoder , target_module = TEXT_ENCODER_REPLACE , r = 32 , lora_bias = lora_bias )
# Must be set here as well when saving.
save_lora ( text_encoder = text_encoder , use_safetensors = True , path = 'save_file_path.pt' , lora_bias = lora_bias )PT & safetensors ). Cloneofsimo untuk kode implementasi LORA mereka.
Microsoft untuk kode resmi.