本文档解释了 DeepSeek-V3 中使用的量化技术,包括 FP8 量化、块级缩放以及量化操作在推理管道中的集成。有关权重文件结构的信息,请参阅 权重文件结构。
DeepSeek-V3 实现了量化,以减少内存占用并加速推理,同时保持模型质量。该系统主要使用 FP8(E4M3)量化和块级缩放,以在性能和精度之间取得平衡。
来源:inference/kernel.py9-52 inference/kernel.py107-191 README_WEIGHTS.md60-93
DeepSeek-V3 在模型配置文件中使用专门的配置部分来指定量化参数。
| 参数 | 值 | 描述 |
|---|---|---|
| quant_method | fp8 | 指定量化方法为 FP8 |
| fmt | e4m3 | 表示使用 E4M3 格式(4 位指数,3 位尾数) |
| weight_block_size | [128, 128] | 定义权重量化的块大小 |
| activation_scheme | dynamic | 指定动态激活量化 |
此配置指导了在整个模型的推理过程中如何对权重和激活进行量化。
DeepSeek-V3 以 FP8 E4M3 格式存储模型权重,并采用 128x128 的块缩放。每个权重矩阵被划分为多个块,每个块有其自己的缩放因子,存储在 weight_scale_inv 字段中。
权重反量化过程实现在 weight_dequant 函数中,该函数接收量化后的权重及其相应的缩放因子,并输出反量化后的权重。
来源:inference/kernel.py55-105 README_WEIGHTS.md84-91
在推理过程中,激活会通过逐 token 每 128 个通道的粒度进行块级缩放,并动态量化。
激活量化实现在 act_quant 函数中,该函数
DeepSeek-V3 实现了一个优化的矩阵乘法内核(fp8_gemm),该内核直接在 FP8 量化数据及其缩放因子上进行操作。
fp8_gemm 函数
量化系统与更广泛的 DeepSeek-V3 推理管道集成,实现了模型的高效执行。
整个量化系统与 MoE 和 MLA 组件协同工作,提供优化的推理路径,同时保持模型质量。
来源:inference/kernel.py README_WEIGHTS.md60-93
DeepSeek-V3 使用 Triton JIT 编译来创建优化的 GPU 内核以进行量化操作。关键内核包括:
act_quant_kernel:将激活量化为 FP8,并进行块级缩放weight_dequant_kernel:将权重从 FP8 反量化为更高精度fp8_gemm_kernel:使用 FP8 精度执行矩阵乘法自动调优系统会探索多种配置以获得最佳性能。
来源:inference/kernel.py108-111 inference/kernel.py9-52 inference/kernel.py55-105
DeepSeek-V3 使用 FP8 E4M3 格式(torch.float8_e4m3fn),该格式分配
此格式在精度和范围之间提供了良好的平衡,使其适用于深度学习模型的权重和激活。
来源:inference/kernel.py33-52 README_WEIGHTS.md77-79
FP8 量化与块级缩放的使用带来了多项性能优势:
这些优化对于 DeepSeek-V3 的大型模型(160 亿、2360 亿和 6710 亿参数)尤为重要,能够支持在标准硬件上更高效的推理。
刷新此 Wiki
最后索引时间2025年4月17日(4cc625)