Skip to main content

精度

  • 精度 Precision
typebytedynamic训练中常见用途GPU支持性
FP648极高(~10³⁰⁸)科学计算、极端精度需求,极少用于DL训练较弱,性能低
FP324高(~10³⁸)中小型模型训练,混合精度中的关键操作广泛支持
FP162低(~10⁴)大模型训练(需损失缩放),推理优化Tensor Core 加速
BF162高(~10³⁸)大模型训练主流,数值稳定A100/H100 优化
INT81低(~10²⁵)量化推理,极小模型训练较弱,性能低
INT40.5低(~10¹²)量化推理,极小模型训练较弱,性能低
  • FP64 - Double Precision 双精度
  • FP32 - Single Precision 单精度
  • FP16 - Half Precision 半精度
  • BF16 / Bfloat16
    • Brain Floating Point 16-bit
    • by Google Brain
    • 保留了 FP32 的指数范围(8位指数),减少尾数(7位)
  • Float
    • s 符号位(Sign bit)
    • e 指数(Exponent)
    • m 尾数(Mantissa,或称为有效数/分数)
FP=(1)s×2eBias×(1+m)\text{FP} = (-1)^s \times 2^{e-\text{Bias}} \times (1 + m)
  • 1 + m
    • 更明确地分开隐含位(1)和存储的小数部分(m)
FP32=(1)s×2e127×(1+m)\text{FP32} = (-1)^s \times 2^{e - 127} \times (1 + m)

量化

  • 量化 - Quantization
    • 降低精度
    • 减少内存占用和计算需求
    • 例如 FP32,FP16 -> INT8 [-128, 127], INT4 [-8, 7], BIT1.5, FP16, BF16
  • 量化的负面效果
    • 可能导致模型准确性下降
    • 限制某些特定任务的表现
    • 需要额外的调优以恢复性能
    • 例如: 推理模型进入无限循环
  • 参照指标
    • MMMU_VAL (Accuracy)
    • DocVQA_VAL (Accuracy)
    • MMBench_DEV_EN (Accuracy)
    • MathVista_MINI (Accuracy)
qbitsB->G
q4_K_M41x
q8_082x
fp16164x
  • K-quantizations
    • S, M, L
  • PTQ - Post Training Quantization - 训练后量化
  • QAT - Quantization Aware Training - 量化感知训练
  • AWQ - Adaptive Weight Quantization
  • GPTQ - Generalized Post-Training Quantization - 通用后训练量化
    • 逐层重构输出,最小化量化误差 (基于二阶信息)
  • GPTQ - Generalized Post-Training Quantization - 通用后训练量化
  • CLAQ - Column-Level Adaptive weight Quantization - 列级自适应权重量化
  • vllm
    • aqlm,awq,deepspeedfp,tpu_int8,fp8,ptpc_fp8,fbgemm_fp8,modelopt,nvfp4,marlin,bitblas,gguf,gptq_marlin_24,gptq_marlin,gptq_bitblas,awq_marlin,gptq,compressed-tensors,bitsandbytes,qqq,hqq,experts_int8,neuron_quant,ipex,quark,moe_wna16,torchao
methodbitsnotes
aqlm2, 3, 4加法量化,据称在低位数下表现良好。
awq4Activation-aware Weight Quantization,一种流行的 4 位量化方法。
deepspeedfp8/16DeepSpeed 提供的浮点量化支持,可能包括 FP8, FP16 等。
tpu_int88针对 Google TPU 优化的 INT8 量化。
fp888 位浮点数表示,有不同的格式 (如 E4M3, E5M2)。
ptpc_fp88Post-Training Per-Channel FP8 量化。
fbgemm_fp88使用 FBGEMM (Facebook General Matrix Multiply) 库的 FP8 量化。
modelopt多种NVIDIA Model Optimizer,支持包括 INT4, INT8, FP8 在内的多种量化方案。
nvfp44NVIDIA 提出的 FP4 格式,用于超低精度推理。
marlin4针对 NVIDIA GPU 的 GPTQ 优化内核,通常用于 4 位量化。
bitblas1-8高度优化的位级 GEMM 操作库,支持多种位宽。
gguf2-8+Georgi Gerganov Universal Format,常用于 llama.cpp,支持多种量化级别 (如 q2_K, q3_K_S, q4_0, q4_K_M, q5_K_M, q6_K, q8_0)。
gptq_marlin_244结合了 GPTQ 和 Marlin 的优化,针对特定配置 (如24个样本的校准)。
gptq_marlin4GPTQ 算法与 Marlin 内核的结合,用于高效的 4 位推理。
gptq_bitblas4GPTQ 算法与 BitBLAS 内核的结合。
awq_marlin4AWQ 算法与 Marlin 内核的结合。
gptq2, 3, 4, 8Post-Training Quantization 方法,常用于 3 位或 4 位量化。
compressed-tensors多种通用术语,指用于减小模型大小的压缩张量技术,可能包含多种量化方法。
bitsandbytes8, 4 (NF4)流行的量化库,支持 8 位量化和 4 位 NormalFloat (NF4) 等。
qqq2, 3, 4可能是指特定的量化库或算法,位数需要具体确认。
hqq2, 3, 4Half-Quadratic Quantization,一种较新的量化方法,旨在平衡精度和压缩率。
experts_int88针对 MoE (Mixture of Experts) 模型中的 Experts 部分进行 INT8 量化。
neuron_quant8, 16针对 AWS Inferentia/Trainium (Neuron) 芯片的量化。
ipex8Intel Extension for PyTorch,支持 INT8 量化等针对 Intel CPU 和 GPU 的优化。
quark2, 4一种据称能保持较高准确率的低位量化方法。
moe_wna1616针对 MoE 模型的权重和激活使用 16 位量化 (可能是 FP16 或 BF16)。
torchao多种PyTorch Applied Overlap,一个用于模型优化的库,支持包括量化在内的多种技术。具体位数取决于所使用的量化算法。
  • bnb - bitsandbytes
  • otfq - Optimized Tensor Float Quantization
    • 8-bit, 4-bit, 2-bit