File size: 4,737 Bytes
9887d4c
 
 
 
ef1c0b9
1ace5a0
9887d4c
 
 
93fd450
af079bb
93fd450
 
 
 
af079bb
0abb371
 
 
7acfd95
9887d4c
93fd450
 
af079bb
93fd450
 
af079bb
9887d4c
 
 
ef1c0b9
27bd4b7
9887d4c
 
 
 
 
 
 
 
 
5072f90
 
9887d4c
 
 
 
 
5072f90
9887d4c
 
4e901de
688c057
 
 
9887d4c
 
 
 
 
 
 
 
 
 
 
 
 
0abb371
03acac3
9887d4c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12f5f6e
9887d4c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
099c99b
9887d4c
 
 
 
 
 
 
099c99b
9887d4c
 
 
 
 
 
 
 
 
e99ca73
9887d4c
 
 
 
 
099c99b
9887d4c
621bbdc
9887d4c
 
 
 
5ddbee5
4dd28e3
944abe8
5ddbee5
9887d4c
 
f8ac431
 
9887d4c
 
5072f90
9887d4c
 
 
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import gradio as gr
import numpy as np
import random
import torch
import spaces
from diffusers import PixArtSigmaPipeline

device = "cuda" if torch.cuda.is_available() else "cpu"

#torch.set_float32_matmul_precision("high")

#torch._inductor.config.conv_1x1_as_mm = True
#torch._inductor.config.coordinate_descent_tuning = True
#torch._inductor.config.epilogue_fusion = False
#torch._inductor.config.coordinate_descent_check_all_directions = True

pipe = PixArtSigmaPipeline.from_pretrained(
    "dataautogpt3/PixArt-Sigma-900M", 
    torch_dtype=torch.float16,
).to("cuda")

#pipe.transformer.to(memory_format=torch.channels_last)
#pipe.vae.to(memory_format=torch.channels_last)

#pipe.transformer = torch.compile(pipe.transformer, mode="max-autotune", fullgraph=True)
#pipe.vae.decode = torch.compile(pipe.vae.decode, mode="max-autotune", fullgraph=True)

MAX_SEED = np.iinfo(np.int32).max
MAX_IMAGE_SIZE = 1024

@spaces.GPU
def infer(prompt, negative_prompt="", seed=42, randomize_seed=False, width=1024, height=1024, guidance_scale=3.5, num_inference_steps=28, progress=gr.Progress(track_tqdm=True)):

    if randomize_seed:
        seed = random.randint(0, MAX_SEED)
        
    generator = torch.Generator().manual_seed(seed)
    
    image = pipe(
        prompt = prompt, 
        negative_prompt = negative_prompt,
        width=width,
        height=height,
        guidance_scale = guidance_scale, 
        num_inference_steps = num_inference_steps, 
        generator = generator
    ).images[0] 
    
    return image, seed

examples = [
    "A taco food cart in front of a japanese castle",
    "The spirit of a tamagotchi wandering in the city of Prague",
    "A flourecent cat on the moon",
    "A delicious gummy bear cheesecake slice",
]

css="""
#col-container {
    margin: 0 auto;
    max-width: 520px;
}
"""

with gr.Blocks(css=css) as demo:
    
    with gr.Column(elem_id="col-container"):
        gr.Markdown(f"""
        # PixArt Sigma 900M
        Demo of the [PixArt Sigma 900M](https://huggingface.co/dataautogpt3/PixArt-Sigma-900M) model, expanded from [PixArt Sigma 600M](https://huggingface.co/PixArt-alpha/PixArt-Sigma-XL-2-1024-MS)
        """)
        
        with gr.Row():
            
            prompt = gr.Text(
                label="Prompt",
                show_label=False,
                max_lines=1,
                placeholder="Enter your prompt",
                container=False,
            )
            
            run_button = gr.Button("Run", scale=0)
        
        result = gr.Image(label="Result", show_label=False)

        with gr.Accordion("Advanced Settings", open=False):
            
            negative_prompt = gr.Text(
                label="Negative prompt",
                max_lines=1,
                value="low quality, bad, watermark",
                placeholder="Enter a negative prompt",
            )
            
            seed = gr.Slider(
                label="Seed",
                minimum=0,
                maximum=MAX_SEED,
                step=1,
                value=0,
            )
            
            randomize_seed = gr.Checkbox(label="Randomize seed", value=True)
            
            with gr.Row():
                
                width = gr.Slider(
                    label="Width",
                    minimum=256,
                    maximum=MAX_IMAGE_SIZE,
                    step=32,
                    value=1024,
                )
                
                height = gr.Slider(
                    label="Height",
                    minimum=256,
                    maximum=MAX_IMAGE_SIZE,
                    step=32,
                    value=1024,
                )
            
            with gr.Row():
                
                guidance_scale = gr.Slider(
                    label="Guidance scale",
                    minimum=0.0,
                    maximum=10.0,
                    step=0.1,
                    value=3.5,
                )
                
                num_inference_steps = gr.Slider(
                    label="Number of inference steps",
                    minimum=1,
                    maximum=50,
                    step=1,
                    value=28,
                )
        
        gr.Examples(
            examples = examples,
            fn = infer,
            inputs = [prompt],
            outputs = [result, seed],
            cache_examples="lazy"
        )

    gr.on(
        triggers=[run_button.click, prompt.submit, negative_prompt.submit],
        fn = infer,
        inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
        outputs = [result, seed]
    )

demo.queue().launch()