ddpm-cifar10 / config.py
mlvar's picture
Upload folder using huggingface_hub
065eb11 verified
Raw
History Blame Contribute Delete
1.97 kB
"""Hyperparameter configuration for DDPM training on CIFAR-10.
Target: RTX 5080 16GB — generous headroom for 32×32 image generation.
"""
from dataclasses import dataclass, field
@dataclass
class ModelConfig:
"""UNet architecture hyperparameters."""
image_size: int = 32
in_channels: int = 3
out_channels: int = 3
base_channels: int = 128
channel_multipliers: tuple[int, ...] = (1, 2, 2, 2)
attention_resolutions: tuple[int, ...] = (16,)
num_res_blocks: int = 2
dropout: float = 0.1
num_heads: int = 4
@dataclass
class TrainingConfig:
"""Training hyperparameters — tuned for RTX 5080 16 GB."""
# Diffusion
timesteps: int = 1000
beta_start: float = 1e-4
beta_end: float = 0.02
schedule: str = "cosine" # "linear" or "cosine"
# Optimisation
batch_size: int = 256
lr: float = 2e-4
epochs: int = 500
ema_decay: float = 0.9999
use_amp: bool = True # BF16 mixed-precision on RTX 5080
grad_accum_steps: int = 1 # no accumulation needed at 32×32
# Data loading
num_workers: int = 4
pin_memory: bool = True
# Logging & checkpointing
log_interval: int = 100 # print loss every N steps
sample_interval: int = 500 # save sample grid every N steps
save_interval: int = 10 # save checkpoint every N epochs
n_sample_images: int = 64 # generate 8×8 grid
# Output
output_dir: str = "./outputs"
@dataclass
class Config:
"""Aggregate config."""
model: ModelConfig = field(default_factory=ModelConfig)
training: TrainingConfig = field(default_factory=TrainingConfig)
def cifar10_config() -> Config:
"""Return the default CIFAR-10 config tuned for RTX 5080 16 GB.
Quick-reference numbers
-----------------------
- Model : ~35 M parameters
- VRAM : ~4-6 GB peak (well within 16 GB)
- Speed : ~0.3–0.5 s/step → ~6-10 h for 500 epochs
"""
return Config()