latent-diffusion icon indicating copy to clipboard operation
latent-diffusion copied to clipboard

Out of memory exception (OOM) when sampling from an unconditional LDM with image size 512

Open RabJon opened this issue 1 year ago • 2 comments

Hi everyone,

I manage to train a LDM with image size 512 using a config very similiar (except that I use my custom dataset) to the one below. But, when I try to sample from this model using the sample_diffusion.py script I get an Out Of Memory Exception, even if I set the batch size to 1. Is there anything I need to change in the config or are the memory requirements for image size 512 just that high and nothing can be done? I am just confused why training works without problems, but sampling doesn't.

Thank You.

model:
  base_learning_rate: 2.0e-06
  target: ldm.models.diffusion.ddpm.LatentDiffusion
  params:
    linear_start: 0.0015
    linear_end: 0.0195
    num_timesteps_cond: 1
    log_every_t: 200
    timesteps: 1000
    first_stage_key: image
    image_size: 128
    channels: 3
    monitor: val/loss_simple_ema

    unet_config:
      target: ldm.modules.diffusionmodules.openaimodel.UNetModel
      params:
        image_size: 64
        in_channels: 3
        out_channels: 3
        model_channels: 224
        attention_resolutions:
        # note: this isn\t actually the resolution but
        # the downsampling factor, i.e. this corresnponds to
        # attention on spatial resolution 8,16,32, as the
        # spatial reolution of the latents is 64 for f4
        - 8
        - 4
        - 2
        num_res_blocks: 2
        channel_mult:
        - 1
        - 2
        - 3
        - 4
        num_head_channels: 32
    first_stage_config:
      target: ldm.models.autoencoder.VQModelInterface
      params:
        embed_dim: 3
        n_embed: 8192
        ckpt_path: models/first_stage_models/vq-f4/model.ckpt
        ddconfig:
          double_z: false
          z_channels: 3
          resolution: 512
          in_channels: 3
          out_ch: 3
          ch: 128
          ch_mult:
          - 1
          - 2
          - 4
          num_res_blocks: 2
          attn_resolutions: []
          dropout: 0.0
        lossconfig:
          target: torch.nn.Identity
    cond_stage_config: __is_unconditional__

data:
  target: main.DataModuleFromConfig
  params:
    batch_size: 4
    num_workers: 5
    wrap: false
    train:
      target: taming.data.faceshq.CelebAHQTrain
      params:
        size: 512
    validation:
      target: taming.data.faceshq.CelebAHQValidation
      params:
        size: 512


lightning:
  callbacks:
    image_logger:
      target: main.ImageLogger
      params:
        batch_frequency: 5000
        max_images: 8
        increase_log_steps: False

  trainer:
    benchmark: True

RabJon avatar Jul 06 '23 07:07 RabJon

Did you figure this out? :)

TorAP avatar Oct 23 '23 07:10 TorAP

Did you figure this out? :)

Unfortunately I didn't :( For me it only worked for size 256.

RabJon avatar Oct 27 '23 17:10 RabJon