菜单

量化

相关源文件

本文档解释了 DeepSeek-V3 中使用的量化技术,包括 FP8 量化、块级缩放以及量化操作在推理管道中的集成。有关权重文件结构的信息,请参阅 权重文件结构

DeepSeek-V3 量化概述

DeepSeek-V3 实现了量化,以减少内存占用并加速推理,同时保持模型质量。该系统主要使用 FP8(E4M3)量化和块级缩放,以在性能和精度之间取得平衡。

来源:inference/kernel.py9-52 inference/kernel.py107-191 README_WEIGHTS.md60-93

量化配置

DeepSeek-V3 在模型配置文件中使用专门的配置部分来指定量化参数。

参数描述
quant_methodfp8指定量化方法为 FP8
fmte4m3表示使用 E4M3 格式(4 位指数,3 位尾数)
weight_block_size[128, 128]定义权重量化的块大小
activation_schemedynamic指定动态激活量化

此配置指导了在整个模型的推理过程中如何对权重和激活进行量化。

来源:README_WEIGHTS.md66-75

权重量化

DeepSeek-V3 以 FP8 E4M3 格式存储模型权重,并采用 128x128 的块缩放。每个权重矩阵被划分为多个块,每个块有其自己的缩放因子,存储在 weight_scale_inv 字段中。

反量化实现

权重反量化过程实现在 weight_dequant 函数中,该函数接收量化后的权重及其相应的缩放因子,并输出反量化后的权重。

来源:inference/kernel.py55-105 README_WEIGHTS.md84-91

激活量化

在推理过程中,激活会通过逐 token 每 128 个通道的粒度进行块级缩放,并动态量化。

激活量化实现

激活量化实现在 act_quant 函数中,该函数

  1. 将输入张量划分为 128 大小的块
  2. 计算每个块中的最大绝对值
  3. 将缩放因子派生为 max/448.0
  4. 通过除以缩放因子并将值转换为 FP8 来量化
  5. 返回量化值和缩放因子

来源:inference/kernel.py9-52

FP8 优化矩阵乘法

DeepSeek-V3 实现了一个优化的矩阵乘法内核(fp8_gemm),该内核直接在 FP8 量化数据及其缩放因子上进行操作。

fp8_gemm 函数

  1. 接收两个量化矩阵及其缩放因子
  2. 利用自动调优配置选择最优内核参数
  3. 在应用适当的缩放的同时执行块级矩阵乘法
  4. 以更高的精度(FP32)累积结果
  5. 以默认数据类型(通常是 BF16)返回结果

来源:inference/kernel.py107-191

与推理流水线集成

量化系统与更广泛的 DeepSeek-V3 推理管道集成,实现了模型的高效执行。

整个量化系统与 MoE 和 MLA 组件协同工作,提供优化的推理路径,同时保持模型质量。

来源:inference/kernel.py README_WEIGHTS.md60-93

技术实现细节

Triton JIT 内核

DeepSeek-V3 使用 Triton JIT 编译来创建优化的 GPU 内核以进行量化操作。关键内核包括:

  1. act_quant_kernel:将激活量化为 FP8,并进行块级缩放
  2. weight_dequant_kernel:将权重从 FP8 反量化为更高精度
  3. fp8_gemm_kernel:使用 FP8 精度执行矩阵乘法

自动调优系统会探索多种配置以获得最佳性能。

来源:inference/kernel.py108-111 inference/kernel.py9-52 inference/kernel.py55-105

FP8 E4M3 格式

DeepSeek-V3 使用 FP8 E4M3 格式(torch.float8_e4m3fn),该格式分配

  • 4 位用于指数
  • 3 位用于尾数
  • 1 位用于符号

此格式在精度和范围之间提供了良好的平衡,使其适用于深度学习模型的权重和激活。

来源:inference/kernel.py33-52 README_WEIGHTS.md77-79

性能考量

FP8 量化与块级缩放的使用带来了多项性能优势:

  1. 减少内存占用:FP8 权重的内存占用是 BF16 权重的一半
  2. 更快的内存带宽:更小的权重允许更高效的内存传输
  3. 优化的计算:专门的 FP8 内核针对 GPU 执行进行了优化
  4. 最小的精度损失:块级缩放可在需要时保留数值精度

这些优化对于 DeepSeek-V3 的大型模型(160 亿、2360 亿和 6710 亿参数)尤为重要,能够支持在标准硬件上更高效的推理。

来源:inference/kernel.py README_WEIGHTS.md60-93