copy z_image-fp8-e4m3fn.safetensors to ComfyUI/models/diffusion_models


z-image_02138_

z-image_02128_

z-image_02135_


FP8 主要有两种业界标准格式,它们名字的后缀代表了其内部比特位的分配方式,这直接决定了它们的特性和用途。

这两种格式分别是:

  1. E4M3 (float8_e4m3fn)
  2. 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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for aifeifei798/ComfyUI-z_image-fp8

Base model

Comfy-Org/z_image
Finetuned
(4)
this model