一. 常见节点类型与作用
节点按照功能大致可以分为以下几类:
1. 加载模型节点
-
Checkpoints Loader:加载
.ckpt
或.safetensors
模型,输出模型检查点(Model Checkpoint)。 -
VAE Loader:加载对应的 VAE 文件。
-
CLIP Loader:加载用于文本编码的 CLIP 模型。
2. 文本提示节点
-
CLIP Text Encode:将用户输入的 Prompt 编码为语义向量(Text Condition),可作为生成条件。
-
CLIP Text Encode (Negative):负向提示词,用于去除不希望生成的元素。
3. 采样节点
-
KSampler:图像采样器,接收模型、提示、初始噪声等,生成最终图像。
-
KSampler (Advanced):带更多可控参数的采样版本。
4. 噪声和图像节点
-
Empty Latent Image:创建空白的潜空间图像张量(latent),用于起始输入。
-
Noise:生成随机噪声。
-
Latent to Image:将生成的 latent 图像解码为可见图像。
-
Image to Latent:将实际图像转换为 latent 表示。
5. 图像处理节点
-
Resize Image:改变图像分辨率。
-
Crop Image:裁剪图像。
-
Load Image / Save Image:读取/保存图像文件。
6. 控制模块
-
ControlNet Loader:加载 ControlNet 模型。
-
Apply ControlNet:在图像生成中应用 ControlNet 条件。
-
T2I Adapter:另一种控制模块,用于风格/姿态控制。
二. 节点之间的数据类型传递
不同节点之间的连接线,传递的是特定类型的数据:
数据类型 | 说明 | 常见来源 | 常见去向 |
---|---|---|---|
Model Checkpoint | 主模型结构及权重 | Checkpoints Loader | KSampler |
CLIP Text Condition | 文本提示的向量表示 | CLIP Text Encode | KSampler |
Latent Image | 潜空间图像(未解码) | Empty Latent Image / KSampler | Latent to Image |
Image | 普通 RGB 图像 | Load Image / Latent to Image | Resize / Save Image |
Noise | 随机噪声 | Noise 节点 | KSampler |
VAE | 解码器/编码器模型 | VAE Loader | Latent to Image 等 |
ControlNet Condition | 条件图像等 | Apply ControlNet | KSampler |
Prompt | 文本字符串 | 用户输入 | CLIP Text Encode |
三. 常见模型格式
1. .safetensors
(安全张量)
-
开发者:由 Hugging Face 团队推出。
-
优点:
-
安全:不使用 Python
pickle
,防止执行恶意代码。 -
更快加载:支持零拷贝映射(mmap),加载速度更快。
-
结构简单清晰:专门用于张量权重的存储。
-
-
使用场景:
-
在 Hugging Face、ComfyUI、Diffusers 等生态中日益流行。
-
-
适合谁:推荐在生产或部署时使用,因为它安全、加载快。
2. .ckpt
(Checkpoint)
-
全称:checkpoint,常见于 TensorFlow、PyTorch。
-
来源:Stable Diffusion 早期模型多使用此格式(如
v1-5-pruned.ckpt
)。 -
问题:
-
通常使用 Python 的
pickle
保存,存在代码执行风险。 -
体积通常大,因为可能包含训练中所有模块(如优化器、调度器等)。
-
-
使用场景:
-
原始模型训练中保存断点,或早期模型发布格式。
-
-
适合谁:用于开发调试或旧项目兼容。
3. .pth
(PyTorch权重)
-
来源:PyTorch 官方推荐格式,用于保存
state_dict
。 -
优点:
-
简洁,仅保存模型权重(不包含结构定义)。
-
-
问题:
-
同样依赖 Python
pickle
,存在安全隐患。 -
不跨平台,必须在 PyTorch 中读取。
-
-
使用场景:
-
自己训练的模型中广泛使用。
-
-
适合谁:熟悉 PyTorch 的用户、开发时保存模型权重。
4. .onnx
(Open Neural Network Exchange)
-
来源:微软、Facebook 主导开发的 跨平台格式。
-
优点:
-
跨框架:可在 PyTorch、TensorFlow、ONNX Runtime、NVIDIA TensorRT 等中使用。
-
适合部署:结构与权重同时包含,适合导入推理引擎。
-
-
使用场景:
-
导出模型用于 Web、移动、C++ 等非 Python 环境。
-
-
适合谁:需要模型跨平台部署或优化推理性能的开发者。
5. .gguf
(Grokking General Unified Format)
-
来源:
ggml
系列项目(如 llama.cpp)推出的新格式,继承自.ggml
。 -
目标:用于 轻量化模型的本地推理,尤其适用于 CPU-only 运行、边缘设备。
-
特点:
-
支持量化(如 Q4_0、Q5_K),文件体积小。
-
与 LLaMA、Mistral、Gemma 等 LLM 配合使用。
-
-
使用场景:
-
本地轻量推理(例如在 Mac、树莓派、安卓手机上运行大模型)。
-
-
适合谁:希望在设备端低资源环境中运行 LLM 的用户。
四. 模型的量化与压缩
1. 什么是量化?
在原始训练后的模型中,权重通常是使用 32 位浮点数(float32) 存储的。
而“量化”就是将这些高精度浮点权重,转换为更低位数的整数表示,比如:
类型 | 原始精度 | 压缩后的精度 | 示例 |
---|---|---|---|
FP32(float32) | 32位浮点数 | – | 原始模型 |
Q8 | 8位整数 | 精度略下降 | 常见于轻量推理 |
Q4_0、Q5_K | 4位/5位整数 | 进一步压缩 | gguf 格式中常见 |
2.为什么要量化?
目的 | 效果 |
---|---|
✅ 减少文件体积 | 从几 GB 缩小到几百 MB,适合本地推理(尤其 CPU) |
✅ 提升推理速度 | 整数计算比浮点计算快,适用于边缘设备 |
✅ 降低内存占用 | 低位宽张量占用更少 RAM,可在内存有限设备运行 |
⚠️ 略微精度损失 | 通常影响有限,尤其是在大模型中微不足道 |
3. Q4_0、Q5_K 是什么?
它们是不同的 量化等级/方法,你可以理解为压缩的“清晰度级别”:
量化等级 | 位宽 | 精度 | 文件体积 | 说明 |
---|---|---|---|---|
Q8_0 | 8 位 | 高 | 大 | 精度几乎不变 |
Q5_K | 5 位 | 中 | 中 | 性能和质量折中 |
Q4_0 | 4 位 | 低 | 小 | 极限压缩,精度略降 |
4. 浮点精度降低(压缩) vs 整数量化(量化)
项目 | FP32 ➝ FP16/FP8 | FP32 ➝ INT8 / Q4_0 |
---|---|---|
类型 | 浮点 ➝ 浮点 | 浮点 ➝ 整数 |
是否严格算量化 | ❌ 严格来说不是 | ✅ 是标准量化 |
是否有指数位 | ✅ 有(保留范围) | ❌ 无(线性/分段) |
计算精度 | 比较高,近似 FP32 | 精度低,依赖校准或训练 |
加速平台 | GPU(如 NVIDIA Tensor Cores) | CPU / GPU / 推理芯片 |