NVIDIA 公布了三种在 DGX Spark 上加快语言模型响应生成的优化方法。据该公司公布的数据,在使用完整题集的评测中,生成吞吐量提高了 42.5%,平均延迟降低了 24.5%,为开发者调整本地推理环境提供了比较基准。
1. 降低专家计算和输出层的读取负担
评测对象是 Inclusion AI 的 Ling-3.0-flash-fp4。这是一种仅选择部分专家参与计算的 MoE 模型,在总计 1,240 亿个参数中,每个 token 激活 51 亿个参数。在 DGX Spark 上以逐个处理请求的批大小 1 进行分析后发现,token 生成受限于权重读取速度。
主要开销来自专家计算和计算各词汇得分的输出层。NVIDIA 替换了执行计算的内核,也就是在 GPU 上执行运算的程序,并压缩输出层权重,以降低每步的读取负担。在此基础上,再加入预先提出多个 token 并一次性验证的推测解码,减少生成所需的步骤数。
2. 同时应用内核替换和 FP8 输出层
第一种方法是将默认采用 FlashInfer MXFP4 的专家计算路径替换为 Humming 内核,MXFP4 是一种分块 4 位浮点格式。Humming 会根据矩阵大小、数据格式和 GPU 在运行时编译内核,并保存以供复用。据该公司介绍,单个内核的编译只需数秒,而默认路径编译 97 个目标需要数十分钟。
第二种方法是在配置时,仅将已保存模型中采用 BF16 格式的输出层转换为更小的 FP8 格式,前者是 16 位浮点数据表示,后者是 8 位浮点数据表示。输出层在每个生成 token 上都要读取对应 157,184 个词汇的全部权重,改为 FP8 后,该层的读取量减半。模型其余部分的量化设置保持不变。
基准配置采用权重 4 位、激活值 8 位的设置,并使用以 FP32 输出得分的路径。FP8 输出层用于替代这条路径。
这一组合在降低每步成本和减少生成步骤数的同时,也增加了首次使用内核时的编译与保存流程,以及草稿验证计算。采用时需要同时考察 token 生成收益与这些准备、验证成本。
3. 内置预测层生成草稿,主模型负责检查
Ling-3.0-flash 的 NEXTN 预测层用于预测下一个 token 候选,无需额外训练或下载即可用于生成草稿。草稿依次提出三个 token 后,主模型会同时检查四个位置,并从前往后接受匹配的部分。这种方式可通过一次检查确定多个 token。
据该公司公布的数据,一次验证的成本约为常规生成一步的 2.26 倍。在批大小为 1 时,专家激活的负担大于读取此前 token 的缓存信息的成本。常规生成每个 token 使用 8 个专家,而验证四个位置时最多会激活 32 个专家。
要同时使用 FP8 输出层和推测解码,必须配置草稿模型,使其不仅共享主模型的输出层权重,还共享整个模块。如果未共享模块,FP8 权重就会被按 BF16 解读,导致一次接受的长度降至 1.00 个 token,速度可能比优化前更慢。
4. 合成测试中的逐步累积效果显著
NVIDIA 在 DGX Spark 上针对输入 32K token、输出 2K token 的合成任务,依次加入各项方法。据该公司公布的数据,全部采用三种方法后的吞吐量为每秒 102.88 个 token,比基准配置提高了 185.1%。
表:合成任务的累积优化结果
条件:NVIDIA DGX Spark,Ling-3.0-flash-fp4,输入 32K、输出 2K token,批大小 1,贪心解码,推测配置 steps=3 / topk=1 / draft_tokens=4
单位:每 token 耗时 ms,吞吐量 token/秒,增幅 %
| 配置 | 每 token 耗时 | 吞吐量 | 相对基准的增幅 |
|---|---|---|---|
| 基准配置 | 27.71 | 36.09 | — |
| 加入 Humming | 25.35 | 39.45 | +9.3 |
| 加入 FP8 输出层 | 22.76 | 43.94 | +21.7 |
| 加入推测解码 | 9.72 | 102.88 | +185.1 |
该测试选择概率最高的 token,生成重复性输出。推测解码每次平均接受 3.90 个 token,从而一次确定多个 token。
5. 完整题集评测中吞吐量提高了 42.5%
GSM8K 全部 1,319 道题的评测采用了 5 个示例和解题过程生成。两种配置的采样、答案解析、随机种子和内存分配保持一致,据该公司公布的数据,基准配置的平均输出长度为 567 个 token,优化后为 607 个 token。
表:GSM8K 完整评测的基准配置与优化配置
条件:NVIDIA DGX Spark,Ling-3.0-flash-fp4,GSM8K 1,319 道题,批大小 1,5 个示例、生成解题过程,温度 0.6、累积概率(通过累加 token 概率确定的阈值)0.95、排名靠前的 token(高概率候选 token)29、最大输出 32,768 个 token
| 指标 | 基准配置 | 采用三种方法 |
|---|---|---|
| 每 token 耗时(ms) | 26.45 | 18.56 |
| 解码吞吐量(token/秒) | 37.81 | 53.89 |
| 准确率(%) | 96.89 | 96.82 |
| 平均延迟(秒) | 15.21 | 11.49 |
| 首个 token 平均耗时(秒) | 0.207 | 0.214 |
据该公司公布的数据,准确率没有出现统计上可检测的变化。该评测按概率选择 token,输出长度的中位数约为 310 个 token,比合成测试更短。每次接受的 token 也平均只有 2.68 个,这解释了两项测试提升幅度的差异。
采用决策的关键不在于合成测试的最高提升幅度,而在于使用接近部署环境的输入和输出,确认三种优化的组合效果。
