Guia Rápido do Krea2¶
Este guia cobre treinamento LoRA do Krea2 no SimpleTuner. Krea2 é um transformer grande de imagem com flow matching, condicionamento de texto estilo Qwen e VAE do Qwen Image. Ele é mais confortável em GPUs NVIDIA com muita memória.
O exemplo inicial está em:
Ponto de Partida Recomendado¶
Para a primeira execução, use a configuração de exemplo e mantenha o modelo conservador:
{
"model_family": "krea2",
"model_flavour": "raw",
"model_type": "lora",
"pretrained_model_name_or_path": "krea/Krea-2-Raw",
"mixed_precision": "bf16",
"attention_mechanism": "cudnn",
"gradient_checkpointing": true,
"fuse_qkv_projections": true,
"train_batch_size": 1,
"base_model_precision": "no_change"
}
Krea2 é nativo em 1024px, mas 512px e 768px são úteis para iteração rápida e checagem de dataset. Use um dataloader de 1024px depois que a execução estiver estável.
Notas de Hardware¶
Krea2 pode treinar em bf16 em uma H100 de 80GB com batch 1 em 1024px. Batches maiores couberam sem compile nos nossos testes, mas compile adiciona memória de grafo/cudagraph suficiente para causar OOM em muitas configurações maiores.
TorchAO int8 weight-only reduz bastante a VRAM, mas não foi mais rápido que bf16 no caminho de treinamento testado. Use quando memória for mais importante que tempo por passo.
Recomendações:
- Use
bf16quando couber. - Use
int8-torchaoquando precisar de folga de memória. - Use
attention_mechanism=cudnnem GPUs NVIDIA; o caminho SDPA nativo do Krea2 pode usar memória suficiente para causar OOM em runs de classe L40S que normalmente caberiam. - Mantenha
gradient_checkpointing=true. - Mantenha
fuse_qkv_projections=true. - Use
dynamo_backend=inductor,dynamo_mode=reduce-overheadedynamo_use_regional_compilation=trueapenas depois de confirmar que batch/resolução cabem.
Valores Principais de Configuração¶
{
"model_family": "krea2",
"model_flavour": "raw",
"model_type": "lora",
"pretrained_model_name_or_path": "krea/Krea-2-Raw",
"base_model_precision": "no_change",
"mixed_precision": "bf16",
"attention_mechanism": "cudnn",
"gradient_checkpointing": true,
"fuse_qkv_projections": true,
"optimizer": "optimi-lion",
"learning_rate": 1e-4,
"lora_rank": 64,
"train_batch_size": 1,
"resolution": 1024,
"validation_resolution": "1024x1024"
}
Para TorchAO int8:
Para compile reduce-overhead:
{
"dynamo_backend": "inductor",
"dynamo_mode": "reduce-overhead",
"dynamo_use_regional_compilation": true
}
Versão do LyCORIS¶
Use o LyCORIS 4.1.3 ou posterior para treinar LoKR. Essa versão lida com os fatores grandes que causavam o erro kron apply factors too large for the kernel nas versões 4.x anteriores.
Para atualizar uma instalação existente, execute no seu ambiente do SimpleTuner:
Se você definiu LYCORIS_KERNEL_BACKEND=torch para contornar esse erro, remova essa configuração do ambiente de inicialização para usar a seleção automática de backend.
Treinamento com Imagem de Referência¶
Krea2 suporta condicionamento opcional por latentes de referência para datasets de edição. Ative quando o dataloader fornecer imagens de referência pareadas ou latentes de referência em cache:
Os latentes de referência devem ter a mesma forma dos latentes alvo.
Configuração do Dataloader¶
Krea2 usa a estrutura geral de dataloader de imagem dos outros modelos transformer. A resolução real de treino vem do JSON do dataloader, não apenas de resolution no config principal. Para treinar em 1024px, confirme que resolution, maximum_image_size e target_downsample_size também são 1024 no dataloader.
Datasets em 512px são úteis para testes rápidos, checar captions e encontrar crops ruins. Para sinal de qualidade final, 1024px costuma ser mais representativo.
Para datasets locais, use type: local, defina instance_data_dir e escolha uma estratégia de caption. Para subject LoRA pequeno, caption_strategy=instanceprompt é um bom começo. Para estilos, filenames ou captions completas tendem a funcionar melhor.
Validação¶
Validação do Krea2 é cara, então comece com poucos prompts. Um único prompt pode esconder overfit ou memorização. Depois que o run estiver estável, adicione uma pequena prompt library.
{
"validation_prompt": "a studio portrait of <token>, soft directional light, detailed fabric texture",
"validation_negative_prompt": "ugly, cropped, blurry, low-quality, mediocre average",
"validation_num_inference_steps": 28,
"validation_guidance": 4.5,
"validation_resolution": "1024x1024"
}
Notas de Quantização¶
int8-torchao armazena os pesos base do transformer em int8 e treina pesos LoRA bf16 por cima. Na H100 reduziu bastante a VRAM, mas foi mais lento que bf16 neste caminho de treinamento. Pense nele como uma opção de capacidade, não como garantia de throughput.
Resultados de Benchmark¶
As medições abaixo foram feitas em uma NVIDIA H100 80GB usando o trainer real do SimpleTuner, Krea2 LoRA, QKV fusionado, gradient checkpointing e um dataset pequeno Domokun. A VRAM foi amostrada externamente com nvidia-smi. Use estes valores apenas como comparação; versões diferentes de PyTorch, CUDA, driver, dataset, rank LoRA, otimizador, backend de atenção e GPU podem mudar os resultados.
QKV Fusionado + Checkpointing, Compile Desligado¶
| Precisão | Resolução | Batch | s/passo estável | Pico VRAM |
|---|---|---|---|---|
| bf16 | 512 | 1 | 0.353 | 31.10 GiB |
| bf16 | 512 | 4 | 1.230 | 39.31 GiB |
| bf16 | 512 | 8 | 2.430 | 50.32 GiB |
| bf16 | 1024 | 1 | 0.990 | 33.28 GiB |
| bf16 | 1024 | 4 | 3.850 | 48.35 GiB |
| bf16 | 1024 | 8 | 7.690 | 67.88 GiB |
| int8-torchao | 512 | 1 | 0.535 | 18.10 GiB |
| int8-torchao | 512 | 4 | 1.690 | 27.46 GiB |
| int8-torchao | 512 | 8 | 3.220 | 40.52 GiB |
| int8-torchao | 1024 | 1 | 1.330 | 20.35 GiB |
| int8-torchao | 1024 | 4 | 4.850 | 36.99 GiB |
| int8-torchao | 1024 | 8 | 9.520 | 58.84 GiB |
QKV Fusionado + Checkpointing + Compile Reduce-Overhead¶
| Precisão | Resolução | Batch | Estado | s/passo estável | Pico VRAM |
|---|---|---|---|---|---|
| bf16 | 512 | 1 | ok | 0.260 | 41.20 GiB |
| bf16 | 512 | 4 | OOM | - | 79.07 GiB |
| bf16 | 512 | 8 | OOM | - | 79.10 GiB |
| bf16 | 1024 | 1 | ok | 0.704 | 63.71 GiB |
| bf16 | 1024 | 4 | OOM | - | 79.11 GiB |
| bf16 | 1024 | 8 | OOM | - | 78.40 GiB |
| int8-torchao | 512 | 1 | ok | 0.410 | 30.93 GiB |
| int8-torchao | 512 | 4 | ok | 1.300 | 78.60 GiB |
| int8-torchao | 512 | 8 | OOM | - | 79.12 GiB |
| int8-torchao | 1024 | 1 | ok | 0.990 | 58.68 GiB |
| int8-torchao | 1024 | 4 | OOM | - | 78.92 GiB |
| int8-torchao | 1024 | 8 | OOM | - | 78.09 GiB |
Orientação Prática¶
- Para iterar mais rápido em uma H100, use bf16, QKV fusionado, checkpointing, compile ligado e batch 1.
- Para batches efetivos maiores, prefira bf16 sem compile e aumente
train_batch_sizeaté a VRAM virar o limite. - Para execuções com pouca memória, use
int8-torchao; espere menos VRAM, mas passos mais lentos. - Compile ajuda em batch 1, mas pode consumir VRAM suficiente para fazer batches maiores falharem.
Problemas Comuns¶
- Se você esperava 1024px mas o log mostra 512px, revise o JSON do dataloader.
- Se compile causa OOM mas o run sem compile cabe, reduza batch size ou desligue compile.
- Se int8 usa menos VRAM mas é mais lento, isso corresponde aos nossos testes H100.
- Se a imagem de referência não afeta a validação, confirme
krea2_reference_latents=truee dataset pareado. - Se overfitar rápido, reduza learning rate, reduza steps ou aumente a variedade do dataset.
Exportação para ComfyUI de LoKR de matriz completa com QKV fundido¶
Para um LoKR LyCORIS de matriz completa treinado com projeções QKV fundidas, exporte projeções separadas para o ComfyUI com o comando abaixo. Use o config.json do transformer do modelo base. Para DoRA normalizado pela saída, informe também o raw.safetensors original do Krea2 com --base-model. O conversor materializa as diferenças mescladas nativas do DoRA para projeções fundidas e separadas, evitando a normalização diferente do ComfyUI. Entradas Q/K/V separadas não utilizadas com delta zero ao lado de um adaptador fundido, incluindo suas escalas DoRA, são removidas; adaptadores conflitantes com delta diferente de zero são rejeitados. Os demais tensores são preservados. Omita --base-model para adaptadores sem DoRA. Ele materializa os deltas fundidos como matrizes FP32 para manter os cortes Q/K/V exatos mesmo quando cruzam os limites dos fatores de Kronecker; a exportação pode ser consideravelmente maior. Fatores LoKR decompostos e DoRA normalizado pela entrada não são suportados. Mantenha o checkpoint nativo para treinamento e retomada.