Trainieren Sie Lora mithilfe der offiziellen Implementierung von Microsoft mit stabilen Diffusionsmodellen. Dies ist die effizienteste und einfachste Möglichkeit, Loras ohne zusätzliche Komplexität zu trainieren und gleichzeitig zwischen Bibliotheken und Implementierungen zu teilen.
? Dieses Repo befindet sich noch in aktiver Entwicklung. Erwarten Sie Fehler, bis das WIP -Flag entfernt wird. ?
Klonen Sie dieses Repository in Ihren Trainingsordner:
git clone https://github.com/ExponentialML/Stable-LoRAInstallieren Sie die Anforderungen aus diesem Repository:
pip install -r requirements.txtDas Training erfolgt mit der Diffusers -Bibliothek.
Siehe Beispiel_Train_Script.sh für ein Beispielskript von Dreambooth.
Laufen ist so einfach wie:
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"Nach dem Training werden die Ergebnisse in Ihrem Ausgangsordner gespeichert.
Standardmäßig wird eine automatische 1111 -Webui -Variante neben ihnen gespeichert (Webui -Erweiterung ist in der Entwicklung).
Fügen Sie es einfach vor der Trainingsschleife Ihrem Modell hinzu.
# 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...Nach dem Hinzufügen der LORA zu Ihrem Modell können Sie bei Bedarf die Parameter -Optimiererparameter mit Parametern leicht hinzufügen.
# 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 Das Speichern kann mit Safetensoren oder traditioneller Art und Weise unter Verwendung von .pt -Dateien durchgeführt werden:
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' )Zusätzlich können Sie den Modus für die Bewertung oder den Zugmodus festlegen.
from stable_lora . lora import set_mode
# Train mode
set_mode ( unet , is_train = True )
# Evaluation mode
set_mode ( unet , is_train = False )Dies wurde an stabilen Modellen auf der Basis von stabilen Diffusion von 1,5 getestet.
Es wird empfohlen 5e-6 , 3e-5 und 1e-4 Lernraten auszuprobieren.
Der Standardrang beträgt 32 , kann aber durch Übergabe des r -Parameters eingestellt werden. Die Verwendung von niedrigeren Rängen verbraucht weniger Speicher, wobei hohe Ränge mehr verbrauchen. Dies trägt auch zu Dateispargrößen bei.
Diese Faktoren sind ausschließlich von Ihrer Aufgabe abhängig, sind jedoch ein guter Ausgangspunkt.
Sie können auch Tendenz ermöglichen, zu trainieren.
Abhängig von Ihren Daten und Ihrer Lernrate können Sie möglicherweise zusätzliche Leistung aus dem Training herausholen.
# 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 für ihren LORA -Implementierungscode.
Microsoft für den offiziellen Code.