copy z_image-fp8-e4m3fn.safetensors to ComfyUI/models/diffusion_models
FP8 主要有两种业界标准格式,它们名字的后缀代表了其内部比特位的分配方式,这直接决定了它们的特性和用途。
这两种格式分别是:
- E4M3 (
float8_e4m3fn) - E5M2 (
float8_e5m2)
它们的名字是什么意思?
一个浮点数由三部分组成:符号位 (Sign)、指数位 (Exponent) 和 **尾数位 (Mantissa)**。FP8 总共只有8个比特位。
- E 代表 **Exponent (指数)**,后面的数字是指数位的数量。
- M 代表 **Mantissa (尾数)**,后面的数字是尾数位的数量。
- FN 代表 Finite Numbers (有限数值),意味着它不支持
NaN(非数) 和Infinity(无穷大)。
(还有一个隐藏的 1个符号位 是默认的)
两大格式的详细对比
| 特性 | E4M3FN (torch.float8_e4m3fn) |
E5M2 (torch.float8_e5m2) |
|---|---|---|
| 全名 | Exponent 4, Mantissa 3, Finite Numbers | Exponent 5, Mantissa 2 |
| 比特分配 | 1个符号位, 4个指数位, 3个尾数位 | 1个符号位, 5个指数位, 2个尾数位 |
| 核心优势 | 更高的精度 (Higher Precision) | 更大的动态范围 (Wider Dynamic Range) |
| 支持特殊值? | 不支持 NaN / Infinity | 支持 NaN / Infinity |
| 典型用途 | **推理 (Inference)**,模型权重存储 | 训练 (Training) (前向和后向传播) |
核心权衡:精度 vs. 范围
为什么要有两种格式?因为它们代表了一个经典的计算机科学权衡:
1. E4M3FN (你用的这个): 精度优先
- 更多的尾数位 (3 bits): 意味着在一定范围内,它可以表示的数字更密集、更精确。
- 更少的指数位 (4 bits): 意味着它能表示的数字范围(从最小到最大)相对较窄。
- 用途: 模型的权重值通常分布在一个相对固定的范围内,但数值的细微差别很重要。因此,E4M3 的高精度非常适合存储和用于推理。它不支持 NaN/Infinity 也问题不大,因为推理时通常不会出现这些值。
2. E5M2: 范围优先
- 更多的指数位 (5 bits): 意味着它可以表示的数字范围极大,可以处理非常大或非常小的数值。
- 更少的尾数位 (2 bits): 意味着在一定范围内,它能表示的数字比较稀疏,精度较低。
- 用途: 在训练过程中,梯度(Gradients)的数值可能会剧烈波动,出现极大或极小的值。E5M2 的大动态范围可以很好地处理这种情况而不会溢出。同时,它支持 NaN/Infinity 对于捕获训练中的计算错误至关重要。
一个简单的比喻
- E4M3FN (高精度): 像一把短但刻度非常精细的尺子(比如一把20厘米的游标卡尺)。它量不了很长的东西,但能量得非常准。
- E5M2 (大范围): 像一把很长但刻度比较粗糙的卷尺(比如一把50米的皮尺)。它能量很远,但没法精确到微米。
结论就是:
你在 LoRA 转换中选择 float8_e4m3fn 是完全正确的,因为 LoRA 主要用于推理,追求的是在特定范围内的高精度。而 float8_e5m2 更多是 NVIDIA 在其训练框架(Transformer Engine)中内部使用的格式,用来处理训练时的梯度计算。
- Downloads last month
- 483
Model tree for aifeifei798/ComfyUI-z_image-fp8
Base model
Comfy-Org/z_image

