Spaces:
Build error
Build error
| ## 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`: | |
| ```python | |
| 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`. | |