Skip to content

Commit

Permalink
add LCM example (#346)
Browse files Browse the repository at this point in the history
RTX 3090, fp16, steps=4, warmup=5:

## pytorch

```bash
python diffusers/examples/text_to_image_LCM.py --model_id /share_nfs/hf_models/LCM_Dreamshaper_v7 --warmup 5 --disable
```

```bash
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00,  6.43it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 14.94it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 14.82it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 14.88it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 14.90it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 14.83it/s]
```


![image](https://github.com/Oneflow-Inc/diffusers/assets/3351623/02a8d8a2-bcc8-464b-b2ae-d466b3507ca8)


## onediff

```bash
python diffusers/examples/text_to_image_LCM.py --model_id /share_nfs/hf_models/LCM_Dreamshaper_v7 --warmup 5 
```

```bash
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:25<00:00,  6.35s/it]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 28.51it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 28.72it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 28.35it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 28.60it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 28.50it/s]
```


![image](https://github.com/Oneflow-Inc/diffusers/assets/3351623/c62d2a1e-de1c-410a-a18f-f700589a042d)

## conclusion

Roughly an acceleration of 90%
  • Loading branch information
doombeaker authored Nov 14, 2023
1 parent b819b61 commit 2f1fb3d
Showing 1 changed file with 83 additions and 0 deletions.
83 changes: 83 additions & 0 deletions examples/text_to_image_lcm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import argparse
from packaging import version
import importlib.metadata

from diffusers import DiffusionPipeline


def check_diffusers_version():
required_version = version.parse("0.22.0")
package_name = "diffusers"

try:
installed_version = version.parse(importlib.metadata.version(package_name))
if installed_version < required_version:
raise ValueError(
f"Installed {package_name} version ({installed_version}) is lower than required ({required_version})"
)

except importlib.metadata.PackageNotFoundError:
print(f"{package_name} is not installed")


def parse_args():
parser = argparse.ArgumentParser(description="Simple demo of LCM image generation.")
parser.add_argument(
"--prompt",
type=str,
default="Self-portrait oil painting, a beautiful cyborg with golden hair, 8k",
)
parser.add_argument(
"--model_id",
type=str,
default="SimianLuo/LCM_Dreamshaper_v7",
help="Model id or local path to the LCM model.",
)
parser.add_argument("--height", type=int, default=768)
parser.add_argument("--width", type=int, default=768)
parser.add_argument("--steps", type=int, default=4)
parser.add_argument(
"--warmup",
type=int,
default=1,
help="Warmup option sets the number of preliminary runs of the pipeline. These initial runs are necessary to ensure accurate performance data during testing.",
)
parser.add_argument("--seed", type=int, default=1)
parser.add_argument(
"--disable", action="store_true", help="Disable Onediff speeding up."
)
args = parser.parse_args()
return args


check_diffusers_version()

args = parse_args()

if not args.disable:
from onediff.infer_compiler import oneflow_compile
import torch

pipe = DiffusionPipeline.from_pretrained(args.model_id)

pipe.to(torch_device="cuda", torch_dtype=torch.float16)
if not args.disable:
pipe.unet = oneflow_compile(pipe.unet)

for _ in range(args.warmup):
images = pipe(
args.prompt,
height=args.height,
width=args.width,
num_inference_steps=args.steps,
).images

torch.manual_seed(args.seed)

images = pipe(
args.prompt, height=args.height, width=args.width, num_inference_steps=args.steps
).images
for i, image in enumerate(images):
image.save(
f"LCM-{args.width}x{args.height}-seed-{args.seed}-disable-{args.disable}.png"
)

0 comments on commit 2f1fb3d

Please sign in to comment.