SDXL Container

License Python OS

CI CodeQL Advanced Pytest Python Lint pages

🇺🇸 English | 🇮🇳 हिंदी | 🇯🇵 日本語 | 🇨🇳 简体中文 | 🇪🇸 Español | 🇧🇷 Português (Brasil) | 🇰🇷 한국어 | 🇩🇪 Deutsch | 🇫🇷 Français

"image"

SDXL LoRA adapters를 train하고 SDXL inference를 run하기 위한 docker container입니다.

이 repo는 “small image set” LoRA runs에 최적화되어 있습니다: 1) images를 folder에 넣습니다
2) (선택 사항) captions를 auto-generate합니다
3) LoRA를 ./models/loras/에 train합니다
4) 해당 LoRA로 즉시 images를 generate합니다


What’s inside

  • GPU trainer container
  • Command entrypoint: train / caption / infer
  • LoRA training wrapper
  • Training launcher wrapper
  • BLIP captioning tool
  • Diffusers inference script
  • CI용 CPU-only test container

Architecture / Mounts

docker-compose.yml은 local folders를 container 안에 mount합니다:

  • ./models/models (base models + output LoRAs)
  • ./datasets/datasets (your raw images)
  • ./workspace/workspace(runs + caches + outputs)
  • ./scripts/scripts (entrypoint + wrappers)

모든 commands는 container 내부에서 실행되지만, files는 이러한 mounts를 통해 host에 기록됩니다.


Prerequisites

  • Docker + Docker Compose
  • GPU + toolkit (gpus: all용)
  • SDXL base model. 다음 중 하나: (a) ./models/base/ 아래의 local .safetensors/diffusers dir, 또는 (b) Hugging Face repo id (예: stabilityai/sdxl-turbo)
  • ./datasets/<subject>/images/ 아래의 small dataset

Highlights:

  • Reproducible: 모든 것이 container 안에서 실행됩니다 (local Python env가 필요하지 않음).
  • Simple: images caption 생성(선택 사항) + train을 하나의 command로 실행합니다.
  • few-shot SDXL LoRA를 위한 Safe defaults.
  • Includes inference: diffusers를 사용한 LoRA 포함 SDXL txt2img.

Build

docker compose build trainer

Train (caption + LoRA)

# train
docker compose run --rm trainer train \
--base-model stabilityai/sdxl-turbo \
--images /datasets/yokosuka \
--run-name yokosuka \
--sdxl \
--caption-mode blip \
--concept-token sksyokosuka \
--max-train-steps 1600 \
--num-repeats 20 \
--network-dim 16 \
--network-alpha 8

Infer (txt2img)

docker compose run --rm trainer infer \
--base-model stabilityai/sdxl-turbo \
--lora /models/loras/title_***.safetensors \
--prompt "portrait photo of sksTitle, high detail, natural light" \
--negative-prompt "low quality, blurry, worst quality" \
--out-dir /workspace/outputs \
--num-images 4 \
--seed 123 \
--steps 30 \
--cfg 7.0 \
--lora-scale 0.8 \
--width 1024 --height 1024

Caption (BLIP)

각 image 옆에 같은 basename의 .txt captions를 generate하려는 경우:

# caption
docker compose run  \
--rm trainer caption  \  
--images /datasets/title \   
--prefix sksSubject    \
--overwrite

Inference (SDXL txt2img with LoRA)

Trained LoRA로 images를 generate합니다:

# inference
docker compose run  \
--rm trainer infer    \
--base-model /models/base/sd_xl_base_1.0.safetensors    \
--lora /models/loras/title_***.safetensors    \
--prompt "sksSubject seaside"    \
--negative-prompt ""    \
--out-dir /datasets/title/inference    \
--num-images 4    \
--steps 30    \
--cfg 7.0    \
--width 1024    \
--height 1024    \
--lora-scale 0.8    \
--seed 42

Test

docker compose -f docker-compose.test.yml build
docker compose -f docker-compose.test.yml run --rm test

LoRA algorithm

LoRA (Low-Rank Adaptation)는 base weights를 frozen 상태로 유지하면서 선택된 weight matrices에 low-rank update를 추가하여 diffusion model을 fine-tune합니다.

weight matrix W에 대해 LoRA는 다음을 학습합니다:

ΔW = (α / r) * (B @ A)

여기서:

r은 rank입니다 (–network-dim)

α는 scaling factor입니다 (–network-alpha)

A와 B는 low-rank trainable matrices입니다

Inference time에는 effective weight가 다음과 같이 됩니다:

W’ = W + ΔW

또한 이 repo에서는 –lora-scale을 통해 LoRA가 generation에 얼마나 강하게 영향을 주는지 제어할 수 있습니다.

License

  • Apache License 2.0