Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:cuda:数据类型

CUDA的数据类型

float32应该是计算最快的?


低精度float(fp8/fp4)

fp8/fp4都是低精度浮点数格式(floating point formats),用于加速推理过程、降低内存带宽和显存占用
从存储位数角度,它们的确就占8位/4位

格式 总位数 结构(通常) 是否浮点数
FP32 32 1位符号 + 8位指数 + 23位尾数
FP16 16 1 + 5 + 10
FP8 8 常见有两种格式(E5M2和E4M3)
FP4 4 通常是1位符号 + 3位数值/指数 是/伪浮点或量化近似

存在的意义是什么?
训练的时候不会用这么低的精度,但是推理的时候可以转化成这种低精度使用:

  1. 不是直接训练用FP8/FP4,而是使用称为量化(Quantization)的方式,把FP16/FP32训练好的模型“压缩”成FP8或FP4;
  2. 推理中会用更复杂的 量化感知技巧(如GPTQ、AWQ、SmoothQuant等),尽可能保留原始数值的分布特性;
  3. 一些关键层(如注意力的缩放因子)会保留为FP16或INT8,提高稳定性;
  4. 最新的GPU(如NVIDIA Hopper架构)支持原生FP8硬件加速(如NVIDIA H100支持FP8 TensorCore),处理速度非常快;

TF32

为什么TF32这么「奇怪」?
AI回答:

  1. TF32 只用了 19 个 bit 来表示有效信息(1 符号 + 8 指数 + 10 尾数);
  2. 但它依然占 32 bit 的存储和数据通道带宽;
  3. 这是为了:
    1. 兼容 FP32 数据格式(硬件级);
    2. 充分复用 NVIDIA Tensor Cores 上的 FP32 乘加矩阵路径;
    3. 在牺牲部分精度的同时,大幅提升速度和吞吐量(训练更快)。
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/cuda/数据类型.txt · Last modified: 2025/08/09 14:24 by zhonghui