检查点系统负责管理、加载和切换不同的 Stable Diffusion 模型检查点(也称为权重文件)。该系统负责发现磁盘上的检查点文件、将它们加载到内存中,并进行优化以实现高效的资源利用。有关 VAE 管理的详细信息,请参阅 VAE 管理。
Stable Diffusion Web UI 支持多种模型架构(SD1、SD2、SDXL、SSD、SD3),每种架构都需要不同的权重文件。检查点系统提供了一种统一的方式来处理这些模型文件,无论其内部结构如何。它会自动检测模型类型,应用适当的优化,并以最小的内存开销管理模型切换。
来源: modules/sd_models.py784-875
每个检查点都由 CheckpointInfo 类表示,该类存储有关检查点文件的元数据。
主要属性包括
filename:检查点文件的完整路径name:用于显示的相对路径或基本名称hash:用于标识的快速哈希(sha256 的前 8 个字节)sha256:用于精确标识的完整 SHA256 哈希title:UI 中显示的名称,包含哈希metadata:附加信息(用于 safetensors 格式)ids:可用于引用此检查点的标识符列表来源: modules/sd_models.py56-128
系统在几个位置搜索检查点文件
models/Stable-diffusion/)--ckpt_dir 命令行选项指定的自定义目录--ckpt 指定的特定检查点路径检查点发现是在 list_models() 函数中实现的,该函数填充了
checkpoints_list:一个将标题映射到 CheckpointInfo 对象的字典checkpoint_aliases:一个将各种 ID 映射到 CheckpointInfo 对象的字典来源: modules/sd_models.py153-179
加载检查点涉及几个步骤
此顺序由 load_model() 和 reload_model_weights() 函数处理。
select_checkpoint() 函数确定要加载哪个检查点
来源: modules/sd_models.py218-240
get_checkpoint_state_dict() 函数加载权重值
来源: modules/sd_models.py332-347 modules/sd_models.py312-329
load_model_weights() 函数将权重应用于模型
来源: modules/sd_models.py410-539
检查点系统实现了多种内存优化策略
系统可以将多个模型检查点保留在内存中
sd_checkpoint_cache 设置控制checkpoints_loaded) 来跟踪已加载的检查点控制模型精度以平衡质量和内存使用
--no-half)适应各种 GPU VRAM 容量的不同模式
检查点系统与 VAE 系统集成
load_model_weights() 函数调用 sd_vae.load_vae() 来在加载模型后应用适当的 VAE。
来源: modules/sd_models.py535-539 modules/sd_vae.py132-234
检查点可以包含用户定义的元数据,包括
此元数据与检查点文件分开存储,并可以通过 UI 进行编辑。
来源: modules/ui_extra_networks_checkpoints_user_metadata.py1-66
系统通过检查关键模式自动检测状态字典中的模型类型
来源: modules/sd_models.py379-402
检查点系统为代码库的其他部分提供了几个关键功能
get_closet_checkpoint_match():按名称查找检查点model_hash():为检查点标识生成快速哈希reload_model_weights():高效地切换到新的检查点apply_token_merging():应用 token 合并优化该系统被以下部分使用
来源: modules/sd_models.py183-200 modules/sd_models.py940-1008
系统支持两种主要的检查点格式
格式根据文件扩展名自动检测。