Buckets:
| # Latent Consistency Models | |
| ## Overview | |
| Latent Consistency Models (LCMs) were proposed in [Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference by Simian Luo, Yiqin Tan, Longbo Huang, Jian Li, and Hang Zhao](https://huggingface.co/papers/2310.04378). LCMs enable inference with fewer steps on any pre-trained LDMs, including Stable Diffusion and SDXL. | |
| In `optimum-neuron`, you can: | |
| - Use the class `NeuronLatentConsistencyModelPipeline` to compile and run inference of LCMs distilled from Stable Diffusion (SD) models. | |
| - And continue to use the class `NeuronStableDiffusionXLPipeline` for LCMs distilled from SDXL models. | |
| Here are examples to compile the LCMs of Stable Diffusion ( [SimianLuo/LCM_Dreamshaper_v7](https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7) ) and Stable Diffusion XL( [latent-consistency/lcm-sdxl](https://huggingface.co/latent-consistency/lcm-sdxl) ), and then run inference on AWS Inferentia 2 : | |
| ## Export to Neuron | |
| ### LCM of Stable Diffusion | |
| ```python | |
| from optimum.neuron import NeuronLatentConsistencyModelPipeline | |
| model_id = "SimianLuo/LCM_Dreamshaper_v7" | |
| num_images_per_prompt = 1 | |
| input_shapes = {"batch_size": 1, "height": 768, "width": 768, "num_images_per_prompt": num_images_per_prompt} | |
| compiler_args = {"auto_cast": "matmul", "auto_cast_type": "bf16"} | |
| stable_diffusion = NeuronLatentConsistencyModelPipeline.from_pretrained( | |
| model_id, export=True, **compiler_args, **input_shapes | |
| ) | |
| save_directory = "lcm_sd_neuron/" | |
| stable_diffusion.save_pretrained(save_directory) | |
| # Push to hub | |
| stable_diffusion.push_to_hub(save_directory, repository_id="my-neuron-repo") # Replace with your repo id, eg. "Jingya/LCM_Dreamshaper_v7_neuronx" | |
| ``` | |
| ### LCM of Stable Diffusion XL | |
| ```python | |
| from optimum.neuron import NeuronStableDiffusionXLPipeline | |
| model_id = "stabilityai/stable-diffusion-xl-base-1.0" | |
| unet_id = "latent-consistency/lcm-sdxl" | |
| num_images_per_prompt = 1 | |
| input_shapes = {"batch_size": 1, "height": 1024, "width": 1024, "num_images_per_prompt": num_images_per_prompt} | |
| compiler_args = {"auto_cast": "matmul", "auto_cast_type": "bf16"} | |
| stable_diffusion = NeuronStableDiffusionXLPipeline.from_pretrained( | |
| model_id, unet_id=unet_id, export=True, **compiler_args, **input_shapes | |
| ) | |
| save_directory = "lcm_sdxl_neuron/" | |
| stable_diffusion.save_pretrained(save_directory) | |
| # Push to hub | |
| stable_diffusion.push_to_hub(save_directory, repository_id="my-neuron-repo") # Replace with your repo id, eg. "Jingya/lcm-sdxl-neuronx" | |
| ``` | |
| ## Text-to-Image | |
| Now we can generate images from text prompts on Inf2 using the pre-compiled model: | |
| * LCM of Stable Diffusion | |
| ```python | |
| from optimum.neuron import NeuronLatentConsistencyModelPipeline | |
| pipe = NeuronLatentConsistencyModelPipeline.from_pretrained("Jingya/LCM_Dreamshaper_v7_neuronx") | |
| prompts = ["Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"] * 2 | |
| images = pipe(prompt=prompts, num_inference_steps=4, guidance_scale=8.0).images | |
| ``` | |
| * LCM of Stable Diffusion XL | |
| ```python | |
| from optimum.neuron import NeuronStableDiffusionXLPipeline | |
| pipe = NeuronStableDiffusionXLPipeline.from_pretrained("Jingya/lcm-sdxl-neuronx") | |
| prompts = ["a close-up picture of an old man standing in the rain"] * 2 | |
| images = pipe(prompt=prompts, num_inference_steps=4, guidance_scale=8.0).images | |
| ``` | |
| ## NeuronLatentConsistencyModelPipeline[[optimum.neuron.NeuronLatentConsistencyModelPipeline]] | |
| <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"> | |
| <docstring><name>class optimum.neuron.NeuronLatentConsistencyModelPipeline</name><anchor>optimum.neuron.NeuronLatentConsistencyModelPipeline</anchor><source>https://github.com/huggingface/optimum-neuron/blob/v0.4.0/optimum/neuron/modeling_diffusion.py#L1567</source><parameters>[{"name": "config", "val": ": dict[str, typing.Any]"}, {"name": "configs", "val": ": dict[str, 'PretrainedConfig']"}, {"name": "neuron_configs", "val": ": dict[str, 'NeuronDefaultConfig']"}, {"name": "data_parallel_mode", "val": ": typing.Literal['none', 'unet', 'transformer', 'all']"}, {"name": "scheduler", "val": ": diffusers.schedulers.scheduling_utils.SchedulerMixin | None"}, {"name": "vae_decoder", "val": ": torch.jit._script.ScriptModule | NeuronModelVaeDecoder"}, {"name": "text_encoder", "val": ": torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None"}, {"name": "text_encoder_2", "val": ": torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None"}, {"name": "unet", "val": ": torch.jit._script.ScriptModule | NeuronModelUnet | None = None"}, {"name": "transformer", "val": ": torch.jit._script.ScriptModule | NeuronModelTransformer | None = None"}, {"name": "vae_encoder", "val": ": torch.jit._script.ScriptModule | NeuronModelVaeEncoder | None = None"}, {"name": "image_encoder", "val": ": torch.jit._script.ScriptModule | None = None"}, {"name": "safety_checker", "val": ": torch.jit._script.ScriptModule | None = None"}, {"name": "tokenizer", "val": ": transformers.models.clip.tokenization_clip.CLIPTokenizer | transformers.models.t5.tokenization_t5.T5Tokenizer | None = None"}, {"name": "tokenizer_2", "val": ": transformers.models.clip.tokenization_clip.CLIPTokenizer | None = None"}, {"name": "feature_extractor", "val": ": transformers.models.clip.feature_extraction_clip.CLIPFeatureExtractor | None = None"}, {"name": "controlnet", "val": ": torch.jit._script.ScriptModule | list[torch.jit._script.ScriptModule]| NeuronControlNetModel | NeuronMultiControlNetModel | None = None"}, {"name": "requires_aesthetics_score", "val": ": bool = False"}, {"name": "force_zeros_for_empty_prompt", "val": ": bool = True"}, {"name": "add_watermarker", "val": ": bool | None = None"}, {"name": "model_save_dir", "val": ": str | pathlib.Path | tempfile.TemporaryDirectory | None = None"}, {"name": "model_and_config_save_paths", "val": ": dict[str, tuple[str, pathlib.Path]] | None = None"}]</parameters></docstring> | |
| <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"> | |
| <docstring><name>__call__</name><anchor>optimum.neuron.NeuronLatentConsistencyModelPipeline.__call__</anchor><source>https://github.com/huggingface/optimum-neuron/blob/v0.4.0/optimum/neuron/modeling_diffusion.py#L1106</source><parameters>[{"name": "*args", "val": ""}, {"name": "**kwargs", "val": ""}]</parameters></docstring> | |
| </div></div> | |
| Are there any other diffusion features that you want us to support in 🤗`Optimum-neuron`? Please file an issue to [`Optimum-neuron` Github repo](https://github.com/huggingface/optimum-neuron) or discuss with us on [HuggingFace’s community forum](https://discuss.huggingface.co/c/optimum/), cheers 🤗 ! |
Xet Storage Details
- Size:
- 6.71 kB
- Xet hash:
- dbcfe74d1862719a4c935b19226669ce9627485ec4e5541f7f734e1c6a8b89bf
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.