AWS Trainium & Inferentia 文档
潜在一致性模型
并获得增强的文档体验
开始使用
潜在一致性模型
概述
潜在一致性模型(LCMs)由 Simian Luo、Yiqin Tan、Longbo Huang、Jian Li 和 Hang Zhao 在《潜在一致性模型:通过少步推理合成高分辨率图像》中提出。LCMs 可以在任何预训练的 LDM 上实现更少步骤的推理,包括 Stable Diffusion 和 SDXL。
在 optimum-neuron
中,您可以:
- 使用
NeuronLatentConsistencyModelPipeline
类编译和运行从 Stable Diffusion (SD) 模型中蒸馏出的 LCMs 的推理。 - 并继续使用
NeuronStableDiffusionXLPipeline
类处理从 SDXL 模型中蒸馏出的 LCMs。
以下是编译 Stable Diffusion 的 LCMs(SimianLuo/LCM_Dreamshaper_v7)和 Stable Diffusion XL 的 LCMs(latent-consistency/lcm-sdxl),然后在 AWS Inferentia 2 上运行推理的示例:
导出到 Neuron
Stable Diffusion 的 LCM
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"
Stable Diffusion XL 的 LCM
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"
文本到图像
现在我们可以使用预编译的模型在 Inf2 上从文本提示生成图像
- Stable Diffusion 的 LCM
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
- Stable Diffusion XL 的 LCM
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
class optimum.neuron.NeuronLatentConsistencyModelPipeline
< source >( config: dict[str, typing.Any] configs: dict[str, 'PretrainedConfig'] neuron_configs: dict[str, 'NeuronDefaultConfig'] data_parallel_mode: typing.Literal['none', 'unet', 'transformer', 'all'] scheduler: diffusers.schedulers.scheduling_utils.SchedulerMixin | None vae_decoder: torch.jit._script.ScriptModule | NeuronModelVaeDecoder text_encoder: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None text_encoder_2: torch.jit._script.ScriptModule | NeuronModelTextEncoder | None = None unet: torch.jit._script.ScriptModule | NeuronModelUnet | None = None transformer: torch.jit._script.ScriptModule | NeuronModelTransformer | None = None vae_encoder: torch.jit._script.ScriptModule | NeuronModelVaeEncoder | None = None image_encoder: torch.jit._script.ScriptModule | None = None safety_checker: torch.jit._script.ScriptModule | None = None tokenizer: transformers.models.clip.tokenization_clip.CLIPTokenizer | transformers.models.t5.tokenization_t5.T5Tokenizer | None = None tokenizer_2: transformers.models.clip.tokenization_clip.CLIPTokenizer | None = None feature_extractor: transformers.models.clip.feature_extraction_clip.CLIPFeatureExtractor | None = None controlnet: torch.jit._script.ScriptModule | list[torch.jit._script.ScriptModule]| NeuronControlNetModel | NeuronMultiControlNetModel | None = None requires_aesthetics_score: bool = False force_zeros_for_empty_prompt: bool = True add_watermarker: bool | None = None model_save_dir: str | pathlib.Path | tempfile.TemporaryDirectory | None = None model_and_config_save_paths: dict[str, tuple[str, pathlib.Path]] | None = None )
您还希望我们在 🤗Optimum-neuron
中支持哪些扩散功能?请在Optimum-neuron
Github 仓库中提出问题,或在HuggingFace 社区论坛上与我们讨论,祝您使用愉快 🤗!