菜单

VAE 管理

相关源文件

目的和概述

VAE(变分自编码器)管理系统负责处理 VAE 在 Stable Diffusion Web UI 中的发现、选择、加载和缓存方式。VAE 负责将图像编码到潜在空间,并将潜在表示解码回图像,是图像生成管道的关键组成部分。本文档解释了系统如何确定为给定模型使用哪个 VAE,VAE 如何在内存中加载和管理,以及用户如何配置 VAE 偏好设置。

有关模型检查点本身的信息,请参阅 检查点系统

来源:modules/sd_vae.py1-20 modules/sd_models.py535-539

VAE 分辨率系统

该系统采用分层方法来确定与模型一起使用哪个 VAE。此过程称为“VAE 分辨率”。

分辨率顺序如下:

  1. 命令行参数(如果指定)(--vae-path)
  2. 全局设置(如果启用了“覆盖每个模型的偏好设置”)
  3. 特定检查点的用户元数据偏好
  4. 在检查点附近找到同名的 VAE 文件
  5. 全局 VAE 设置(如果不是“自动”)
  6. 无(使用模型内置的 VAE)

来源:modules/sd_vae.py132-185

VAE 存储和发现

存储位置

VAE 会从多个位置进行发现。

位置模式
模型目录**/*.vae.ckpt**/*.vae.pt**/*.vae.safetensors
专用 VAE 目录models/VAE/**/*.ckpt**/*.pt**/*.safetensors
自定义检查点目录与上述相同的模式(如果使用 --ckpt-dir 指定)
自定义 VAE 目录与上述相同的模式(如果使用 --vae-dir 指定)

VAE 字典

所有发现的 VAE 都存储在一个字典(vae_dict)中,该字典将文件名映射到其完整路径。在确定要使用哪个 VAE 时,会使用此字典进行快速查找。

来源:modules/sd_vae.py72-106

VAE 匹配

系统可以通过命名约定自动为检查点查找匹配的 VAE。如果存在一个 VAE 文件,其名称以检查点名称(不含扩展名)开头,则认为它匹配。

例如

  • 检查点:v1-5-pruned-emaonly.safetensors
  • 匹配的 VAE:v1-5-pruned-emaonly.vae.pt

来源:modules/sd_vae.py109-115

VAE 加载过程

加载和缓存

VAE 按需加载,并可进行缓存以提高性能。

  1. 加载模型时,系统会解析要使用的 VAE。
  2. 如果 VAE 在缓存中,则从内存加载。
  3. 否则,从磁盘加载。
  4. 加载的 VAE 会应用于模型。
  5. 如果启用了缓存,VAE 将被添加到缓存中。

基础 VAE 管理

系统维护一个“基础 VAE”的概念——即模型自带的原始 VAE。加载自定义 VAE 时,会存储基础 VAE,以便将来需要时可以恢复。

来源:modules/sd_vae.py194-241 modules/sd_models.py535-539

缓存管理

VAE 可能占用大量内存,因此系统包含缓存机制。

  1. 已加载的 VAE 缓存维护在 checkpoints_loaded 中。
  2. 缓存大小由 sd_vae_checkpoint_cache 设置控制。
  3. 当达到缓存限制时,最早的 VAE 会被移除(LRU 策略)。
  4. 切换模型时,缓存有助于避免重新加载频繁使用的 VAE。

来源:modules/sd_vae.py18-21 modules/sd_vae.py198-221

VAE 管理的用户界面

全局 VAE 偏好设置

用户可以在设置中设置全局 VAE 偏好。

  • “自动” - 让系统根据分辨率顺序进行选择。
  • “无” - 使用模型内置的 VAE。
  • 任何特定的 VAE - 无论模型如何,始终使用此 VAE。

每个检查点的 VAE 偏好设置

用户还可以通过用户元数据编辑器为特定检查点设置 VAE 偏好。

这些偏好设置存储在检查点的用户元数据中,并在 VAE 分辨过程中进行查询。

来源:modules/ui_extra_networks_checkpoints_user_metadata.py1-66 modules/sd_vae.py146-157

VAE 继承和分辨率

加载模型时,通过分辨率过程确定其 VAE。

  1. 模型的内置 VAE 被暂时存储为“基础 VAE”。
  2. 分辨率过程确定要使用的 VAE。
  3. 如果选择了自定义 VAE,它将替换内置 VAE。
  4. 基础 VAE 可在需要时恢复(例如,切换回“无”时)。

这种继承系统允许模型使用其内置 VAE 或根据需要采用自定义 VAE。

来源:modules/sd_vae.py39-66 modules/sd_models.py535-539

VAE 重载

当 VAE 偏好设置更改时,系统可以在不重新加载整个模型的情况下重载 VAE。

  1. 如果使用低 VRAM 模式,模型将被暂时移至 CPU。
  2. 模型劫持被撤销。
  3. 加载新的 VAE。
  4. 重新应用模型劫持。
  5. 模型被移回原始设备。

此过程比重新加载整个模型更有效。

来源:modules/sd_vae.py251-283

与模型加载的集成

VAE 管理系统与模型加载过程紧密集成。

  1. 加载模型时,VAE 分辨会自动发生。
  2. 解析出的 VAE 将应用于模型。
  3. 卸载模型时,VAE 状态将被清除。

这种集成确保模型始终具有适当的 VAE 可用于图像生成。

来源:modules/sd_models.py535-539