Treine Lora usando a implementação oficial da Microsoft com modelos de difusão estáveis. Esta é a maneira mais eficiente e mais fácil de treinar Loras sem a complexidade adicional, além de ser compartilhável entre bibliotecas e implementações.
? Este repositório ainda está em desenvolvimento ativo. Espere bugs até que o sinalizador WIP seja removido. ?
Clone este repositório em sua pasta de treinamento:
git clone https://github.com/ExponentialML/Stable-LoRAInstale os requisitos deste repositório:
pip install -r requirements.txtO treinamento é feito usando a biblioteca difusores.
Consulte Explet_Train_script.sh Para um exemplo de script do Dreambooth.
Correr é tão fácil quanto fazer:
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"Após o treinamento, os resultados serão salvos na sua pasta de saída.
Por padrão, uma variante Automatic1111 Webui é salva ao lado deles (a extensão da Webui está em desenvolvimento).
Basta adicioná -lo ao seu modelo antes do loop de treinamento.
# 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...Depois de adicionar o LORA ao seu modelo, você pode adicionar facilmente parâmetros de otimizador de parâmetros, se necessário.
# 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 A economia pode ser feita usando o SafeTetens ou a maneira tradicional, usando arquivos .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' )Além disso, você pode definir o modo como avaliação ou modo de trem.
from stable_lora . lora import set_mode
# Train mode
set_mode ( unet , is_train = True )
# Evaluation mode
set_mode ( unet , is_train = False )Isso foi testado em modelos estáveis baseados em difusão 1.5.
Recomenda-se experimentar as taxas de aprendizado 5e-6 , 3e-5 e 1e-4 .
A classificação padrão é 32 , mas pode ser definida passando -a através do parâmetro r O uso de classificações mais baixas consumirá menos memória, com altos escalões consumindo mais. Isso também contribui para arquivar tamanhos de salvamento.
Esses fatores dependerão apenas de sua tarefa, mas são um bom ponto de partida.
Você também pode permitir que os vieses treinem também.
Dependendo dos seus dados e da taxa de aprendizado, você poderá extrair desempenho extra do treinamento.
# 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 para seu código de implementação da LORA.
Microsoft para o código oficial.