GaudiStableDiffusionPipeline
GaudiStableDiffusionPipeline
类允许在HPU上执行文本到图像的生成。它继承自任何类型的扩散管道父类GaudiDiffusionPipeline
。
为了充分利用,它应与优化了HPU的调度器相关联,例如GaudiDDIMScheduler
。
GaudiStableDiffusionPipeline
类 optimum.habana.diffusers.GaudiStableDiffusionPipeline
< source >( vae: 自动编码器KL text_encoder: CLIP文本模型 tokenizer: CLIPTokenizer unet: 2D条件模型UNet scheduler: Karras扩散调度器 safety_checker: 稳定扩散安全检查器 feature_extractor: CLIP图像处理器 image_encoder: CLIPVisionModelWithProjection = None requires_safety_checker: 布尔值 = True use_habana: 布尔值 = False use_hpu_graphs: 布尔值 = False gaudi_config: 联合 = None bf16_full_eval: 布尔值 = False )
参数
- vae (
AutoencoderKL
) — 条件变分自编码器(VAE)模型,用于将图像编码为潜在表示并将其解码回图像。 - text_encoder (CLIPTextModel) — 冻结的文本编码器 (clip-vit-large-patch14)。
- tokenizer (
~transformers.CLIPTokenizer
) — 用于分词的CLIPTokenizer
。 - unet (
UNet2DConditionModel
) — 用于去除编码图像潜在变量的噪声的UNet2DConditionModel
。 - scheduler (
SchedulerMixin
) — 与unet
配合使用以去除编码图像潜在变量的调度器。可以是DDIMScheduler
、LMSDiscreteScheduler
或PNDMScheduler
之一。 - 安全检查器 (
StableDiffusionSafetyChecker
) — 评估生成的图像是否可能被认为具有攻击性或有害的分类模块。有关模型潜在危害的更多详细信息,请参阅 模型卡片。 - 功能提取器 (CLIPImageProcessor) — 用于从生成的图像中提取特征的
CLIPImageProcessor
,用作安全检查器
的输入。 - use_habana (布尔值,默认为
False
) — 是否使用 Gaudi (True
) 或 CPU (False
)。 - use_hpu_graphs (bool, 默认为 False) — 是否使用 HPU 图。
- gaudi_config (Union[str, GaudiConfig], 默认为 None) — 要使用的 Gaudi 配置。可以是字符串,从 Hub 下载它。或者可以传递之前初始化的配置。
- bf16_full_eval (bool, 默认为 False) — 是否使用全 bfloat16 评估而不是 32 位。这比 fp32/mixed precision 要快且节省内存,但可能会损害生成的图像。
改编自:[GitHub 链接](https://github.com/huggingface/diffusers/blob/v0.23.1/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py#L73)
- 生成通过批处理执行
- 添加了两个
mark_step()
以添加对懒惰模式的支持 - 添加了 HPU 图的支持
__call__
< 源代码 >( prompt: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None guidance_scale: float = 7.5 negative_prompt: Union = None num_images_per_prompt: Optional = 1 batch_size: int = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None ip_adapter_image: Union = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 clip_skip: Optional = None callback_on_step_end: Optional = None callback_on_step_end_tensor_inputs: List = ['latents'] profiling_warmup_steps: Optional = 0 profiling_steps: Optional = 0 **kwargs ) → GaudiStableDiffusionPipelineOutput
or tuple
参数
- prompt (
str
或List[str]
, 可选) —— 指导图像生成的提示或提示列表。如果未定义,您需要传入prompt_embeds
。 - height (
int
, 可选,默认为self.unet.config.sample_size * self.vae_scale_factor
) —— 生成的图像的像素高度。 - width (
int
, 可选,默认为self.unet.config.sample_size * self.vae_scale_factor
) — 生成的图像的像素宽度。 - num_inference_steps (
int
, 可选,默认为 50) — 降噪步骤的数量。更多的降噪步骤通常会导致图像质量更高,但推理速度会变慢。 - timesteps (
List[int]
, 可选) — 使用支持在set_timesteps
方法中带有timesteps
参数的调度器的自定义时间步骤进行降噪过程。如果未定义,则当传递num_inference_steps
时将使用默认行为。必须按降序排列。 - guidance_scale (
float
,可选,默认值为7.5) — 较高指导比例值会鼓励模型在牺牲图像质量的情况下,生成与文本prompt
紧密相关的图像。当guidance_scale > 1
时,指导比例被启用。 - negative_prompt (
str
或List[str]
,可选) — 指导不要包含在图像生成中的提示或提示。如果没有定义,则需要传递negative_prompt_embeds
。当未使用引导(guidance_scale < 1
)时忽略。 - num_images_per_prompt (
int
,可选,默认为1) — 每个提示生成的图像数量。 - batch_size (
int
, 可选, 默认为 1) — 批量中的图像数量。 - eta (
float
, 可选, 默认为 0.0) — 对应于 DDIM 论文中的参数 η (η)。仅适用于~schedulers.DDIMScheduler
,在其他调度器中被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个torch.Generator
来使生成过程确定。 - latents (
torch.FloatTensor
, optional) — 预生成的从高斯分布中采样的噪声潜伏量,用于图像生成的输入。可用于使用不同的提示调整相同生成的内容。如果没有提供,则使用提供的随机generator
生成潜伏量张量。 - prompt_embeds (
torch.FloatTensor
, optional) — 预生成的文本嵌入。可用于轻松调整文本输入(提示权重)。如果没有提供,则从prompt
输入参数生成文本嵌入。 - negative_prompt_embeds (
torch.FloatTensor
, optional) — 预生成的负文本嵌入。可用于轻松调整文本输入(提示权重)。如果没有提供,则从negative_prompt
输入参数生成negative_prompt_embeds
。ip_adapter_image — (PipelineImageInput
, optional): 用于与 IP 适配器一起工作的可选图像输入。 - output_type (
str
,可选,默认为"pil"
) — 生成图像的输出格式。可选择PIL.Image
或np.array
。 - return_dict (
bool
,可选,默认为True
) — 是否返回GaudiStableDiffusionPipelineOutput
而不是纯元组。 - cross_attention_kwargs (
dict
,可选) — 一个 kwargs 字典,如果指定,会传递给AttentionProcessor
如在self.processor
中定义的那样。 - guidance_rescale (
float
,可选,默认为0.0)——来自常见的扩散噪声调度和采样步骤是错误的的引导缩放因子。引导缩放因子应修复使用零终端SNR时的过度曝光。 - clip_skip (
int
,可选)——在计算提示嵌入时跳过的CLIP层的数量。值为1表示将使用预最终层的输出计算提示嵌入。 - callback_on_step_end (
Callable
,可选)——在每个推理步骤的降噪步骤结束时被调用的函数。该函数使用以下参数调用:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)
。`callback_kwargs`将包含由`callback_on_step_end_tensor_inputs`指定的所有张量列表。 - callback_on_step_end_tensor_inputs (
列表
, 可选) — 为callback_on_step_end
函数提供的张量输入列表。列出的张量将通过callback_kwargs
参数传递。您只能包含您管道类._callback_tensor_inputs
属性中列出的变量。 - profiling_warmup_steps (
整数
, 可选) — 忽略以进行性能分析的步骤数。 - profiling_steps (
整数
, 可选) — 启用性能分析时要捕获的步骤数。
返回
GaudiStableDiffusionPipelineOutput
或 元组
如果 return_dict
为 True
,则返回 ~diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
,否则返回一个 元组
,其中第一个元素是包含生成的图像的列表,第二个元素是一个指示对应生成的图像是否包含“不适宜工作环境”内容的布尔值列表。
生成调用管道的函数。
GaudiDiffusionPipeline
类 optimum.habana.diffusers.GaudiDiffusionPipeline
< 源代码 >( use_habana: bool = False use_hpu_graphs: bool = False gaudi_config: Union = None bf16_full_eval: bool = False )
参数
- use_habana (布尔值,默认为
False
) — 是否使用 Gaudi (True
) 或 CPU (False
)。 - use_hpu_graphs(布尔值,默认为False)— 是否使用HPU图。
- gaudi_config(Union[str, GaudiConfig],默认为None)— 要使用的Gaudi配置。可以是字符串,从Hub下载。或传递先前初始化的配置。
- bf16_full_eval(布尔值,默认为False)— 是否使用全bfloat16评估而不是32位。这比fp32/混合精度更快、更节省内存,但可能会损害生成的图像。
- 如果
use_habana=True
,则在本上初始化流 - 保存并推送到Hub流的本机的Gaudi配置
save_pretrained
< 源代码 >( 保存目录(Union) 安全序列化(bool = True) 变体(Optional = None) 推送到 Hub(bool = False) *kwargs )
参数
- save_directory (
str
或os.PathLike
) — 要保存的目录。如果不存在则将创建它。 - safe_serialization (
bool
,可选,默认为True
)— 是否使用safetensors
或传统的 PyTorch 方式(使用pickle
)保存模型。 - variant (
str
,可选)— 如果指定,权重将保存为 pytorch_model..bin 格式。 - push_to_hub (
bool
, 可选,默认为False
) — 在保存模型后是否将其推送到 Hugging Face 模型库。您可以通过repo_id
指定要推送的存储库(将在您的命名空间中默认为save_directory
的名称)。 - kwargs (
Dict[str, Any]
, 可选) — 将额外关键字参数传递给~utils.PushToHubMixin.push_to_hub
方法。
保存管道和 Gaudi 配置。更多信息请参阅此处。
GaudiDDIMScheduler
类名 optimum.habana.diffusers.GaudiDDIMScheduler
< 来源 >( num_train_timesteps: int = 1000 beta_start: float = 0.0001 beta_end: float = 0.02 beta_schedule: str = 'linear' trained_betas: Union = None clip_sample: bool = True set_alpha_to_one: bool = True steps_offset: int = 0 prediction_type: str = 'epsilon' thresholding: bool = False dynamic_thresholding_ratio: float = 0.995 clip_sample_range: float = 1.0 sample_max_value: float = 1.0 timestep_spacing: str = 'leading' rescale_betas_zero_snr: bool = False )
参数
- num_train_timesteps (
int
, 默认为 1000) — 训练模型时扩散步骤的数量。 - beta_start (
float
, 默认为 0.0001) — 推理起始的beta
值。 - beta_end (
float
, 默认为 0.02) — 最终的beta
值。 - beta_schedule (
str
, 默认为"linear"
) — beta 时间表,将 beta 范围映射到一系列用于步进模型的 beta 值。选择linear
、scaled_linear
或squaredcos_cap_v2
。 - trained_betas (
np.ndarray
, 可选) — 直接传递一个 beta 数组到构造函数,以跳过beta_start
和beta_end
。 - clip_sample (
bool
, 默认为True
) — 修剪预测样本以提高数值稳定性。 - clip_sample_range (
float
, 默认为 1.0) — 样本剪辑的最大幅度。仅在clip_sample=True
有效。 - set_alpha_to_one (
bool
,默认为True
) — 每个扩散步骤都使用该步骤和前一个步骤的 alphas 乘积值。对于最后一个步骤没有前一个 alpha。当此选项为True
时,前一个 alpha 乘积固定为1
,否则它使用步骤 0 的 alpha 值。 - steps_offset (
int
,默认为 0) — 添加到推理步骤的偏移量。您可以使用offset=1
和set_alpha_to_one=False
的组合,使得最后一个步骤像在 Stable Diffusion 中一样使用步骤 0 的 alpha 乘积值。 - prediction_type (
str
,默认为epsilon
,可选) — 调度函数的预测类型;可以是epsilon
(预测扩散过程的噪声)、sample
(直接预测噪声样本)或v_prediction
(见Imagen Video论文的第二部分)。 - 阈值处理 (
bool
,默认为False
) — 是否使用“动态阈值”方法。此方法不适用于例如Stable Diffusion的潜在空间扩散模型。 - 动态阈值比例 (
float
,默认为0.995) — 动态阈值方法的比率。当thresholding=True
时才有效。 - sample_max_value (
float
,默认为1.0) — 动态阈值处理的阈值值。当thresholding=True
时才有效。 - timestep_spacing (
str
,默认为"leading"
) — 控制步骤缩放的方式。有关更多信息,请参阅常见的扩散噪声计划和样本步骤是错误的的第2表。 - rescale_betas_zero_snr (
bool
, 默认为False
) — 是否将beta重新缩放到零终端SNR。这使模型能够生成非常明亮和黑暗的样本,而不是将其限制在中等亮度的样本。与--offset_noise
松散相关。
扩展到 Gaudi 运行的 Diffusers’ DDIMScheduler
- 所有时间依赖参数都在开始时生成
- 在每个时间步骤中,张量被滚动以更新时间依赖参数的值
get_params
< source >( timestep: Optional = None )
初始化时间依赖参数,并在每个时间步获取时间依赖参数。如果在每个时间步中多次检索参数,则在调度步骤结束时的单独函数中滚动张量,例如,在缩放模型输入和调度步骤中。
将张量滚动以更新每个时间步依赖参数的值。
步骤
< 源代码 >( model_output: 浮点张量 timestep: 整数 sample: 浮点张量 eta: 浮点 = 0.0 use_clipped_model_output: 布尔 = False generator = None variance_noise: Optional = None return_dict: 布尔 = True ) → diffusers.schedulers.scheduling_utils.DDIMSchedulerOutput
或元组
参数
- model_output (
torch.FloatTensor
) — 从学习的扩散模型直接输出的内容。 - sample (
torch.FloatTensor
) — 由扩散过程创建的当前样本实例。 - eta (
float
) — 扩散步骤中添加噪声的噪声权重。 - use_clipped_model_output (
bool
, 默认为False
) — 如果为True
,则从剪切的预测原始样本计算“修正”的model_output
。这是必要的,因为当self.config.clip_sample
为True
时,预测原始样本会被剪切成 [-1, 1]。如果没有发生剪裁,则“修正”的model_output
将与作为输入提供的那个相同,并且use_clipped_model_output
不会产生任何效果。 - generator (
torch.Generator
, 可选) — 随机数生成器。 - variance_noise (
torch.FloatTensor
) — 相对于使用generator
生成噪声,直接提供噪声 Variance 的噪声。对于例如CycleDiffusion
方法很有用。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回DDIMSchedulerOutput
或tuple
。
返回
diffusers.schedulers.scheduling_utils.DDIMSchedulerOutput
或 tuple
如果 return_dict 是 True
,则返回 DDIMSchedulerOutput
,否则返回一个元组,其中第一个元素是样本张量。
通过反转SDE预测前一时间步的样本。该函数通过从学习到的模型输出(通常是预测噪声)传播扩散过程。
高德稳定扩散XLPipeline
GaudiStableDiffusionXLPipeline
类允许在HPUs上使用SDXL模型进行文本到图像的生成。它继承自 GaudiDiffusionPipeline
类,该类是任何类型扩散管道的父类。
为了最大限度地发挥其作用,应将其与优化于HPUs的调度器相关联,如 GaudiDDIMScheduler
。推荐的调度器有 SDXL基础用 GaudiEulerDiscreteScheduler
,以及SDXL极速能力用 GaudiEulerAncestralDiscreteScheduler
。
GaudiStableDiffusionXLPipeline
类 optimum.habana.diffusers.GaudiStableDiffusionXLPipeline
< 源码 >( vae:自编码器KL text_encoder:CLIPTextModel text_encoder_2:CLIPTextModelWithProjection tokenizer:CLIPTokenizer tokenizer_2:CLIPTokenizer unet:UNet2DConditionModel scheduler:KarrasDiffusionSchedulers image_encoder:CLIPVisionModelWithProjection = None feature_extractor:CLIPImageProcessor = None force_zeros_for_empty_prompt:bool = True use_habana:bool = False use_hpu_graphs:bool = False gaudi_config:Union = None bf16_full_eval:bool = False )
参数
- vae (
AutoencoderKL
) — 用于编码和解码图像以实现潜在表示的变分自编码器(VAE)模型。 - text_encoder (
CLIPTextModel
) — 冻结文本编码器。Stable Diffusion XL 使用了CLIP的文本部分,具体是 CLIP 的 clip-vit-large-patch14 变体。 - text_encoder_2 (
CLIPTextModelWithProjection
) — 第二个冻结文本编码器。Stable Diffusion XL 使用了CLIP的文本和池化部分,具体是 CLIP 的 laion/CLIP-ViT-bigG-14-laion2B-39B-b160k 变体。 - tokenizer (
CLIPTokenizer
) — 类 CLIPTokenizer 的标记器。 - tokenizer_2 (
CLIPTokenizer
) — 第2个分词器,属于CLIPTokenizer类。 - unet (
UNet2DConditionModel
) — 条件U-Net架构,用于去噪编码图像潜在值。 - scheduler (
SchedulerMixin
) — 用于与unet
结合使用的调度器,以去噪编码图像潜在值。可以是DDIMScheduler
、LMSDiscreteScheduler
或PNDMScheduler
之一。 - force_zeros_for_empty_prompt (
bool
,可选,默认为"True"
)-是否强制将负提示嵌入设置为0。另见stabilityai/stable-diffusion-xl-base-1-0
的配置。 - use_habana (布尔值,默认为
False
) — 是否使用 Gaudi (True
) 或 CPU (False
)。 - use_hpu_graphs (布尔值,默认为
False
) — 是否使用 HPU 图图。 - gaudi_config (联合体[str, GaudiConfig], 默认为
None
) — 要使用的 Gaudi 配置。可以是字符串,从 Hub 下载。也可以传递之前初始化的配置。 - bf16_full_eval (布尔值,默认
False
) — 是否使用完整的 bfloat16 评估而不是 32 位。这会比 fp32/混合精度更快并节省内存,但可能会损害生成的图像。
在 Gaudi 设备上使用 Stable Diffusion XL 进行从文本到图像生成的管道。改编自:https://github.com/huggingface/diffusers/blob/v0.23.1/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py#L96
扩展了 StableDiffusionXLPipeline
类
- 生成通过批处理执行
- 添加了两个
mark_step()
以添加对懒惰模式的支持 - 添加了 HPU 图的支持
__call__
< 来源 >( prompt: Union = None prompt_2: Union = None height: Optional = None width: Optional = None num_inference_steps: int = 50 timesteps: List = None denoising_end: Optional = None guidance_scale: float = 5.0 negative_prompt: Union = None negative_prompt_2: Union = None num_images_per_prompt: Optional = 1 batch_size: int = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None pooled_prompt_embeds: Optional = None negative_pooled_prompt_embeds: Optional = None ip_adapter_image: Union = None output_type: Optional = 'pil' return_dict: bool = True callback: Optional = None callback_steps: int = 1 cross_attention_kwargs: Optional = None guidance_rescale: float = 0.0 original_size: Optional = None crops_coords_top_left: Tuple = (0, 0) target_size: Optional = None negative_original_size: Optional = None negative_crops_coords_top_left: Tuple = (0, 0) negative_target_size: Optional = None clip_skip: Optional = None callback_on_step_end: Optional = None callback_on_step_end_tensor_inputs: List = ['latents', 'prompt_embeds', 'negative_prompt_embeds', 'add_text_embeds', 'add_time_ids', 'negative_pooled_prompt_embeds', 'negative_add_time_ids'] profiling_warmup_steps: Optional = 0 profiling_steps: Optional = 0 **kwargs ) → #~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput
or tuple
参数
- prompt (
str
或List[str]
, 可选) — 引导图像生成的提示或提示列表。如果不定义,则需要传入prompt_embeds
。 - prompt_2 (
str
或List[str]
,可选项)— 要发送给tokenizer_2
和text_encoder_2
的提示或一系列提示。如果没有定义,将使用prompt
作为两个文本编码器的提示。 - height (
int
,可选项,默认为 self.unet.config.sample_size * self.vae_scale_factor)— 生成的图像的像素高度。默认设置为 1024 像素以获得最佳结果。小于 512 像素的内容通常不适用于 stabilityai/stable-diffusion-xl-base-1.0 以及未在低分辨率上专门微调的检查点。 - width (
int
,可选项,默认为 self.unet.config.sample_size * self.vae_scale_factor)— 生成的图像的像素宽度。默认设置为 1024 像素以获得最佳结果。小于 512 像素的内容通常不适用于 stabilityai/stable-diffusion-xl-base-1.0 以及未在低分辨率上专门微调的检查点。 - num_inference_steps (
int
,可选,默认为50) — 隔噪步数。更多的隔噪步骤通常会换来图像质量更高的结果,但推理速度会相应的变慢。 - timesteps (
List[int]
,可选) — 为支持在 其set_timesteps
方法中加入timesteps
参数的调度器使用的自定义时间步。如果没有定义,当传递num_inference_steps
时将使用默认行为。必须按照降序排列。 - denoising_end (
float
,可选) — 当指定时,确定总隔噪过程完成前要完成的比例(在 0.0 和 1.0 之间)。结果,返回的样本还将保留大量的噪声,这些噪声由调度器选择的离散时间步确定。理想情况下,当此流水线是“混合隔噪器”多流水线设置的一部分时,应使用 denoising_end 参数,如优化图像输出中所述。 - guidance_scale (
float
,可选,默认为 5.0) — 指导尺度,在无分类扩散指导中定义。guidance_scale
是《Imagen 文章》第2个方程中的w
。启用指导尺度需设置guidance_scale > 1
。更高的指导尺度会鼓励生成与文本提醒prompt
紧密相关的图像,通常以降低图像质量为代价。 - negative_prompt (
str
或List[str]
,可选) — 不用于引导图像生成的提醒。如果未定义,则需要传递negative_prompt_embeds
。当不使用指导时(即当guidance_scale
小于1
)时忽略。 - negative_prompt_2 (
str
或List[str]
,可选) — 发送到tokenizer_2
和text_encoder_2
的不用于引导图像生成的提醒。如果未定义,则在两个文本编码器中都将使用negative_prompt
。 - num_images_per_prompt (
int
, 可选, 默认为1) — 每个提示生成图像的数量。 - batch_size (
int
, 可选, 默认为1) — 批次中的图像数量。 - eta (
float
, 可选, 默认为0.0) — 对应DDIM论文中的参数eta(η): https://arxiv.org/abs/2010.02502。仅适用于schedulers.DDIMScheduler
,其他将忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个或多个torch生成器,以实现生成确定性。 - latents (
torch.FloatTensor
,可选)—预先生成的有噪声的潜能,从高斯分布中采样,用作图像生成的输入。可用于通过不同的提示调整相同的生成。如果没有提供,将使用提供的随机generator
生成潜力的张量。 - prompt_embeds (
torch.FloatTensor
,可选)—预先生成的文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,将从prompt
输入参数生成文本嵌入。 - negative_prompt_embeds (
torch.FloatTensor
,可选)—预先生成的负文本嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,将从negative_prompt
输入参数生成负嵌入。 - pooled_prompt_embeds (
torch.FloatTensor
, 可选) — 预生成的文本集合嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,将根据prompt
输入参数生成文本集合嵌入。 - negative_pooled_prompt_embeds (
torch.FloatTensor
, 可选) — 预生成的负文本集合嵌入。可用于轻松调整文本输入,例如提示加权。如果没有提供,将根据negative_prompt
输入参数生成负文本集合嵌入。 - output_type (
str
, 可选,默认为"pil"
) — 生成图像的输出格式。选择 PIL:PIL.Image.Image
或np.array
。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回/plain tuple。 - 交叉注意力参数 (
dict
, 可选) — 如果指定,将传递给AttentionProcessor
,如定义在 diffusers.models.attention_processor 中的self.processor
。 - 引导缩放因子 (
float
, 可选, 默认为 0.0) — 根据 Common Diffusion Noise Schedules and Sample Steps are Flawed 提出的引导缩放因子,guidance_scale
定义为公式的φ
。该缩放因子可以解决使用零终端 SNR 时的过曝问题。 - original_size (
Tuple[int]
, 可选,默认为 (1024, 1024)) — 如果original_size
和target_size
不一样,图像将看起来是下采样或上采样。如果未指定,则默认为(高度, 宽度)
。这是 SDXL 的微条件部分,如第 2.2 节所述 https://huggingface.co/papers/2307.01952。 - crops_coords_top_left (
Tuple[int]
, 可选, 默认为 (0, 0)) —crops_coords_top_left
可以用于从crops_coords_top_left
位置向下裁剪图像。通常通过将crops_coords_top_left
设置为 (0, 0) 来实现居中的、良好的图像。这是 SDXL 的微条件部分,如第 2.2 节所述 https://huggingface.co/papers/2307.01952。 - target_size (
Tuple[int]
, 可选, 默认为 (1024, 1024)) — 对于大多数情况,应将target_size
设置为生成的图像所需的宽度和高度。如果未指定,则默认为(高度, 宽度)
。这是 SDXL 的微条件部分,如第 2.2 节所述 https://huggingface.co/papers/2307.01952。 - negative_target_size (
元组[int]
, 可选, 默认为 (1024, 1024)) — 基于目标图像分辨率对生成过程进行负条件设置。对于大多数情况,应与target_size
相同。SDXL 微条件设置的一部分,如第 2.2 节所述https://huggingface.co/papers/2307.01952。更多信息,请参阅此问题线程:https://github.com/huggingface/diffusers/issues/4208。 - callback_on_step_end (
可调用
, 可选) — 一个在每个推理的分步解噪结束时被调用的函数。该函数使用以下参数调用:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)
。`callback_kwargs` 将包括一个由 `callback_on_step_end_tensor_inputs` 指定的所有张量的列表。 - callback_on_step_end_tensor_inputs (
列表
, 可选) — 用于callback_on_step_end
函数的张量输入列表。列表中指定的张量将作为callback_kwargs
参数传递。您只能包括管道类 `. _ callback_tensor_inputs` 属性中列出的变量。 - profiling_warmup_steps (
int
,可选) — 忽略分析时要忽略的步数。 - profiling_steps (
int
,可选) — 启用分析时要捕获的步数。
返回
#~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput
或 tuple
#~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput
如果 return_dict
为 True,否则为 GaudiStableDiffusionXLPipelineOutput
或 tuple
:如果 return_dict
为 True,则为 GaudiStableDiffusionXLPipelineOutput
,否则为 tuple
。当返回一个元组时,第一个元素是一个包含生成图像的列表。
调用管道进行生成时调用的函数。
示例
GaudiEulerDiscreteScheduler
类 optimum.habana.diffusers.GaudiEulerDiscreteScheduler
< 来源 >( num_train_timesteps: int = 1000 beta_start: float = 0.0001 beta_end: float = 0.02 beta_schedule: str = 'linear' trained_betas: Union = None prediction_type: str = 'epsilon' interpolation_type: str = 'linear' use_karras_sigmas: Optional = False sigma_min: Optional = None sigma_max: Optional = None timestep_spacing: str = 'linspace' timestep_type: str = 'discrete' steps_offset: int = 0 rescale_betas_zero_snr: bool = False )
参数
- num_train_timesteps (
int
, 默认为 1000) — 训练模型所需的扩散步数。 - beta_start (
float
, 默认为 0.0001) — 推断的起始beta
值。 - beta_end (
float
, 默认为 0.02) — 最终的beta
值。 - beta_schedule (
str
, 默认为"linear"
) — beta 时间表,将 beta 范围映射到用于步进模型的 beta 序列。选项为linear
或scaled_linear
。 - trained_betas (
np.ndarray
, 可选) — 直接将betas数组传递给构造函数以跳过beta_start
和beta_end
。 - prediction_type (
字符串
, 默认为epsilon
, 可选) — 调度器函数的预测类型;可以是epsilon
(预测扩散过程的噪声),sample
(直接预测噪声样本)或v_prediction
(参阅Imagen Video论文的2.4节)。 - interpolation_type(
字符串
),默认为"linear"
,可选) — 计算调度器去噪步骤中间sigma的插值类型。应为"linear"
或"log_linear"
之一。 - use_karras_sigmas (
bool
, 选择性, 默认为False
) — 在采样过程中,是否使用 Karras Sigmas 作为噪声调度中的步长。如果为True
,则 sigmas 根据噪声水平序列 {σi} 确定数量。 - timestep_spacing (
str
, 默认为"linspace"
) — 时间步长缩放的方式。更多详细信息,请参阅 Common Diffusion Noise Schedules and Sample Steps are Flawed 中的第 2 表。 - steps_offset (
int
, 默认为 0) — 添加到推理步数的偏移量。您可以使用offset=1
和set_alpha_to_one=False
的组合,使最后一步使用对先前 alpha 产品的第 0 个步长,如 Stable Diffusion 中。 - rescale_betas_zero_snr (
bool
, 默认为False
) — 是否将 betas 缩放以便终端 SNR 为零。这使模型能够生成非常明亮和暗淡的样本,而不仅仅是限于中等亮度的样本。与--offset_noise
有一定关联。
继承 Diffusers’ EulerDiscreteScheduler 以在 Gaudi 上 running 最优化。
- 所有时间依赖参数都在开始时生成
- 在每个时间步骤中,张量被滚动以更新时间依赖参数的值
将张量滚动以更新每个时间步依赖参数的值。
scale_model_input
< source >( sample: FloatTensor timestep: Union ) → torch.FloatTensor
确保与需要根据当前时间步缩小去噪模型输入的调度器可互换。使用 (sigma**2 + 1) ** 0.5 缩放去噪模型输入以匹配 Euler 算法。
步骤
< 源代码 >( model_output: FloatTensor timestep: Union sample: FloatTensor s_churn: float = 0.0 s_tmin: float = 0.0 s_tmax: float = inf s_noise: float = 1.0 generator: Optional = None return_dict: bool = True ) → ~schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput
或 tuple
参数
- model_output (
torch.FloatTensor
) — 从学习到的扩散模型直接输出。 - timestep (
float
) — 扩散链中的当前离散时间步。 - sample (
torch.FloatTensor
) — 由扩散过程创建的当前样本实例。 - s_churn (
float
) — - s_tmin (
float
) — - s_tmax (
float
) — - s_noise (
float
, 默认为 1.0) — 向样本添加的噪声的缩放因子。 - generator (
torch.Generator
, 可选) — 一个随机数生成器。 - return_dict (
bool
) — 是否返回~schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput
或元组。
返回
~schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput
或 tuple
如果 return_dict 为 True
,则返回 ~schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput
,否则返回元组,其中第一个元素是样本张量。
通过反转SDE预测前一时间步的样本。该函数通过从学习到的模型输出(通常是预测噪声)传播扩散过程。
GaudiEulerAncestralDiscreteScheduler
class optimum.habana.diffusers.GaudiEulerAncestralDiscreteScheduler
< 源代码 >( num_train_timesteps: int = 1000 beta_start: float = 0.0001 beta_end: float = 0.02 beta_schedule: str = 'linear' trained_betas: Union = None prediction_type: str = 'epsilon' timestep_spacing: str = 'linspace' steps_offset: int = 0 rescale_betas_zero_snr: bool = False )
参数
- num_train_timesteps (
int
,默认值为 1000) — 训练模型所需的扩散步数。 - beta_start (
float
,默认为0.0001)— 推理的起始beta
值。 - beta_end (
float
,默认为0.02)— 最终的beta
值。 - beta_schedule (
str
,默认为"linear"
)—beta计划,将beta范围映射到模型步进的beta序列。从linear
或scaled_linear
中选择。 - trained_betas (
np.ndarray
,可选)— 直接传递beta数组到构造函数以跳过beta_start
和beta_end
。 - prediction_type (
str
, 默认为epsilon
, 可选) — 调度函数的预测类型;可以是epsilon
(预测扩散过程的噪声),sample
(直接预测带噪声样本)或v_prediction
(参见Imagen Video论文的第2.4节)。 - timestep_spacing (
str
, 默认为"linspace"
) — 时间步长的缩放方式。更多信息请参考《常见的扩散噪声调度和采样步骤存在缺陷》论文的第2表。 - steps_offset (
int
, 默认为 0) — 添加到推理步骤的偏移量。您可以使用offset=1
和set_alpha_to_one=False
的组合,使最后一步使用步骤 0 来执行前一个 alpha 乘法,类似于在 Stable Diffusion 中这样做。 - rescale_betas_zero_snr (
bool
,默认为False
) — 是否将beta重缩放以使终端SNR为零。这使模型能够生成非常明亮和暗淡的样本,而不是限制其在中等亮度样本之间。与--offset_noise
(位于<来源source >)略有相关。
扩展Diffusers的EulerAncestralDiscreteScheduler以在Gaudi上最佳运行
- 所有时间依赖参数都在开始时生成
- 在每个时间步骤中,张量被滚动以更新时间依赖参数的值
初始化时间依赖参数,并在每个时间步获取时间依赖参数。如果在每个时间步中多次检索参数,则在调度步骤结束时的单独函数中滚动张量,例如,在缩放模型输入和调度步骤中。
将张量滚动以更新每个时间步依赖参数的值。
scale_model_input
< 源代码 >( sample: FloatTensor timestep: Union ) → torch.FloatTensor
确保与需要根据当前时间步缩小去噪模型输入的调度器可互换。使用 (sigma**2 + 1) ** 0.5 缩放去噪模型输入以匹配 Euler 算法。
步骤
< 源代码 >( model_output: 浮点张量 timestep: 联合 sample: 浮点张量 generator: 可选 = 无 return_dict: 布尔型 = True ) → ~schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteSchedulerOutput
或 tuple
参数
- model_output (
torch.FloatTensor
) — 从学习扩散模型获取的直接输出。 - timestep (
float
) — 扩散链中的当前离散时间步。 - sample (
torch.FloatTensor
) — 通过扩散过程创建的当前样本的一个实例。 - generator (
torch.Generator
, 可选) — 一个随机数生成器。 - return_dict (
bool
) — 是否返回~schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteSchedulerOutput
或元组。
返回
~schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteSchedulerOutput
或 tuple
如果 return_dict 为 True,则返回 ~schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteSchedulerOutput
,否则返回一个元组,其中第一个元素是样本张量。
通过反转SDE预测前一时间步的样本。该函数通过从学习到的模型输出(通常是预测噪声)传播扩散过程。
GaudiStableDiffusionUpscalePipeline
GaudiStableDiffusionUpscalePipeline
用于在 HPU 上通过 4 倍的因子提高输入图像的分辨率。它继承自 GaudiDiffusionPipeline
类,该类是所有类型扩散管道的父类。
类 optimum.habana.diffusers.GaudiStableDiffusionUpscalePipeline
< source >( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer unet: UNet2DConditionModel low_res_scheduler: DDPMScheduler scheduler: KarrasDiffusionSchedulers safety_checker: Optional = None feature_extractor: Optional = None watermarker: Optional = None max_noise_level: int = 350 use_habana: bool = False use_hpu_graphs: bool = False gaudi_config: Union = None bf16_full_eval: bool = False )
参数
- vae (
AutoencoderKL
) — 用于编码和解码图像到和从潜在表示的变分自动编码器 (VAE) 模型。 - text_encoder (
CLIPTextModel
) — 冻结文本编码器。Stable Diffusion 使用 CLIP 的文本部分,具体是 CLIP 的 clip-vit-large-patch14 变体。 - tokenizer (
CLIPTokenizer
) — 类 CLIPTokenizer 的标记化器。 - unet (
UNet2DConditionModel
) — 条件U-Net架构,用于去噪编解码的图像潜伏变量。 - low_res_scheduler (
SchedulerMixin
) — 用来添加初始噪声到低分辨率条件图像的调度器。它必须是DDPMScheduler
的实例。 - scheduler (
SchedulerMixin
) — 与unet
结合使用的调度器,用于去噪编解码的图像潜伏变量。可以是DDIMScheduler
、LMSDiscreteScheduler
或PNDMScheduler
之一。 - 安全性检查器 (
StableDiffusionSafetyChecker
) — 评估生成的图像是否可能被认为是攻击性或有害的分类模块。请参阅模型卡片以获取详细信息。 - 特征提取器 (
CLIPImageProcessor
) — 从生成的图像中提取特征以作为安全性检查器
输入的模型。 - 使用 Habana (bool, 默认为
False
) — 是否使用 Gaudi (True
) 或 CPU (False
)。 - 使用 HPU 图 (bool, 默认为
False
) — 是否使用 HPU 图。 - gaudi_config (Union[str, GaudiConfig],默认为 None) — 要使用的 Gaudi 配置。可以是字符串,用于从 Hub 下载。也可以传递之前已初始化的配置。
- bf16_full_eval (bool, 默认为 False) — 是否使用全 bfloat16 评估而不是 32 位。这比 fp32/混合精度更快,可以节省内存,但可能对生成的图像有损害。
使用 Stable Diffusion 2 的文本引导图像超分辨率流水线。
改编自:[链接](https://github.com/huggingface/diffusers/blob/v0.23.1/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py#L70)
- 生成通过批处理执行
- 添加了两个
mark_step()
以添加对懒惰模式的支持 - 添加了 HPU 图的支持
__call__
< source >( 提示: 合并 = None 图像: 合并 = None num_inference_steps: int = 75 guidance_scale: float = 9.0 noise_level: int = 20 negative_prompt: 合并 = None num_images_per_prompt: 可选 = 1 batch_size: int = 1 eta: float = 0.0 generator: 合并 = None latents: 可选 = None prompt_embeds: 可选 = None negative_prompt_embeds: 可选 = None output_type: 可选 = 'pil' return_dict: bool = True callback: 可选 = None callback_steps: int = 1 cross_attention_kwargs: 可选 = None clip_skip: int = None **kwargs ) → GaudiStableDiffusionPipelineOutput
or tuple
参数
- 提示 (
str
orList[str]
, 可选) — 指导图像生成的提示。如果未定义,必须传递prompt_embeds
。代替。 - image (
torch.FloatTensor
,PIL.Image.Image
,np.ndarray
,List[torch.FloatTensor]
,List[PIL.Image.Image]
, orList[np.ndarray]
) — 要升采样图像的 Image 或张量。 - num_inference_steps (
int
, 可选, 默认为 50) — 缩放步骤的数量。更多的去噪步骤通常会以速度为代价提高图像质量。 - guidance_scale (
float
, 可选, 默认为 7.5) — 指导比例,如《无分类器扩散指导》中定义。`guidance_scale` 定义为《instancen paper》中的 2 公式中的 `w`。启用指导比例需要设置 `guidance_scale > 1`。较高的指导比例鼓励生成与文本 `prompt` 密切相关的图像,通常以降低图像质量为代价。 - eta (
float
, 可选, 默认为 0.0) — 对应 DDIM 论文中参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于schedulers.DDIMScheduler
,其他将被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个或多个 torch 生成器,用于使生成过程确定性。 - latents (
torch.FloatTensor
, 可选) — 预生成的噪声 latents,从高斯分布中采样,用作图像生成的输入。可用于使用不同的提示调整相同的生成。如果未提供,将随机生成 latents 张量。 - prompt_embeds (
torch.FloatTensor
,可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示权重。如果不提供,将根据prompt
输入参数生成文本嵌入。 - negative_prompt_embeds (
torch.FloatTensor
,可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入,例如提示权重。如果不提供,将从negative_prompt
输入参数生成负面文本嵌入。 - output_type (
str
,可选,默认为"pil"
) — 生成的图像的输出格式。可选择 PIL:PIL.Image.Image
或np.array
。 - return_dict (
bool
, 选填,默认为True
) — 是否返回GaudiStableDiffusionPipelineOutput
而非纯元组。 - callback (
Callable
, 选填) — 每个推断阶段执行callback_steps
步时调用的函数。函数将使用以下参数调用:callback(step: int, timestep: int, latents: torch.FloatTensor)
。 - callback_steps (
int
, 选填,默认为 1) —callback
函数被调用的频率。如果没有指定,该回调将在每个步骤中调用。 - cross_attention_kwargs (
dict
, 可选) —— 如果指定,则传递给AttentionProcessor
的 kwargs 字典,如self.processor
中定义的那样,位于diffusers.cross_attention 下。 - clip_skip (
int
, 可选) —— 在计算提示嵌入时跳过的 CLIP 层数的数量。1 的值表示将使用预终层的输出计算提示嵌入。
返回
GaudiStableDiffusionPipelineOutput
或 元组
GaudiStableDiffusionPipelineOutput
如果 return_dict
为 True,否则为 tuple
。当返回一个元组时,第一个元素是一个包含生成的图像的列表,第二个元素是一个表示根据 safety_checker
相应生成的图像可能代表“不适宜工作” (nsfw) 内容的布尔值列表。
调用管道进行生成时调用的函数。
示例
>>> import requests #TODO to test?
>>> from PIL import Image
>>> from io import BytesIO
>>> from optimum.habana.diffusers import GaudiStableDiffusionUpscalePipeline
>>> import torch
>>> # load model and scheduler
>>> model_id = "stabilityai/stable-diffusion-x4-upscaler"
>>> pipeline = GaudiStableDiffusionUpscalePipeline.from_pretrained(
... model_id, revision="fp16", torch_dtype=torch.bfloat16
... )
>>> pipeline = pipeline.to("cuda")
>>> # let's download an image
>>> url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))
>>> prompt = "a white cat"
>>> upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
>>> upscaled_image.save("upsampled_cat.png")
GaudiDDPMPipeline
GaudiDDPMPipeline
用于在 HPUs 上启用无条件图像生成。它具有与常规 DiffusionPipeline
相似的 API。它与其他现有的 Gaudi 管道共享一个共同的父类 GaudiDiffusionPipeline
。它现在支持 DDPM 和 DDIM 调度程序。建议使用优化调度程序 GaudiDDIMScheduler
以获得最佳性能和图像输出。