Este repositório contém o código para uma API serverless no Runpod que aplica um estilo Ghibli (usando um LoRA específico) a uma imagem de entrada usando o modelo FLUX.
handler.py: Lógica principal da API, carregamento do modelo e processamento de requisições.requirements.txt: Dependências Python.Dockerfile: Define a imagem Docker para o ambiente Runpod.
-
Modelos e LoRAs:
- Certifique-se de que o modelo base (
flux1-dev) e o LoRA (flux-ghibli-lora) estejam acessíveis dentro do container. - Opção A (Recomendado para Serverless): Monte um volume de rede do Runpod contendo os modelos em
./modelse os LoRAs em./lorasdentro do container. - Opção B: Modifique o
Dockerfilepara baixar os modelos/LoRAs durante a construção da imagem (descomente as linhasRUN huggingface-cli download...). Isso aumentará o tamanho da imagem.
- Certifique-se de que o modelo base (
-
Imagem Docker:
- Construa a imagem Docker:
docker build -t seu-usuario/runpod-ghibli-api . - Envie a imagem para um registro (Docker Hub, ECR, etc.).
- Construa a imagem Docker:
-
Runpod Serverless Endpoint:
- Crie um novo Endpoint Serverless no Runpod.
- Configure-o para usar a imagem Docker que você enviou.
- Associe o volume de rede (se estiver usando a Opção A para modelos).
- Ajuste as configurações de GPU, memória e concorrência conforme necessário.
Envie uma requisição POST para o URL do seu endpoint Runpod com um JSON no corpo:
{
"input": {
"image_base64": "<sua imagem codificada em base64 aqui>",
"prompt": "(Opcional) Studio Ghibli painting style, high detail...",
"num_inference_steps": 30,
"guidance_scale": 7.5
}
}Parâmetros de Entrada:
image_base64(Obrigatório): String contendo a imagem de entrada codificada em Base64.prompt(Opcional): Sobrescreve o prompt padrão.num_inference_steps(Opcional): Número de passos de inferência (padrão: 25).guidance_scale(Opcional): Escala de orientação (padrão: 7.0).
Resposta:
Um JSON contendo a imagem resultante codificada em base64:
{
"image_base64": "<imagem resultante codificada em base64 aqui>"
}Ou um erro:
{
"error": "Mensagem de erro detalhada."
}O código inclui várias otimizações para uso de memória CUDA:
- Configuração
PYTORCH_CUDA_ALLOC_CONF. - Limpeza agressiva de memória (
force_gc) antes e depois da inferência. - Uso de
torch.cuda.amp.autocastpara precisão mista. - Carregamento do modelo fora do handler principal.