| import torch |
| from PIL.Image import Image |
| from onediffx.deep_cache import StableDiffusionXLPipeline |
| from pipelines.models import TextToImageRequest |
| from torch import Generator |
| import oneflow as flow |
| from onediff.infer_compiler import oneflow_compile |
| from onediffx import compile_pipe, save_pipe, load_pipe |
| from diffusers import DDIMScheduler |
| from loss import SchedulerWrapper |
|
|
| def load_pipeline(pipeline=None) -> StableDiffusionXLPipeline: |
| if not pipeline: |
| pipeline = StableDiffusionXLPipeline.from_pretrained( |
| "./models/newdream-sdxl-20", |
| torch_dtype=torch.float16, |
| local_files_only=True, |
| ) |
| pipeline.to("cuda") |
| pipeline.scheduler = SchedulerWrapper(DDIMScheduler.from_config(pipeline.scheduler.config)) |
| pipeline = compile_pipe(pipeline) |
| pipeline.unet = oneflow_compile(pipeline.unet) |
| |
| load_pipe(pipeline,dir="cached_pipe") |
| for _ in range(4): |
| deepcache_output = pipeline(prompt="make submissions great again", cache_interval=1, cache_layer_id=0, cache_block_id=0, num_inference_steps=20) |
| pipeline.scheduler.prepare_loss() |
| return pipeline |
|
|
| def infer(request: TextToImageRequest, pipeline: StableDiffusionXLPipeline) -> Image: |
| if request.seed is None: |
| generator = None |
| else: |
| generator = Generator(pipeline.device).manual_seed(request.seed) |
|
|
| return pipeline( |
| prompt=request.prompt, |
| negative_prompt=request.negative_prompt, |
| width=request.width, |
| height=request.height, |
| generator=generator, |
| num_inference_steps=15, |
| cache_interval=1, |
| cache_layer_id=0, |
| cache_block_id=0, |
| ).images[0] |
|
|
|
|