| import torch |
| import os |
|
|
| from diffusers import ( |
| DDPMScheduler, |
| StableDiffusionXLImg2ImgPipeline, |
| AutoencoderKL, |
| ) |
|
|
| os.system("pip install torch_tensorrt==2.4.0") |
|
|
|
|
| import torch_tensorrt |
|
|
| BASE_MODEL = "stabilityai/stable-diffusion-xl-base-1.0" |
| device = "cuda" |
|
|
| vae = AutoencoderKL.from_pretrained( |
| "madebyollin/sdxl-vae-fp16-fix", |
| torch_dtype=torch.float16, |
| ) |
|
|
| base_pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained( |
| BASE_MODEL, |
| vae=vae, |
| torch_dtype=torch.float16, |
| variant="fp16", |
| use_safetensors=True, |
| ) |
| base_pipe = base_pipe.to(device, silence_dtype_warnings=True) |
| base_pipe.scheduler = DDPMScheduler.from_pretrained( |
| BASE_MODEL, |
| subfolder="scheduler", |
| ) |
|
|
| backend = "torch_tensorrt" |
|
|
|
|
|
|
| |
| |
| |
|
|
|
|
|
|
| def create_demo() -> gr.Blocks: |
|
|
| @spaces.GPU(duration=30) |
| def text_to_image( |
| prompt:str, |
| steps:int, |
| ): |
| print('Compiling model...') |
| compiledModel = torch.compile( |
| base_pipe.unet, |
| backend=backend, |
| options={ |
| "truncate_long_and_double": True, |
| "enabled_precisions": {torch.float32, torch.float16}, |
| }, |
| dynamic=False, |
| ) |
| print('Model compiled!') |
|
|
| print('Saving compiled model...') |
| torch_tensorrt.save(compiledModel, "compiled_pipe.ep") |
| print('Compiled model saved!') |
|
|
| with gr.Blocks() as demo: |
| with gr.Row(): |
| with gr.Column(): |
| prompt = gr.Textbox(label="Prompt", placeholder="Write a prompt here", lines=2, value="A beautiful sunset over the city") |
| with gr.Column(): |
| steps = gr.Slider(minimum=1, maximum=100, value=5, step=1, label="Num Steps") |
| g_btn = gr.Button("Generate") |
| |
| with gr.Row(): |
| with gr.Column(): |
| generated_image = gr.Image(label="Generated Image", type="pil", interactive=False) |
| with gr.Column(): |
| time_cost = gr.Textbox(label="Time Cost", lines=1, interactive=False) |
| |
| g_btn.click( |
| fn=text_to_image, |
| inputs=[prompt, steps], |
| |
| outputs=[], |
| ) |
|
|
| return demo |
|
|