| import gradio as gr | |
| import torch | |
| from diffusers import AutoPipelineForText2Image | |
| import time | |
| USE_TORCH_COMPILE = True | |
| dtype = torch.float16 | |
| device = torch.device("cuda:0") | |
| pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=dtype) | |
| pipeline.vae.register_to_config(force_upcast=False) | |
| pipeline.to(device) | |
| if USE_TORCH_COMPILE: | |
| pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True) | |
| def generate(num_images_per_prompt: int = 1): | |
| print("Start...") | |
| print("Version", torch.__version__) | |
| for _ in range(3): | |
| prompt = 77 * "a" | |
| num_inference_steps = 40 | |
| start_time = time.time() | |
| pipeline(prompt, num_images_per_prompt=num_images_per_prompt, num_inference_steps=num_inference_steps).images | |
| end_time = time.time() | |
| print(f"For {num_inference_steps} steps", end_time - start_time) | |
| print("Avg per step", (end_time - start_time) / num_inference_steps) | |
| with gr.Blocks(css="style.css") as demo: | |
| batch_size = gr.Slider( | |
| label="Batch size", | |
| minimum=0, | |
| maximum=16, | |
| step=1, | |
| value=1, | |
| ) | |
| btn = gr.Button("Benchmark!").style( | |
| margin=False, | |
| rounded=(False, True, True, False), | |
| full_width=False, | |
| ) | |
| btn.click(fn=generate, inputs=[batch_size]) | |
| demo.launch() | |