| import torch |
| from pathlib import Path |
| from PIL.Image import Image |
| from diffusers import StableDiffusionXLPipeline, DDIMScheduler |
| from pipelines.models import TextToImageRequest |
| from torch import Generator |
| from cache_diffusion import cachify |
| from pipe.deploy import compile |
| from loss import SchedulerWrapper |
|
|
| generator = Generator(torch.device("cuda")).manual_seed(6969) |
| prompt = "Make submissions great again" |
| SDXL_DEFAULT_CONFIG = [ |
| { |
| "wildcard_or_filter_func": lambda name: "down_blocks.2" not in name and"down_blocks.3" not in name and "up_blocks.2" not in name, |
| "select_cache_step_func": lambda step: (step % 2 != 0) and (step >= 14), |
| }] |
| def load_pipeline() -> StableDiffusionXLPipeline: |
| pipe = StableDiffusionXLPipeline.from_pretrained( |
| "stablediffusionapi/newdream-sdxl-20",torch_dtype=torch.float16, use_safetensors=True |
| ).to("cuda") |
| compile( |
| pipe, |
| onnx_path=Path("/home/sandbox/.cache/huggingface/hub/models--RobertML--edge-onnx/snapshots/d56fa8ea1dc675b87de08eece735bc5ec80a247f"), |
| engine_path=Path("/home/sandbox/.cache/huggingface/hub/models--RobertML--edge-engine/snapshots/e0dd02be0c58057947801857c41839f76df2fc88"), |
| batch_size=1, |
| ) |
| cachify.prepare(pipe, SDXL_DEFAULT_CONFIG) |
| cachify.enable(pipe) |
| pipe.scheduler = SchedulerWrapper(DDIMScheduler.from_config(pipe.scheduler.config)) |
| with cachify.infer(pipe) as cached_pipe: |
| for _ in range(4): |
| pipe(prompt=prompt, num_inference_steps=20) |
| pipe.scheduler.prepare_loss() |
| cachify.disable(pipe) |
| return pipe |
|
|
| def infer(request: TextToImageRequest, pipeline: StableDiffusionXLPipeline) -> Image: |
|
|
| if request.seed is None: |
| generator = None |
| else: |
| generator = Generator(pipeline.device).manual_seed(request.seed) |
| cachify.enable(pipeline) |
| with cachify.infer(pipeline) as cached_pipe: |
| image = cached_pipe( |
| prompt=request.prompt, |
| negative_prompt=request.negative_prompt, |
| width=request.width, |
| height=request.height, |
| generator=generator, |
| num_inference_steps=13, |
| ).images[0] |
| return image |
|
|