DeepSeek-V3 中的推理管道提供了高效的模型推理所需的组件和流程。本文档详细介绍了用于 FP8/BF16 计算的优化内核、令牌生成过程以及整体推理工作流。有关底层模型架构的信息,请参阅模型架构。
DeepSeek-V3 推理管道旨在为现代硬件上的高效文本生成而设计。它包含多个协同工作的专用组件,以优化推理过程。
图示:DeepSeek-V3 推理管道概览
来源: inference/kernel.py1-191 inference/generate.py1-185
推理管道利用专用的 Triton JIT 内核进行高效的 GPU 计算,实现在 kernel.py 文件中。
激活量化将激活张量的精度从更高的精度(如 BF16)降低到 FP8 格式,从而在保持准确性的同时提高了计算效率。
图示:激活量化过程
act_quant 函数接收一个输入张量并执行分块量化,同时返回 FP8 格式的量化张量和缩放因子张量。
权重反量化通过应用存储的缩放因子将量化后的权重恢复到其原始精度。
图示:权重反量化过程
weight_dequant 函数接收量化权重张量及其对应的缩放因子,并生成一个反量化张量。
FP8 矩阵乘法是一种优化操作,它以 FP8 精度输入执行矩阵乘法,并应用缩放因子以获得准确的结果。
图示:FP8 矩阵乘法
fp8_gemm 函数使用 FP8 精度执行矩阵乘法。
内核通过各种配置进行自动调优,以找到给定矩阵维度的最佳参数。
| 参数 | 可能的值 |
|---|---|
| BLOCK_SIZE_M | 16, 32, 64 |
| BLOCK_SIZE_N | 32, 64, 128 |
| NUM_STAGES | 3, 4, 5, 6 |
| NUM_WARPS | 8(固定) |
来源: inference/kernel.py107-191
文本生成组件负责根据输入提示生成输出令牌,实现在 generate.py 文件中。
图示:文本生成过程流程
来源: inference/generate.py30-78
文本生成过程的核心是 generate 函数,它
生成过程的关键参数
| 参数 | 描述 |
|---|---|
| model | Transformer 模型实例 |
| prompt_tokens | 每个提示的令牌序列列表 |
| max_new_tokens | 要生成的最大 token 数 |
| eos_id | 结束序列令牌 ID |
| temperature | 控制令牌采样的随机性 |
来源: inference/generate.py30-78
sample 函数实现基于温度的采样机制来选择令牌。
对于确定性生成,将温度设置为 0 会导致函数选择概率最高的令牌。
来源: inference/generate.py14-27
推理管道支持两种操作模式:
图示:推理操作模式
交互模式:
批处理模式:
这两种模式都使用相同的底层 generate 函数,但在输入收集和结果呈现方式上有所不同。
来源: inference/generate.py81-158
推理管道支持跨多个 GPU 进行分布式操作。
torch.distributed)。来源: inference/generate.py100-107 inference/generate.py156-158