1. BF16 和 FP16 的区别是什么两者都是 16 位2 字节的浮点数格式但比特位的分配策略完全不同导致了特性和用途的分野FP16 (Half Precision)1 位符号 5 位指数10 位尾数。特点尾数位多近 1 附近的精度更高但指数位少动态范围小约5.96×10−85.96 \times 10^{-8}5.96×10−8到655046550465504。痛点训练时梯度或激活值容易超出范围溢出 NaN 或下溢为 0通常需要配合“损失缩放Loss Scaling”使用。BF16 (Brain Floating Point)1 位符号 8 位指数7 位尾数。特点指数位与 FP32 完全一致动态范围与 FP32 相同约1.4×10−451.4 \times 10^{-45}1.4×10−45到3.4×10383.4 \times 10^{38}3.4×1038不易溢出但尾数位少精度比 FP16 低。优势训练稳定性极佳是目前大模型训练的主流默认格式。简单说FP16 重“精度”BF16 重“范围/稳定性”。2. FP8 是浮点数和INT8FP8 是 8 位1 字节的浮点数格式。它不是单一标准通常有 E4M34 指数3 尾数和 E5M25 指数2 尾数两种主流变体。其核心优势在于极致的效率提升显存减半相比 FP16/BF16模型权重显存占用直接降低 50%。吞吐翻倍在支持 FP8 Tensor Core 的硬件如 NVIDIA H100/Blackwell上FP8 矩阵运算GEMM的吞吐量通常是 FP16 的 2 倍。抗离群值相比于同是 8 位的 INT8定点整数FP8 因为有指数位天然拥有更大的动态范围对大模型激活值中常见的离群值Outliers更鲁棒量化精度损失更小。无论是 FP8 还是 INT8它们底层都只有 8 个比特bit所以确实只能表示282562^8 25628256个不同的数值codewords。但这 256 个数字的分布规律不同这正是 FP8 在大模型中表现优于 INT8 的核心原因INT8整数均匀分布的 256 个点INT8 将范围比如 -128 到 127线性等分。无论数值是大是小相邻两个数之间的间隔分辨率是固定的。问题如果权重中存在几个特别大的“离群值”Outliers在大模型中很常见为了覆盖这些大数线性间隔会被迫拉大导致普通大小的数值量化时精度损失严重四舍五入误差大。FP8浮点非均匀分布的 256 个点浮点数的设计是“科学计数法”它把 256 个坑位倾斜分配了接近 0 的区域分配了更多的码字间隔很小高精度适合表示大多数密集的普通权重。远离 0 的大数区域分配了较少的码字间隔很大低精度但足够“接住”偶尔出现的离群值而不至于溢出。以 E4M3 格式为例它能表示的最大值约为 448而 INT8 最大是 127前者的动态范围更大。虽然都是 256 个数但INT8 是“平均主义”大家间隔一样FP8 是“贫富不均”小数更准大数也能凑合表示。在处理分布不均匀的大模型参数时FP8 的这种非均匀特性显然更懂模型的“脾气”。3. Fine-grained FP8 quantization (block size 128) 如何实现传统的量化Per-tensor是整个矩阵共用一个缩放因子Scale容易因局部极值导致整体精度下降。细粒度量化Fine-grained / Block-wise的核心思想是**“分块量化每块独立缩放”**分块将大的权重矩阵或激活张量切分成更小的块。对于 block size 1281D 块常用于激活每连续的 128 个元素为一个块如 shape 为[..., 128]。2D 块常用于权重每128x128个元素为一个块如 shape 为[128, 128]。计算 Scale对每个块独立计算其缩放因子通常是max_abs_value / FP8_max_range通常以 FP32 存储以保证精度。量化块内的每个元素除以该块专属的 Scale然后转换为 FP8 存储。计算在进行矩阵乘法时取出对应块的 FP8 值和 Scale计算FP8值 × Scale还原或在硬件层面直接融合计算。这种方式通过“局部自适应”的缩放极大缓解了量化误差是 DeepSeek-V3 等模型能在 FP8 精度下保持高性能的关键技术之一。4. “BF16 数据FP32 精度计算”的混合精度策略。NVIDIA 的“计算模式” (Tensor Core 角度)在 NVIDIA 的一些架构文档或 cuBLAS 设置中有时会提到“BF32”作为一种计算模式Compute Mode。它的逻辑是输入是 BF16节省带宽和显存但计算时会把尾数补零提升到 FP32 的精度再进行乘加运算。目的既享受了 BF16 的数据传输和存储效率又几乎拥有 FP32 的计算精度因为指数位本来就和 FP32 一样。这可以看作是“用 BF16 的内存跑近似 FP32 的计算”。Intel 的 TMUL 单元 (AMX 技术)在 Intel 第四代至强可扩展处理器Sapphire Rapids引入的 AMX高级矩阵扩展中有一个特殊的tdpbf16ps指令。这个指令的操作数通常是BF16但它内部的累加器Accumulator是FP32的。有时候在工业界交流中这种“BF16 输入、FP32 累加”的单元或数据类型也会被简称为 BF32 模式。