File size: 2,905 Bytes
ca4f7e4
 
 
ad14b11
ca4f7e4
2b7c6f5
 
37d9014
 
 
 
 
 
 
ad14b11
a8b9dfb
2188f5e
 
 
 
 
 
 
 
 
 
ca4f7e4
2188f5e
7e75aa2
ad14b11
 
 
2188f5e
 
e9ba573
2188f5e
e9ba573
2b7c6f5
84f01b7
 
 
 
2b7c6f5
cdcffe0
ca4f7e4
17ab53b
 
 
 
8e4e8b9
ad14b11
ca4f7e4
 
84f01b7
26fbd8a
84f01b7
2188f5e
cdcffe0
17ab53b
0ee3f65
 
ca4f7e4
 
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
51
52
53
54
55
56
57
58
59
60
61
62
63
import gradio as gr
from optimum.intel.openvino import OVStableDiffusionPipeline
from diffusers.training_utils import set_seed
from diffusers import LMSDiscreteScheduler, StableDiffusionPipeline

import time

scheduler = DDPMScheduler(beta_start=0.00085, beta_end=0.012,
     beta_schedule="scaled_linear", num_train_timesteps=1000)

pretrained_model_name_or_path = "svjack/Stable-Diffusion-Pokemon-en"
pipe_torch_fp32 = StableDiffusionPipeline.from_pretrained(pretrained_model_name_or_path,
                                                           scheduler=scheduler, use_auth_token=True)
pipe_torch_fp32.safety_checker = lambda images, clip_input: (images, False)

pipe_fp32 = OVStableDiffusionPipeline.from_pretrained("OpenVINO/stable-diffusion-pokemons-fp32", compile=False)# scheduler=scheduler)
pipe_fp32.reshape(batch_size=1, height=512, width=512, num_images_per_prompt=1)
pipe_fp32.compile()

pipe_int8 = OVStableDiffusionPipeline.from_pretrained("OpenVINO/stable-diffusion-pokemons-quantized-aggressive", compile=False)
pipe_int8.reshape(batch_size=1, height=512, width=512, num_images_per_prompt=1)
pipe_int8.compile()

pipe_tome_int8 = OVStableDiffusionPipeline.from_pretrained("OpenVINO/stable-diffusion-pokemons-tome-quantized-aggressive", compile=False)
pipe_tome_int8.reshape(batch_size=1, height=512, width=512, num_images_per_prompt=1)
pipe_tome_int8.compile()

pipes = {
    "Torch fp32": pipe_torch_fp32,
    "OpenVINO fp32": pipe_fp32,
    "OpenVINO 8-bit quantized": pipe_int8,
    "OpenVINO merged and quantized": pipe_tome_int8
}

def generate(prompt, option, seed):
    pipe = pipes[option]
    set_seed(int(seed))
    start_time = time.time()
    if "Torch" in option:
        output = pipe(prompt, num_inference_steps=50, output_type="pil", height=512, width=512)
    else:
        output = pipe(prompt, num_inference_steps=50, output_type="pil")
    elapsed_time = time.time() - start_time
    return (output.images[0], "{:10.4f}".format(elapsed_time))

examples = ["cartoon bird",
            "a drawing of a green pokemon with red eyes",
            "plant pokemon in jungle"]

model_options = [option for option in pipes.keys()]

gr.Interface(
    fn=generate,
    inputs=[gr.inputs.Textbox(default="cartoon bird", label="Prompt", lines=1),
            gr.inputs.Dropdown(choices=model_options, default=model_options[-1], label="Model version"),
            gr.inputs.Textbox(default="42", label="Seed", lines=1)
           ],
    outputs=[gr.outputs.Image(type="pil", label="Generated Image"), gr.outputs.Textbox(label="Inference time")],
    title="OpenVINO-optimized Stable Diffusion",
    description="This is the Optimum-based demo for NNCF-optimized Stable Diffusion pipeline trained on 'lambdalabs/pokemon-blip-captions' dataset and running with OpenVINO.\n"
                 "The pipeline is run using 8 vCPUs (4 cores) only.",
    theme="huggingface",
).launch()