Spaces:
Build error
A newer version of the Gradio SDK is available:
6.2.0
LoRA (Low-Rank Adaptation)
LoRA é uma técnica de treinamento leve que reduz significativamente o número de parâmetros treináveis. Funciona inserindo um número menor de novos pesos no modelo e apenas estes são treinados. Isso torna o treinamento com LoRA muito mais rápido, eficiente em termos de memória e produz pesos de modelo menores (algumas centenas de MBs), que são mais fáceis de armazenar e compartilhar. LoRA também pode ser combinado com outras técnicas de treinamento como DreamBooth para acelerar o treinamento.
Versatilidade do LoRA
LoRA é muito versátil e suportado para DreamBooth, Kandinsky 2.2, Stable Diffusion XL, text-to-image e Wuerstchen.
Script de Treinamento
O guia explora o script train_text_to_image_lora.py para familiarização e adaptação. Antes de executar o script, é necessário instalar a biblioteca diffusers do GitHub e as dependências necessárias para o script (PyTorch ou Flax).
Configuração do Ambiente
É necessário inicializar um ambiente 🤗 Accelerate usando accelerate config ou accelerate config default. Para ambientes sem shell interativo, pode-se usar from accelerate.utils import write_basic_config e write_basic_config().
Preparação do Dataset
Para treinar um modelo com seu próprio dataset, é importante seguir o guia de criação de dataset para treinamento.
Parâmetros do Script
O script de treinamento possui muitos parâmetros personalizáveis, encontrados na função parse_args(). Parâmetros importantes para LoRA incluem:
--rank: a dimensão interna das matrizes de baixa patente a serem treinadas; um rank mais alto significa mais parâmetros treináveis.--learning_rate: a taxa de aprendizado padrão é 1e-4, mas com LoRA, pode-se usar uma taxa de aprendizado mais alta.
Implementação no Script
O código de pré-processamento do dataset e o loop de treinamento são encontrados na função main(). O Diffusers usa ~peft.LoraConfig da biblioteca PEFT para configurar os parâmetros do adaptador LoRA, como rank, alpha e quais módulos inserir os pesos LoRA. O adaptador é adicionado ao UNet, e apenas as camadas LoRA são filtradas para otimização.
Exemplo de configuração do LoraConfig:
unet_lora_config = LoraConfig(
r=args.rank,
lora_alpha=args.rank,
init_lora_weights="gaussian",
target_modules=["to_k", "to_q", "to_v", "to_out.0"],
)
unet.add_adapter(unet_lora_config)
lora_layers = filter(lambda p: p.requires_grad, unet.parameters())
O otimizador é inicializado com lora_layers, pois são os únicos pesos a serem otimizados.
Lançamento do Script
Para lançar o script de treinamento, é necessário definir variáveis de ambiente como MODEL_NAME, OUTPUT_DIR, HUB_MODEL_ID e DATASET_NAME. Um exemplo de comando de treinamento é fornecido, incluindo parâmetros como mixed_precision, resolution, train_batch_size, learning_rate, entre outros.
Uso do Modelo Treinado
Após o treinamento, o modelo pode ser usado para inferência, carregando os pesos LoRA treinados (pytorch_lora_weights.safetensors) em um pipeline como AutoPipelineForText2Image.