File size: 2,050 Bytes
458776d
0dd3003
 
 
 
4abbcc0
 
458776d
0dd3003
 
 
 
 
 
 
8605a7d
4abbcc0
 
0dd3003
 
 
4abbcc0
 
0dd3003
 
 
4abbcc0
 
0a9ad5e
4abbcc0
 
0a9ad5e
 
0dd3003
 
 
 
0a9ad5e
0dd3003
4abbcc0
0dd3003
0a9ad5e
 
 
 
0dd3003
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import torch
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
import gradio as gr
from tqdm.auto import tqdm
import psutil

base = "stabilityai/stable-diffusion-xl-base-1.0"
repo = "ByteDance/SDXL-Lightning"
ckpt = "sdxl_lightning_4step_unet.safetensors"

# Load model.
unet = UNet2DConditionModel.from_config(base, subfolder="unet").to("cpu")
unet.load_state_dict(load_file(hf_hub_download(repo, ckpt), device="cpu"))
pipe = StableDiffusionXLPipeline.from_pretrained(base, unet=unet, torch_dtype=torch.float32).to("cpu")

# Ensure sampler uses "trailing" timesteps.
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")

def generate_images(prompt, num_inference_steps, guidance_scale, batch_size):
    with tqdm(total=num_inference_steps, desc="Inference Progress") as pbar:
        images = pipe(prompt, num_inference_steps=num_inference_steps, guidance_scale=guidance_scale, batch_size=batch_size, progress_bar=pbar).images
    return images

# Define Gradio interface
def get_cpu_info():
    cpu_name = psutil.cpu_freq().brand
    memory_available = psutil.virtual_memory().available // 1024 // 1024  # in MB
    return f"CPU: {cpu_name}, Memory: {memory_available} MB"

cpu_info_text = gr.Textbox(label="CPU Information", value=get_cpu_info(), interactive=False)

iface = gr.Interface(
    fn=generate_images,
    inputs=[
        gr.Textbox(label="Prompt"),
        gr.Slider(label="Num Inference Steps", minimum=1, maximum=50, step=1, value=4),
        gr.Slider(label="Guidance Scale", minimum=0, maximum=20, step=0.1, value=0),
        gr.Slider(label="Batch Size", minimum=1, maximum=4, step=1, value=1),
    ],
    outputs=[
        gr.Gallery(label="Generated Images"),
        cpu_info_text
    ],
    title="SDXL Lightning 4-Step Inference (CPU)",
    description="Generate images with Stable Diffusion XL Lightning 4-Step model on CPU.",
)

iface.launch()