mirror of
https://github.com/NVIDIA/Model-Optimizer.git
synced 2026-10-02 03:14:52 +08:00
346 lines
7.9 KiB
Plaintext
346 lines
7.9 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import torch\n",
|
|
"from cache_diffusion import cachify\n",
|
|
"from cache_diffusion.utils import (\n",
|
|
" PIXART_DEFAULT_CONFIG,\n",
|
|
" SD3_DEFAULT_CONFIG,\n",
|
|
" SDXL_DEFAULT_CONFIG,\n",
|
|
" SVD_DEFAULT_CONFIG,\n",
|
|
")\n",
|
|
"from diffusers import (\n",
|
|
" DiffusionPipeline,\n",
|
|
" PixArtAlphaPipeline,\n",
|
|
" StableDiffusion3Pipeline,\n",
|
|
" StableVideoDiffusionPipeline,\n",
|
|
")\n",
|
|
"from diffusers.utils import export_to_video, load_image, make_image_grid"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# SDXL"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let's load the Model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pipe = DiffusionPipeline.from_pretrained(\n",
|
|
" \"stabilityai/stable-diffusion-xl-base-1.0\",\n",
|
|
" torch_dtype=torch.float16,\n",
|
|
" variant=\"fp16\",\n",
|
|
" use_safetensors=True,\n",
|
|
")\n",
|
|
"pipe = pipe.to(\"cuda\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"num_inference_steps = 20\n",
|
|
"prompt = \"beautiful lady, (freckles), big smile, blue eyes, short hair, dark makeup, hyperdetailed photography, soft light, head and shoulders portrait, cover\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Our pipeline requires just a single API call to perform caching.\n",
|
|
"\n",
|
|
"Let's disable the caching and run the baseline model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cachify.prepare(pipe, SDXL_DEFAULT_CONFIG)\n",
|
|
"cachify.disable(pipe)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.Generator(device=\"cuda\").manual_seed(2946901)\n",
|
|
"baseline_img_20_steps = pipe(\n",
|
|
" prompt=prompt, num_inference_steps=num_inference_steps, generator=generator\n",
|
|
").images[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We can also reduce the number of steps to achieve similar latency as using cache diffusion. However, you will notice that the image quality is not as good."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.Generator(device=\"cuda\").manual_seed(2946901)\n",
|
|
"baseline_img_11_steps = pipe(prompt=prompt, num_inference_steps=11, generator=generator).images[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let's enable the caching"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cachify.enable(pipe)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.Generator(device=\"cuda\").manual_seed(2946901)\n",
|
|
"\n",
|
|
"with cachify.infer(pipe) as cached_pipe:\n",
|
|
" cache_img = cached_pipe(\n",
|
|
" prompt=prompt, num_inference_steps=num_inference_steps, generator=generator\n",
|
|
" ).images[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"make_image_grid([baseline_img_20_steps, cache_img, baseline_img_11_steps], 1, 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# PixArt-Alpha"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pipe = PixArtAlphaPipeline.from_pretrained(\n",
|
|
" \"PixArt-alpha/PixArt-XL-2-1024-MS\", torch_dtype=torch.float16\n",
|
|
")\n",
|
|
"pipe = pipe.to(\"cuda\")\n",
|
|
"num_inference_steps = 30\n",
|
|
"prompt = \"a small cactus with a happy face in the Sahara desert\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cachify.prepare(pipe, PIXART_DEFAULT_CONFIG)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.Generator(device=\"cuda\").manual_seed(2946901)\n",
|
|
"\n",
|
|
"with cachify.infer(pipe) as cached_pipe:\n",
|
|
" img = cached_pipe(\n",
|
|
" prompt=prompt, generator=generator, num_inference_steps=num_inference_steps\n",
|
|
" ).images[0]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"img"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# SVD"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pipe = StableVideoDiffusionPipeline.from_pretrained(\n",
|
|
" \"stabilityai/stable-video-diffusion-img2vid-xt\", torch_dtype=torch.float16, variant=\"fp16\"\n",
|
|
")\n",
|
|
"pipe.enable_model_cpu_offload()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load the conditioning image\n",
|
|
"image = load_image(\n",
|
|
" \"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png\"\n",
|
|
")\n",
|
|
"image = image.resize((1024, 576))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.manual_seed(42)\n",
|
|
"num_inference_steps = 25"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cachify.prepare(pipe, SVD_DEFAULT_CONFIG)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"with cachify.infer(pipe) as cached_pipe:\n",
|
|
" frames = cached_pipe(image, decode_chunk_size=8, generator=generator).frames[0]\n",
|
|
"\n",
|
|
"export_to_video(frames, \"generated.mp4\", fps=7)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# SD3-Medium"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"pipe = StableDiffusion3Pipeline.from_pretrained(\n",
|
|
" \"stabilityai/stable-diffusion-3-medium-diffusers\", torch_dtype=torch.float16\n",
|
|
")\n",
|
|
"pipe = pipe.to(\"cuda\")\n",
|
|
"num_inference_steps = 28"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"cachify.prepare(pipe, SD3_DEFAULT_CONFIG)\n",
|
|
"cachify.enable(pipe)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"generator = torch.Generator(device=\"cuda\").manual_seed(2946901)\n",
|
|
"with cachify.infer(pipe) as cached_pipe:\n",
|
|
" cached_img = pipe(\n",
|
|
" \"A cat holding a sign that says hello world\",\n",
|
|
" negative_prompt=\"\",\n",
|
|
" num_inference_steps=28,\n",
|
|
" guidance_scale=7.0,\n",
|
|
" generator=generator,\n",
|
|
" ).images[0]\n",
|
|
"cached_img"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "ammo",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|