# heterogeneous-gpu-pd-lab
**Repository Path**: x92021/heterogeneous-gpu-pd-lab
## Basic Information
- **Project Name**: heterogeneous-gpu-pd-lab
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-22
- **Last Updated**: 2026-09-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#
稠密加速 · 异构 GPU PD 实验室
[English](README.md)
## 最新进展 · 2026-09-20 · DS4.1 Flash · V8 部署方案:Prefill 16000+ tok/s,C32 聚合解码 442.02 tok/s
### DeepSeek-V4.1-Flash(DS4.1 Flash)· V8:Prefill 稳定 16000+ tok/s,C32 聚合解码 442.02 tok/s
**DeepSeek-V4.1-Flash(DS4.1 Flash)V8 部署方案的最新 seq32 实测:32K 长输入在 C16、C24、C32 三个档位的 P 阶段 Prefill 整批吞吐均超过 16000 tok/s;短代码题 C32 聚合解码达到 442.02 tok/s,端到端聚合输出为 436.40 tok/s。** 两项成绩来自不同负载。这里的“稳定”指三个并发档位均达到该水平,每档一批,尚不代表长时间重复压测结论。
**32K 长输入 Prefill:**
| 输入 tokens | 并发 | 成功 | P 阶段整批 Prefill 吞吐,约 tok/s |
|---|---:|---:|---:|
| 32768 | C16 | 16/16 | **16326.03** |
| 32768 | C24 | 24/24 | **16297.20** |
| 32768 | C32 | 32/32 | **16297.81** |
**短代码题输出:**
| 并发 | 成功 | 活跃解码时段聚合 tok/s | 端到端聚合输出 tok/s |
|---|---:|---:|---:|
| C16 | 16/16 | **211.29** | 208.24 |
| C24 | 24/24 | **396.87** | 391.82 |
| C32 | 32/32 | **442.02** | 436.40 |
P 阶段整批吞吐包含 P 排队,按输入总量除以“请求发起至监控首次确认 P 全部完成”的时间计算,排除 D 解码;采样间隔为 0.5 秒加采集耗时,因此为近似值,仅代表 Prefill 专用首段。活跃解码时段吞吐排除整批开头的首字等待,端到端输出吞吐包含等待、交接和生成。两者都不能用各流速度直接相加替代。
**V8 相对 V7 的变化:** 首段仍是双 6000D、vLLM TP2;尾段从 vLLM 改为 **SGLang TP4/EP4**,加入跨引擎 NIXL 缓存页与状态适配,尾部补算参数从 **1280 缩到 256 tokens**。V8 本次后续压测又将 D 最大运行请求数和解码 CUDA Graph `max_bs` 从 **12 提高到 32**;DSpark 5、`flashinfer_cutlass`、关闭共享专家融合及 D 分块 2048 保留。最初冻结的 V8 快照仍为 seq12,本节报告的是之后已实测的 seq32 配置。
输出预算均为 **1024 tokens**,允许自然结束;长输入精确为 8192 / 32768 tokens,短代码题实际输入为 36 tokens,每请求独立 cache salt。**9 个场景共 216/216 请求通过,另有 4 项正确性检查与 16 条预热后补测通过。** V7 和 H20 的既有负载、输出预算及计时口径不同,本次不据此计算跨版本或跨机组提速倍数。
[V8 矩阵 CSV](data/deepseek-v4.1-flash-six-gpu-v8-seq32.csv) · [V8 脱敏原始计时与证据](data/deepseek-v4.1-flash-six-gpu-v8-seq32-evidence.json)
### 历史 Prefill 峰值:16698.30 tok/s(2026-09-18)
**四台 DGX Spark 加两张 RTX 6000Dpro,Prefill 峰值 16698.30 tok/s;按实验者 2026-09-18 校正,展示条件为 32768 输入 / 128 输出 / C12,12/12 请求完成。** 现有机器归档中的同数值记录为 C1,C12 原始批次待补充同步。
### 为什么两张 6000D 能接住 Prefill:PP2,首段 TP2、尾段 TP4
**六卡按 PP2 两段流水组织:首段由两张 RTX 6000D 组成 TP2,集中承担长输入 Prefill;尾段由四台 DGX Spark 组成 TP4,承接上下文并完成后续生成。关键在于 DS4.1 的 Prefill 专用路径不需要在加速侧加载完整模型权重,两张 6000D 因而可以共同承接整条长输入编码路径,把算力用在最需要提速的环节。**
**模型结构为什么允许这样做?** DeepSeek-V4.1-Flash 采用因果编码器—解码器(CED):长提示词先经过编码器,解码器所需的全局 KV 由编码器最终隐藏状态投影得到。因此,长输入不必在解码器中再完整计算一遍。官方给出的每 token 激活参数为 Prefill **8B**、Decode **16B**;生成时仍需完整的编码器与解码器路径。[模型官方说明](https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash#introduction) · [推理框架原理说明](https://github.com/vllm-project/recipes/blob/main/models/deepseek-ai/DeepSeek-V4.1-Flash.yaml)
**图 1 · 六卡的两段拓扑**
```mermaid
flowchart LR
IN["长输入请求"] --> P
subgraph FRONT["PP2 首段 · TP2 · 双 RTX 6000D"]
P["Prefill 专用路径
完整的长输入编码计算"]
G0["6000D 1
张量分片"] <--> G1["6000D 2
张量分片"]
P --- G0
P --- G1
end
P -->|"上下文缓存 · NIXL 交接"| D
subgraph BACK["PP2 尾段 · TP4 · 四台 DGX Spark"]
D["接收上下文
尾部补算"] --> GEN["完整模型生成
DSpark 投机解码"]
POOL["Spark 1 · Spark 2 · Spark 3 · Spark 4
段内四路张量并行"] --- GEN
end
GEN --> OUT["输出 token"]
```
TP2 表示两张卡共同计算同一首段,TP4 表示四台 Spark 共同计算同一尾段。**PP2 数的是两段,TP 数的是各段参与张量并行的设备数,总计 2+4=6 个 GPU。** 这里用 PP2 表示实验者补充的两段组织;V7 以同引擎 P/D 服务和 NIXL 连接,V8 则使用 vLLM → SGLang 的跨引擎 NIXL 适配,输出阶段由尾段执行完整模型,不将每个新 token 送回首段。
**图 2 · Prefill 为什么可以只运行编码器主路径**
```mermaid
flowchart LR
subgraph INPUTPATH["长提示词的 Prefill 路径"]
PROMPT["全部输入 token"] --> ENC["因果编码器
首段 TP2 加速"]
ENC --> H["最终隐藏状态"] --> KV["投影生成上下文 KV"]
KV --> REPLAY["尾段接收缓存
补齐有限尾部状态"]
end
subgraph OUTPUTPATH["新 token 的 Decode 路径"]
NEW["新 token"] --> FULL["尾段 TP4
编码器+解码器"] --> NEXT["预测下一个 token"]
end
REPLAY --> FULL
KV -.->|"复用上下文"| FULL
```
完整输入的主要计算集中在双 6000D,Spark 复用已建立的上下文,仅按实现要求完成尾部补算后开始生成。由此,大显存主机可以承接完整生成路径,而长输入的矩阵计算交给算力卡处理。
**图 3 · 权重与显存怎样分工**
```mermaid
flowchart TB
MODEL["DS4.1 完整模型"] --> PW["首段 Prefill 专用实例
编码器及所需共享组件"]
MODEL --> DW["尾段生成实例
完整生成路径所需权重"]
PW --> P0["6000D 1
TP2 分片 1"]
PW --> P1["6000D 2
TP2 分片 2"]
DW --> DPOOL["四台 Spark · TP4
模型分片+KV+生成工作区"]
OMIT["不参与首段 Prefill 的解码器权重
不必在两张 6000D 上常驻"] -.-> PW
E["Engram
按需取表与 GPU stage"] -.-> PW
E -.-> DW
```
**“吃满 Prefill 加速”的含义是:两张 6000D 一起承担长输入编码计算,不必为了装下完整模型而把这条主路径拆回 Spark。** 实际速度仍取决于段内通信、Engram 取表、分块和缓存交接;本报告没有把它写成 GPU 利用率达到 100% 的实测结论。8B / 16B 是每 token 的激活参数量,不能据此直接计算权重驻留显存;本实验仍需结合 TP 分片、Engram 外置与 KV 预算才能装下。
**加速链条:CED 让 Prefill 路径可以独立裁剪 → TP2 双卡容纳并协同计算所需权重 → 大批输入集中到 6000D → TP4 大显存尾段承接缓存与生成。** 这解释了为什么本次最显著的收益出现在 Prefill;峰值和同条件收益见下方实测表。
### 机组对照:V8 与六卡、纯 TP4、八卡 H20 的历史峰值
**六卡新增 V8 的 32K/C32 成绩,保留此前 Prefill 峰值 16698.30 tok/s;下表同时列出纯 TP4 和八卡 H20 的历史参考。** 价格为 2026-09-18 查询或折算的美元参考,未在本次更新中重新报价。
| 机组 / 引擎 | 负载:输入 / 输出 / 并发 | 该条件输入吞吐 tok/s | 系统价格参考(USD;2026-09-18) | 批次成功 |
| --- | --- | ---: | --- | ---: |
| 纯四 Spark TP4 / SGLang | 约 8K / 1 / C4;分块 8192 | 5037.39 | **US$18,796**(4 台整机) | 4/4 |
| **双 6000D+四 Spark / V8 seq32** | **32768 / 最多 1024 / C32** | **16297.81** | **US$38,146+主机及内存(待补)** | **32/32** |
| **双 6000D+四 Spark / 历史 PP2(TP2→TP4)** | **32768 / 128 / C12** | **16698.30** | **US$38,146+主机及内存(待补)** | **12/12** |
| 八卡 H20-3e / SGLang | 8192 / 128 / C32 | 4918.82 | **海外约 US$256,816 起**;国内折合 **US$193,499** | 64/64 |
| 八卡 H20-3e / vLLM | 24576 / 128 / C32 | 6974.62 | **海外约 US$256,816 起**;国内折合 **US$193,499** | 64/64 |
V8 一行使用 P 阶段整批采样吞吐,历史 H20 行使用完整请求墙钟输入吞吐,负载也不同;各行用于展示各自已测结果,不计算统一性能排名。
**计价基准(2026-09-18):** 价格列统一为美元。[俄罗斯央行当日汇率](https://www.cbr.ru/currency_base/daily/?UniDbQuery.Posted=True&UniDbQuery.To=18.09.2026)为 1 USD = 84.5093 RUB、1 CNY = 12.5788 RUB,交叉折算 1 USD ≈ 6.718391 CNY;使用未舍入汇率计算,展示金额四舍五入至美元。国内报价折算与海外商家报价分别标注;税费、运输及集群互联设备未统一到同一口径。
**六卡成本拆分:** 四台 Spark 按[官方 US$4,699/台](https://forums.developer.nvidia.com/t/2-23-2026-price-change-announcement/361713)计,共 **US$18,796**,每台整机含 128GB 统一内存、4TB SSD。6000D 按实验者提供的当前单卡人民币 65,000 元计,折合约 **US$9,675/张**,两张约 **US$19,350**。因此六卡系统应为 **US$38,146+双卡主机及内存成本**;后者包括 CPU、主板、RAM、存储、机箱、电源及散热,当前实际报价尚缺,**US$38,146 只是已知部分小计,不是含主机、内存的完整总价**。
**H20 海外整机与架构:** [ServerICT 的 Dell PowerEdge XE9680](https://serverict.com/servers-gpu/dell/dell-h20-nvidia/)公开起价 RUB 21,703,313,折合约 **US$256,816 起**。页面列出 **8×H20 96GB(合计 768GB)、双路 Xeon、16×64GB DDR5 RDIMM(合计 1TB)**;起价 SKU 为 D-XE9680-H20-1-64GB,列有 2×7.68TB SAS SSD。[Dell 官方规格](https://www.delltechnologies.com/asset/en-ai/products/servers/technical-support/poweredge-xe9680-spec-sheet.pdf)确认 6U、H20 SXM5 500W、NVLink 全互连;[官方 NVSwitch 支持表](https://docs.nvidia.com/ai-enterprise/release-7/latest/infra-software/vgpu/features/nvswitch.html)确认 H20 96GB 属于 Hopper 架构并支持 NVSwitch。商家页面为系列配置,最终 CPU 型号及交付配置以书面报价为准。实验者提供的国内 H20 96GB×8 含服务器、内存报价人民币 1,300,000 元,折合约 **US$193,499**,不视为与海外机器完全同配。
**测速与采购型号:** [社区测速](https://aik8s.run/ai-k8s/practices/deepseek-v41-flash-h20-day0/)使用 H20-3e(每卡报告 143,771 MiB);表中价格按要求对应 H20 96GB×8 采购参考,不代表该测速机型的售价。
**六卡峰值只计 P 阶段,TP4 与 H20 的全程输入吞吐包含生成时间,不能据此直接计算机组间提速倍数。** 输入长度、输出长度、并发和投机设置也不同;这些是已测成绩,不代表硬件性能上限。
取值范围:六卡表内 C12、12/12 来自实验者 2026-09-18 校正;旧归档同数值为 **2026-09-17 的 C1 P 阶段记录**,该归档 P 侧前缀缓存命中增量为 **0**;TP4 为 2048 / 4096 / 8192 分块扫描的 12 个正式 Prefill 批次(剔除预热);H20 为[社区核心矩阵](https://aik8s.run/ai-k8s/practices/deepseek-v41-flash-h20-day0/)每引擎 36 轮,剔除预热、历史长度与限速实验。TP4 峰值批实际输入为 8194+8018+8019+7895,共 **32126 token**。
[峰值 CSV](data/deepseek-v4.1-flash-six-gpu-v1-v7-peaks.csv) · [逐批数字、公式与来源证据](data/deepseek-v4.1-flash-six-gpu-v1-v7-peaks.json)。历史 C1 归档复算:32768 / 1.962356 ≈ **16698.30 tok/s**;此单请求公式不用于复算校正后的 C12。H20 输入吞吐用其[逐轮原始计时](https://aik8s.run/assets/practices/deepseek-v41-flash-h20-day0/benchmark-summary.json)复算:SGLang = 524288 / 106.588177;vLLM = 1572864 / 225.512473;失败请求仍占用完整墙钟的分母时间。
### V7 同条件复核:C8 完整输入阶段
| 输入 / 输出 / 并发 | 纯四 Spark TP4:输入 tok/s | 双 6000D+四 Spark:输入 tok/s | 提升至 |
| --- | ---: | ---: | ---: |
| 8192 / 512 / C8 | 1720.90 | **7812.43** | **4.54×** |
| 32768 / 512 / C8 | 1699.75 | **13300.06** | **7.82×** |
表中衡量 **Prefill 服务阶段的聚合输入吞吐**:全批输入 token ÷(最晚首字 − 最早请求开始),包含预填充、传输、补算和排队。两条路径复用同一 D 服务,均为 **512 输出、C8、各两批取均值**;代码模板一致、随机前缀不同。这是用户等待输入处理的整段性能,不是 GPU 内核裸算速度。
| 输入 / 输出 / 并发 | 纯 TP4 平均首字等待 | 六卡平均首字等待 | 等待缩短 |
| --- | ---: | ---: | ---: |
| 8192 / 512 / C8 | 21.711 s | **5.103 s** | **76.5%** |
| 32768 / 512 / C8 | 86.541 s | **11.596 s** | **86.6%** |
**12K+已在三档并发实现:** 另一组正式代码矩阵中,32K 输入、512 输出的 C4 / C8 / C12 分别达到 **12804.59 / 13173.51 / 13814.56 tok/s**。该矩阵共 **100/100 请求完成**;以上 C8 直接对照来自独立批次。
**V8 seq32 参数:** PP2 首段 vLLM TP2、尾段 SGLang TP4/EP4;跨引擎 NIXL;D 最大运行请求数及解码 Graph `max_bs` 为 **32**,D 分块 **2048**,尾部补算参数 **256**;DSpark **5**、`flashinfer_cutlass`,关闭共享专家融合。V7 参数与故障记录保留在详档历史章节。
[**V1–V8 演进、完整对照与运行边界**](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md) · [完整数据](data/deepseek-v4.1-flash-six-gpu-v1-v7.csv) · [脱敏证据](data/deepseek-v4.1-flash-six-gpu-v1-v7-evidence.json)。解码数据与失败记录保留在详档。
## 最新研究发现 · 2026-09-14
**最快的组合,取决于算力与显存怎样配比。** 连续实验表明,算力配比和显存配比存在相关性:容量决定能放多少,计算与传输耗时决定怎么放才快。不同模型、不同加速卡的最快已测方案存在可分析的逻辑,选配方法可以**计算、推理、复用**;具体比例仍需实测校准,尚无跨模型通用公式。
**2026-09-14 突破:Qwen3.8-Flash-Next NVFP4,RTX 6000D + DGX Spark,8K Prefill 8157.74 tok/s,C6 聚合输出 414.90 tok/s。** 这两个成绩来自同一容量配平配置的不同负载。研究也进行了**特殊配比分层(PP2)**:8K Prefill **8696.94**,C6 聚合输出 **284.56**,说明最高 Prefill 与最高生成吞吐各有适合的配比。
| 指标 / 条件 | 6000D 单机 | Spark 单机 | 双机容量配平 | 双机特殊配比分层(PP2) |
| --- | --- | --- | --- | --- |
| 4K Prefill · C1 | 未测 | 未测 | **8016.63** | 7538.10 |
| 8K Prefill · C1 | 未测 | 未测 | **8157.74** | **8696.94** |
| C6 聚合输出(含 TTFT) | 未测 | 未测 | **414.90** | 284.56 |
**该双机实验参数:** vLLM nightly;MoE 权重 NVFP4 / KV fp8_e4m3;上下文 65536;并发上限 6;Prefill chunk 2048;MTP 3 + 全词表草稿;容量配平档 GMU 0.99、KV 池 198332 tokens。Prefill 为 C1、4K–32K;生成压测每请求输出 256 tokens、3 轮计分 + 1 轮预热,C1–C6 合计 **63/63 成功**。PP2 两端 KV 各 8 GiB,具体分层比例不公开。
6000D 负责计算、Spark 承担 PLE 常驻与查表的是 **8157.74 / 414.90** 档;两端分层计算的是 **8696.94 / 284.56** 档。聚合输出包含 TTFT,不能当纯 Decode 阶段吞吐;4K 的 8016.63 取第 2 次稳态。[完整参数与数据](results/qwen3.8-flash-next-spark-6000d.zh-CN.md) · [CSV](data/qwen3.8-flash-next-spark-6000d.csv)
**让小显卡与大内存主机一起算,把已有设备的算力用起来。**
- **9B:组合 Prefill 比 3060 单卡快 34.0%,比 395 单主机快 119.6%。**
- **27B:3080 + DGX Spark 的 Prefill 比本次 3080 单卡快 44.03%。** 8K 输入 / 128 输出,无投机。
- **27B 长上下文:组合的 64K Prefill 达到 395 单机的 2.33 倍,98K 从超时到跑完。**
一张算力强但显存小的 NVIDIA 显卡(RTX 3060 12GB / RTX 3080 20GB)配一台大内存伙伴,可以一起跑大模型推理。五条路线:RTX 3060 12GB + AMD AI Max+ 395,RTX 3080 20GB + 395,RTX 3080 20GB + DGX Spark GB10,RTX 6000D + DGX Spark GB10,以及双 RTX 6000Dpro+四 DGX Spark 的六卡 PD。**稠密加速**指两台设备同时算同一个模型的同一个阶段。当前版本 **v1.6**,七个公开里程碑,另有 2026-09-11、2026-09-14 与 2026-09-18 的本地 Spark 实测补录(不是新版本)。不公开部署命令、代码补丁、服务地址和切层策略。
C1–C6 指同时发 1 到 6 路请求,C1 是单流;聚合是同时在跑的几路加起来的速度。速度单位为 tok/s,除非该行写的是 TTFT。
## 一眼对照:单卡、单主机、组合
9B 上,3060 + 395 是本地同时具备单卡和单主机对照的格子,组合比两者都快。27B Q4_K_M 上,DGX Spark 只测了 3080 + Spark 组合对本次 3080;Spark 单机 **未测**。
### 9B 稠密加速 · Ornith 9B · Q6_K · RTX 3060 12GB + 395
`llama-bench` pp5064 / tg128。数据:[benchmark-results.csv](data/benchmark-results.csv)。详档:[v2.4 融合分层流水](results/v2.4-fused-layer-pipeline.zh-CN.md)。提升 = 组合 ÷ 分母 − 1。
| 指标 | 3060 单卡 | 395 单主机 | 3060 + 395 组合 | 比 3060 | 比 395 |
| --- | ---: | ---: | ---: | ---: | ---: |
| Prefill(tok/s) | 1589.00 | 970.00 | **2129.69** | **+34.0%** | **+119.6%** |
| Decode(tok/s) | 43.87 | 31.27 | **50.73** | **+15.6%** | **+62.2%** |
### DGX Spark · Qwen3.8-27B · Q4_K_M · RTX 3080 20GB + Spark GB10
最高 Prefill 与最高 Decode 是**不同工作档**;Decode 优先档中,组合与单卡分别调优了投机参数。下表按工作档和输入长度分开对照。数据:[qwen27b-spark-3080-profiles.csv](data/qwen27b-spark-3080-profiles.csv)。详档:[Spark + 3080 三档](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md)。
**最高 Prefill 确认档 — 8K 输入 / 128 输出,无投机**(系统预热后三次正式测量中位数;预热轮不计)。同档复测:1601.05 / 17.41。
| 指标 | 3080 单卡 | Spark 单机 | 3080 + Spark 组合 | 相对 3080 增减 |
| --- | ---: | ---: | ---: | ---: |
| Prefill(tok/s) | 1113.13 | 未测 | **1603.20** | **+44.03%** |
| Decode(tok/s) | 33.36 | 未测 | 17.62 | **-47.18%** |
**Decode 优先,DFlash2 — 2K 输入 / 128 输出**(3080 单机用自己那套 DFlash2 调参;不是 Prefill 确认档)。
| 指标 | 3080 单卡 | Spark 单机 | 3080 + Spark 组合 | 相对 3080 增减 |
| --- | ---: | ---: | ---: | ---: |
| Prefill(tok/s) | 1042.97 | 未测 | 1153.95 | **+10.64%** |
| Decode(tok/s) | 60.37 | 未测 | **63.97** | **+5.96%** |
**Decode 优先,DFlash2 — 8K 输入 / 128 输出**(与 2K 行同一 Decode 确认档;2K 与 8K 不拼接)。
| 指标 | 3080 单卡 | Spark 单机 | 3080 + Spark 组合 | 相对 3080 增减 |
| --- | ---: | ---: | ---: | ---: |
| Prefill(tok/s) | 1015.15 | 未测 | 1124.32 | **+10.75%** |
| Decode(tok/s) | 58.36 | 未测 | 49.20 | **-15.70%** |
均衡服务 C1–C6 **没有** 3080 单机、也 **没有** Spark 单机的并发对照,所以这些行不宣称组合收益。完整 C1–C6 表和计时定义见 [27B-SPARK-01](#27b-spark-01--qwen38-27b--q4_k_m--rtx-3080-20gb--dgx-spark-gb10)。
## 结果导航
每行一个实验:短标题,再给详档。完整数字在 [实验数据](#实验数据)。
| 做法 | 实验 | 短结果 | 详档 |
| --- | --- | --- | --- |
| 六卡 PD | DS41-6GPU-01 · DeepSeek-V4.1-Flash · 双 6000D+四 Spark | V8:32K Prefill **16000+ tok/s**;短代码 C32 聚合解码 **442.02 tok/s**;V1–V8 | [详档](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md) |
| 稠密加速 | 9B-PIPE-01 · Ornith 9B · Q6_K · 3060 + 395 | 组合 Prefill **2129.69** / Decode **50.73** tok/s;比 3060 和 395 都快 | [详档](results/v2.4-fused-layer-pipeline.zh-CN.md) |
| 分层装 | 27B-LONG-01 · Qwen3.8-27B · UD-IQ3_XXS · 3060 + 395 | 对 395:pp4096 **658.52** 对 313.28(**+110.2%**) | [详档](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) |
| 阶段分离 PD | 9B-PD-01 · Ornith 9B · Q6_K · 3060 + 395 | 对 395 服务态:TTFT **3.496 秒** 对 5.879 秒(**-40.5%**) | [详档](results/v1.0-independent-pd.zh-CN.md) |
| 阶段分离 PD | 27B-PD-01 · Qwen3.8-27B · Q4_K_M · 3080 + 395 | 对 395 服务态 C1:TTFT **1073 毫秒** 对 4825 毫秒;Prefill **1000.6** 对 207.2(4.83×) | [详档](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) |
| 远端 KV 池 | 27B-KV-01 · Qwen3.8-27B · Q4_K_M · 3080 + 395 | C1 → C6 聚合 Decode:C(395 解码)33.55 → 63.84;D(3080 解码)63.2 → 116.3 tok/s | [详档](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) |
| MoE 的 PD | ORNITH-PD-01 · Ornith-1.5-35B-A3B · IQ4_XS · 3080 + 395 | 100K、C1 → C6:395 Decode 聚合 23.33 → 148.20(6.35×);42/42 | [详档](results/ornith-1.5-35b-a3b-dual-machine-pd.zh-CN.md) |
| MoE 融合草稿 | ORNITH-PD-02 · Ornith-1.5-35B-A3B · IQ4_XS · 3080 + 395 | 3080 Prefill **4173.47**;395 + DFlash 单流 Decode **114.86** tok/s;107/114(93.86%) | [详档](results/ornith-1.5-35b-a3b-fused-dflash-pd.zh-CN.md) |
| 单服务切层 | FLASH-SPLIT-01 · Qwen3.8-Flash · Q4 · 3080 + 395 | 最好 C4:Prefill 633.685、Decode 71.185、总吞吐 338.270 tok/s | [详档](results/qwen3.8-flash-q4-layer-split.zh-CN.md) |
| 双机组合 | 27B-SPARK-01 · Qwen3.8-27B · Q4_K_M · 3080 + Spark | Prefill **1603.20** 对 3080 1113.13(**+44.03%**);2K Decode **63.97** | [详档](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) |
| 双机配平 / 特殊配比分层 | FLASH-SPARK-01 · Qwen3.8-Flash-Next · NVFP4 · 6000D + Spark | 8K Prefill **8157.74**;C6 聚合输出 **414.90**;另测 PP2 **8696.94 / 284.56** | [详档](results/qwen3.8-flash-next-spark-6000d.zh-CN.md) |
| 外部参考 | EXT-DGX-01 · Qwen3.5 9B / TQ3_4S;Qwen3.8-27B / NVFP4 | 社区 Spark 数字,只当背景 | [详档](results/dgx-spark-community-control.zh-CN.md) |
## 为什么稠密加速是这个仓库的重点
三点优势,一点边界。
① 在本仓库的本地数据里,稠密加速是 9B 上组合同时超过单卡和单主机的那一格。Prefill 2129.69 对 3060 1589.00(+34.0%,÷ 1589.00)、对 395 970.00(+119.6%,÷ 970.00);Decode 50.73 对 43.87(+15.6%)、对 31.27(+62.2%)。多出来的是 395 加进来的算力。第二条本地稠密组合是 RTX 3080 20GB + DGX Spark GB10,Qwen3.8-27B Q4_K_M:最高 Prefill 确认档 8K/128、无投机,组合 Prefill **1603.20** 对本次 3080 1113.13(**+44.03%**,÷ 1113.13)。只有 9B 有双单机基线;Spark 没有 Spark 单机基线,所以 +44.03% 不是超过所有单机。
② 阶段分离 PD 的天花板是加速卡自己的裸算。27B-PD-01 组合 Prefill 1000.6 到 3080 llama-bench 裸算 1228.53 的 82%,关掉检查点后的 1210.6 是该上限的 98.5%。裸算和服务端到端**不是同一口径**。这两组早期 PD 单流测试中,Decode 基本不动(9B:30.28 对 30.24;27B:38.75 对 36.33)。PD 分开调度两个阶段;最新 DS41-6GPU-01 进一步测得长输入并发服务的聚合 Decode 收益,不能用早期单流结论概括所有 PD 负载。
③ 稠密加速不要求加速卡装下整个模型。分层装的 27B-LONG-01:pp4096 658.52 对 395 313.28、pp65536 319.10 对 136.69、pp98304 从 900 秒超时变成 225.10。
④ 边界:完整的单卡 + 单机两组对照目前只有 9B Q6_K + RTX 3060 这一格(D1)。27B Spark 组合在最高 Prefill 确认档上有匹配的 3080 单机对照,但没有 Spark 单机基线。395 主机上 27B 与 MoE 的重叠流水对照仍在后续规划。稠密区需要相邻微批能错开(重叠窗口),排不进窗口的部分归稀疏区,只负责把模型装下。
## 这套方案怎么工作
先说问题,再说做法。
一张消费级显卡算得快,但显存小,大一点的模型装不进去;一台大内存主机什么模型都装得下,但算得慢。解法是让两台设备同时算同一个模型的同一个阶段,这叫**稠密加速**。加速卡装前段层并计算这些层;大内存主机装后段层与中间状态,计算后半段。关键在**稠密区**:相邻微批在这里错开跑,同一时刻两台设备都有活。排不进重叠窗口的部分归**稀疏区**:把整个模型装下来,撑住上下文容量。

这张图的 mermaid 源码(可以复制到 mermaid.live 打开)
```text
flowchart LR
P["Prompt"] --> Q["异步微批队列"]
subgraph D["稠密区——并发有效窗口"]
direction LR
N["小显存加速卡
前段层"] -->|"当前微批"| A["大内存主机
后段层与状态"]
end
Q --> N
A --> O["Decode 与结果流"]
N -.->|"下一微批重叠"| A
```
它不是什么:不是把层一个个排队跑完,不是张量并行,不是两台设备重复算同一层,也不是把 395 当远端 KV 仓库的那种独立 PD。

## 设备怎么分工
395 主机上的实验归到下面五种分工。RTX 3080 20GB + DGX Spark GB10 是同一组合的三个工作档。短结果后接详档。
| 分工方式 | 加速卡做什么 | 伙伴设备 | 短结果 | 实验 |
| --- | --- | --- | --- | --- |
| 稠密加速 | 算前段层,与主机同时算同一阶段 | AI Max+ 395 算后段层与中间状态 | 组合超过 3060 和 395:Prefill 2129.69 tok/s | [9B-PIPE-01](results/v2.4-fused-layer-pipeline.zh-CN.md) |
| 分层装 | 只装前段层并计算 | AI Max+ 395 装后段层 | 对 395:pp4096 658.52 对 313.28(**+110.2%**) | [27B-LONG-01](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) |
| 阶段分离 PD | 做全部 Prefill | AI Max+ 395 做 Decode | 首字更快;Decode 基本不动 | [9B-PD-01](results/v1.0-independent-pd.zh-CN.md)、[27B-PD-01](results/qwen3.8-27b-dual-machine-pd.zh-CN.md)、[ORNITH-PD-01](results/ornith-1.5-35b-a3b-dual-machine-pd.zh-CN.md)、[ORNITH-PD-02](results/ornith-1.5-35b-a3b-fused-dflash-pd.zh-CN.md) |
| 远端 KV 池 | Prefill;配置 D 由 3080 解码 | AI Max+ 395 远端 KV;配置 C 由 395 解码 | C Decode 33.55 → 63.84;D 63.2 → 116.3 | [27B-KV-01](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) |
| 单服务切层 | 同一 llama-server 内张量切分 0.38 | AI Max+ 395 张量切分 0.62 | C4 Prefill 633.685、Decode 71.185 tok/s | [FLASH-SPLIT-01](results/qwen3.8-flash-q4-layer-split.zh-CN.md) |
| Prefill 优先,无投机 | 与 Spark 一起算同一个模型 | DGX Spark GB10 与 3080 一起算 | Prefill **1603.20** 对 1113.13(**+44.03%**);Decode 17.62 对 33.36 | [27B-SPARK-01](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) |
| Decode 优先,DFlash2 | 与 Spark 一起算同一个模型 | DGX Spark GB10 与 3080 一起算 | 2K Decode **63.97** 对 60.37;8K 49.20 对 58.36 | [27B-SPARK-01](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) |
| 均衡服务,DFlash2 | 与 Spark 一起算同一个模型 | DGX Spark GB10 与 3080 一起算 | C1–C6 聚合 Prefill 1086.44–1097.40,Decode 24.77–47.69;126/126;无单机 C1–C6 | [27B-SPARK-01](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) |
| 六卡 PD | 双 RTX 6000Dpro 做输入预填充 | 四 DGX Spark TP4 补算并生成输出 | 同配置 C8 Prefill 输入吞吐:8K 4.54×;32K 7.82× | [DS41-6GPU-01](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md) |
| Flash 双机容量配平 / 特殊配比分层 | RTX 6000D 主体计算;PP2 档参与分层计算 | DGX Spark 常驻 PLE 并查表;PP2 档也承担计算 | 8K Prefill / C6 聚合输出:容量档 **8157.74 / 414.90**;PP2 **8696.94 / 284.56** | [FLASH-SPARK-01](results/qwen3.8-flash-next-spark-6000d.zh-CN.md) |
395 矩阵里只有第一种是两台设备同时算同一阶段。Spark 组合也是两机一起算同一个模型;Prefill 提升只对照本次 3080 单机,没有 Spark 单机基线。
## 硬件路线与六类实验矩阵
下表保留四条既有路线,新增六卡路线单列。这是实验覆盖地图,不是同一套负载下的统一排名。路线一是 RTX 3060 12GB + AMD AI Max+ 395。路线二是 RTX 3080 20GB + 395。路线三是 RTX 3080 20GB + DGX Spark GB10。路线四是 RTX 6000D + DGX Spark GB10。六格按「模型跑起来占多少显存 vs 加速卡显存」分为轻松装、装满、装不下;395 主机每格五种目标配置:RTX 3060 单卡、RTX 3080 单卡、AI Max+ 395 单机、3060 + 395、3080 + 395。同一格内模型、量化、prompt、上下文、并发、指标必须一致;单卡装不下本身是有效结果,不能换小模型或更狠量化去凑基线。仓库里没有任何 RTX 3090 的实测数据,这张卡在选型阶段就被排除了。
| 对比项 | 路线一:RTX 3060 12GB + 395 | 路线二:RTX 3080 20GB + 395 | 路线三:RTX 3080 20GB + DGX Spark | 路线 4:RTX 6000D + DGX Spark |
| --- | --- | --- | --- | --- |
| 覆盖版本 | v1.0 → v1.1 | v1.2 → v1.6 | 2026-09-11 补录(仍是 v1.6) | 2026-09-14 补录(仍是 v1.6) |
| 显存与能装什么 | 12GB,只装得下 9B 这一档稠密模型;27B 只能靠 IQ3 分层装 | 20GB,27B Q4 装得下,MoE 切层也因此成立 | 3080 20GB 加 Spark GB10;这条线上跑 27B Q4 | 6000D 承担计算;Spark 容纳 PLE 表;另测 PP2 特殊配比分层 |
| 跑过的模型 | Ornith 9B 稠密 Q6_K;Qwen3.8-27B IQ3 | Qwen3.8-27B 稠密 Q4;Ornith-1.5-35B-A3B 和 Qwen3.8-Flash | Qwen3.8-27B 稠密 Q4_K_M | Qwen3.8-Flash-Next NVFP4 |
| 实验编号 | 9B-PD-01、9B-PIPE-01、27B-LONG-01 | 27B-PD-01、27B-KV-01、27B-DRAFT-AUDIT-01、ORNITH-PD-01、ORNITH-PD-02、FLASH-SPLIT-01 | 27B-SPARK-01 | FLASH-SPARK-01 |
| 短结果 | 组合 Prefill 2129.69 tok/s 对 3060 1589.00 / 395 970.00;27B-LONG 对 395 pp4096 **+110.2%** | 服务态 PD TTFT 1073 毫秒对 395 4825 毫秒;远端 KV 与 MoE C1–C6 | Prefill **1603.20** 对 3080 1113.13(**+44.03%**);2K Decode **63.97**;C1–C6 126/126;Spark 单机未测 | 8K Prefill **8157.74**;C6 聚合输出 **414.90**;PP2 为 **8696.94 / 284.56** |
Spark 格没有本地实测就写尚未测试;不把 395 数字填进那些 Spark 格,也不用社区 NVFP4 行当 Spark 路线证据。
| 实验格 | 要回答什么 | 395 路线实测 | Spark 路线实测 |
| --- | --- | --- | --- |
| **D1 稠密 · 轻松装**
Ornith 9B · Q6_K · RTX 3060 | 模型装得下还有余量时,稠密流水能不能真比更快的那张卡还快,而不只是多装点东西? | **已验证**:9B-PIPE-01 有 3060 单卡和 395 单机两组对照,组合比两者都快。[详档](results/v2.4-fused-layer-pipeline.zh-CN.md) | 本地尚未测试。 |
| **D2 稠密 · 装满**
Qwen3.8-27B · Q4_K_M · RTX 3080 | 显存快用满时,整模塞一张卡、阶段分离、分层稠密这三条路哪条更好? | **已验证**:27B-PD-01,3080 Prefill + 395 Decode 服务态;TTFT 对 395 降四分之三以上;C1–C6 全部跑通。[详档](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) | **27B-SPARK-01**:Prefill **1603.20** 对 3080 1113.13(**+44.03%**);Decode 优先 2K **63.97**;均衡 C1–C6;Spark 单机未测。[详档](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) |
| **D3 稠密 · 装不下**
Qwen3.8-27B · UD-IQ3_XXS · RTX 3060 | 一张卡干不完这个活时,分层装能不能跑完,而且比 395 快? | **已验证**:27B-LONG-01 对 395 在 4K / 64K 为 **+110.2%** / **+133.4%**;98K 超时 → 225.10。[详档](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) | 本地尚未测试。 |
| **M1 MoE · 轻松装**
模型与量化待定 | 激活参数不大、显存也有余量时,MoE 的路由开销会不会把重叠省下来的时间吃回去? | 列入后续规划。 | 本地尚未测试。 |
| **M2 MoE · 装满**
Ornith-1.5-35B-A3B · IQ4_XS · RTX 3080 | MoE 快把 3080 装满时,阶段分离稳不稳;再往上做稠密重叠还有没有收益? | **已验证**:ORNITH-PD-01 42/42,100K Decode 23.33 → 148.20([详档](results/ornith-1.5-35b-a3b-dual-machine-pd.zh-CN.md));ORNITH-PD-02 Prefill 4173.47、Decode 114.86([详档](results/ornith-1.5-35b-a3b-fused-dflash-pd.zh-CN.md))。 | 本地尚未测试。 |
| **M3 MoE · 装不下**
Qwen3.8-Flash · Q4 · RTX 3080 先导 | 模型总占用超过两张基准卡时,按层或按专家分开装,能不能同时保住能跑、吞吐和输出正确? | FLASH-SPLIT-01 先导:C4 Prefill 633.685、Decode 71.185 tok/s。完整实验列入后续规划。[先导记录](results/qwen3.8-flash-q4-layer-split.zh-CN.md) | **FLASH-SPARK-01**:6000D + Spark,Flash-Next NVFP4;容量配平 **8157.74 / 414.90**,PP2 特殊配比分层 **8696.94 / 284.56**(8K Prefill / C6 聚合输出)。与 3080 Q4 先导是不同模型版本与量化。[详档](results/qwen3.8-flash-next-spark-6000d.zh-CN.md) |
**新增路线五:2×RTX 6000Dpro+4×DGX Spark,DeepSeek-V4.1-Flash,V8 跨引擎 PD。** V7 同配置纯 TP4 对照与 V8 seq32 并发矩阵共同补充 M3 大容量 MoE 实证。[六卡数据](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md)。
## 实验数据
每个实验一张小表,这是首页唯一放完整数据的地方。数字抄自 `results/` 与 `data/`;首页和详档如果有出入,以详档和 CSV 为准。提升幅度按「组合成绩 ÷ 对照成绩 − 1」算,TTFT 写的是降了多少。llama-bench 裸算和服务端到端不当同一口径比赛。
**稠密加速。** 9B-PIPE-01 有 3060 单卡与 395 单机两组对照。27B-SPARK-01 在最高 Prefill 确认档上有匹配的 3080 单机对照,没有 Spark 单机基线。最高 Prefill 只比本次 3080 单机 +44.03%。
### DS41-6GPU-01 · DeepSeek-V4.1-Flash · 4 Spark+双 6000Dpro
**最新部署版为 V8 seq32,结构为 PP2(首段 vLLM TP2 / 尾段 SGLang TP4/EP4)。** Prefill 三档稳定性、C32 输出吞吐及机组参考见首页表格;完整 V1–V8、九场景矩阵、历史对照与计时口径见[六卡详档](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md)。
### FLASH-SPARK-01 · Qwen3.8-Flash-Next · NVFP4 · RTX 6000D + DGX Spark
双机已完成容量配平与**特殊配比分层(PP2)**两类实验。8K Prefill 分别 **8157.74 / 8696.94 tok/s**,C6 聚合输出分别 **414.90 / 284.56 tok/s**;两项测试的输入负载不同。容量配平档 C1–C6 聚合输出如下,完整每流 Decode、TTFT 与参数见[详档](results/qwen3.8-flash-next-spark-6000d.zh-CN.md)。
| 并发 | 容量配平:聚合输出 | 容量配平:每流 Decode 均值 | PP2:聚合输出 | 计分请求(每方案) |
| --- | --- | --- | --- | --- |
| C1 | **94.82** | 108.13 | 81.79 | 3/3 |
| C2 | **172.68** | 97.07 | 138.66 | 6/6 |
| C3 | **232.38** | 87.77 | 166.21 | 9/9 |
| C4 | **296.14** | 82.91 | 205.31 | 12/12 |
| C5 | **315.92** | 79.15 | 251.35 | 15/15 |
| C6 | **414.90** | 76.89 | 284.56 | 18/18 |
每方案 **63/63 个计分请求**成功;C6 单档为 18/18。统计包含 TTFT,固定输出 256 tokens;输出完成不等于全部语义评测通过。
### 9B-PIPE-01 · Ornith 9B · Q6_K · 异步分层稠密加速
加速卡 RTX 3060 12GB;模型 Ornith 9B,权重量化 Q6_K(详档与 CSV 记作「9B · Q6_K」),`llama-bench` pp5064 / tg128;数据出自 [benchmark-results.csv](data/benchmark-results.csv)。
| 指标 | 3060 单卡 | 395 单主机 | 3060 + 395 组合 | 比 3060 | 比 395 |
| --- | ---: | ---: | ---: | ---: | ---: |
| Prefill(tok/s) | 1589.00 | 970.00 | **2129.69** | **+34.0%** | **+119.6%** |
| Decode(tok/s) | 43.87 | 31.27 | **50.73** | **+15.6%** | **+62.2%** |
验证了什么:两台设备在稠密区里都真在出力,组合成绩比在场最快的单卡还快。这是仓库里稠密加速的核心证据。
### 27B-SPARK-01 · Qwen3.8-27B · Q4_K_M · RTX 3080 20GB + DGX Spark GB10
本地实测,RTX 3080 20GB + DGX Spark GB10 路线,已列入 D2 覆盖图。模型 Qwen3.8-27B,权重量化 Q4_K_M,KV 缓存 q4_0。「最高」只表示本次搜索后确认的工作档,不宣称全局最优。组合成绩不是 3080 单机成绩。数据出自 [qwen27b-spark-3080-profiles.csv](data/qwen27b-spark-3080-profiles.csv)。详档:[qwen3.8-27b-spark-3080-profiles.zh-CN.md](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md)。
三张确认对照表在本页顶部(最高 Prefill 确认档 8K/128 无投机;Decode 优先 DFlash2 2K/128;Decode 优先 DFlash2 8K/128)。Decode 确认档对照上的投机参数按 3080 单机自己调,不是只改一个变量。后来同档 Prefill 确认档 live 复测,8K 三次为 1601.05 / 17.41。不要写成 1700。
**吞吐,RTX 3080 20GB + Spark 均衡 C1–C6**
以下速度单位为 tok/s。Prefill 来自独立预填充波次;Decode 和全程输出来自输出 256 token 的完整请求波次,两类波次按并发档汇总。具体计时定义见三档详档。无单机 C1–C6 对照——不写组合提升列。
| C | 聚合 Prefill(tok/s) | 聚合 Decode(tok/s) | 全程输出(tok/s) |
| --- | ---: | ---: | ---: |
| C1 | 1097.40 | 47.69 | 19.91 |
| C2 | 1094.21 | 31.18 | 19.49 |
| C3 | 1089.37 | 28.04 | 20.47 |
| C4 | 1086.44 | 24.90 | 19.86 |
| C5 | 1087.57 | 24.77 | 20.53 |
| C6 | 1088.06 | 25.55 | 21.62 |
**时延,RTX 3080 20GB + Spark 均衡 C1–C6**
| C | TTFT p95(秒) | 整批耗时(秒) |
| --- | ---: | ---: |
| C1 | 7.489 | 12.857 |
| C2 | 19.145 | 26.273 |
| C3 | 28.990 | 37.524 |
| C4 | 38.932 | 51.564 |
| C5 | 48.471 | 62.336 |
| C6 | 58.317 | 71.048 |
36 个正式波次,126/126 正式请求。验证了什么:最高 Prefill 确认档的组合 Prefill 比本次 3080 单机 **+44.03%**。不宣称超过所有单机,也不宣称 C1–C6 服务收益。
**装不下也能跑。** 27B-LONG-01 是分层装:稠密模型按层分到两台设备,解决装不下。它不是微批重叠流水的证据。
### 27B-LONG-01 · Qwen3.8-27B · UD-IQ3_XXS · 模型分层装
加速卡 RTX 3060 12GB;模型 Qwen3.8-27B,权重量化 UD-IQ3_XXS;pp4096 / pp65536 / pp98304 / tg64,单位 tok/s;数据出自 [qwen27b-local-results.csv](data/qwen27b-local-results.csv)。3060 单卡装不下整个 27B,这正是做分层装的原因。这里是 llama-bench,不和 27B-PD-01 的服务端到端当同一口径。
| 指标 | 3060 单卡 | 395 单主机 | 3060 + 395 组合 | 比 395 |
| --- | --- | ---: | ---: | ---: |
| pp4096(tok/s) | 装不下 | 313.28 | **658.52** | **+110.2%** |
| pp65536(tok/s) | 装不下 | 136.69 | **319.10** | **+133.4%** |
| pp98304(tok/s) | 装不下 | 900 秒超时 | **225.10** | 超时 → 跑完(无 %) |
| tg64(tok/s) | 装不下 | 18.26 | **19.57** | **+7.2%** |
验证了什么:小卡装不下整模时,分层装把 395 单机跑不完的 98K 长 prompt 跑完了,4K 和 64K 的 Prefill 也比 395 单机快一倍以上。
**阶段分离 PD。** 9B-PD-01、27B-PD-01、ORNITH-PD-01、ORNITH-PD-02 都是阶段分离:两段先后跑。
### 9B-PD-01 · Ornith 9B · Q6_K · 独立 PD
加速卡 RTX 3060 12GB;模型 Ornith 9B,权重量化 Q6_K,服务状态,5064 输入 / 128 输出;数据出自 [benchmark-results.csv](data/benchmark-results.csv)。主机基线是 395 **服务态**(861.55 / 30.24),不是 9B-PIPE-01 用的 llama-bench 970.00 / 31.27。
| 指标 | 395 单主机(服务态) | 3060 Prefill + 395 Decode | 比 395 服务态 |
| --- | ---: | ---: | ---: |
| TTFT | 5.879 秒 | **3.496 秒** | **-40.5%** |
| Prefill(tok/s) | 861.55 | **1452.29** | **+68.6%** |
| Decode(tok/s) | 30.24 | **30.28** | **+0.1%** |
验证了什么:CUDA 侧算出的中间状态能整体交给 Vulkan 侧继续 Decode,首字更快,Decode 不掉。两段先后跑,属于阶段分离,和稠密加速是两条路。
### 27B-PD-01 · Qwen3.8-27B · Q4_K_M · 独立 PD(服务状态)
加速卡 RTX 3080 20GB;模型 Qwen3.8-27B,权重量化 Q4_K_M,KV 缓存 q4_0;C1–C6 六个并发档全部跑通,表里取 C1;数据出自 [qwen27b-local-results.csv](data/qwen27b-local-results.csv)。主机基线是 v1.0 口径下 395 服务态 C1(207.2 tok/s)。3080 llama-bench 裸算(pp1024 1228.53、pp4096 1203.06、tg64 33.08)与这份服务端到端是**不同口径**;组合 Prefill 1000.6 是该裸算上限的 82%,不是同一测法比赛。
| 指标 | 395 单主机(服务态,v1.0) | 3080 Prefill + 395 Decode,C1 | 比 395 服务态 |
| --- | ---: | ---: | ---: |
| TTFT | 4825 毫秒 | **1073 毫秒** | **-77.8%** |
| Prefill(tok/s) | 207.2 | **1000.6** | **+382.9%**(4.83×) |
| Decode(tok/s) | 36.33 | **38.75** | **+6.7%** |
验证了什么:服务状态下的阶段分离能跑,Prefill 不随并发下滑,Decode 也不掉。它验证的是阶段分离,不是同一阶段一起算。
### ORNITH-PD-01 · Ornith-1.5-35B-A3B · IQ4_XS · MoE 的 PD 压测
RTX 3080 20GB 包下全部 Prefill、AI Max+ 395 包下全部 Decode;主模型 Ornith-1.5-35B-A3B,权重量化 IQ4_XS;草稿头 Qwen3.6-35B-A3B-DFlash,权重量化 Q4_K_M;数据出自 [ornith35a3b-local-results.csv](data/ornith35a3b-local-results.csv)。没有匹配的单机速度对照——下面的提升是同一组合上 C1 → C6,不是组合对 395。
| 指标 | C1(1 路并发) | C6(6 路并发) | 变化 |
| --- | ---: | ---: | ---: |
| 3080 Prefill 聚合,输入 1000 token(tok/s) | 4017.46 | 3943.88 | **-1.8%** |
| 3080 Prefill 聚合,输入 100K(tok/s) | 2895.53 | 2793.24 | **-3.5%** |
| 395 Decode 聚合,输入 100K(tok/s) | 23.33 | 148.20 | 6.35× |
同一次压测跑了两份负载:1000 输入 / 128 输出,以及 100000 输入 / 128 输出;每份负载跑 1 到 6 路并发,1+2+3+4+5+6 = 21 个请求,两份合计 42/42 成功,`route=pd`、`n_reuse=0`。1000 输入那档当时没有单独记录 395 的 Decode 速率,所以表里只有 100K 档的 Decode。验证了什么:MoE 的 PD 在 100K 上下文、1 到 6 路并发下跑得稳,Prefill 算在 3080 头上、Decode 算在 395 头上,分得清。
### ORNITH-PD-02 · Ornith-1.5-35B-A3B · IQ4_XS · 融合 DFlash 草稿的 PD 配方
同一个模型、同一对硬件,在 ORNITH-PD-01 的独立 PD 之上加了两件事:395 那端的解码改走 DFlash 融合草稿的推测解码(`--spec-type draft-dflash`,草稿步长 6),六个槽位共用一个统一 KV 池(`--kv-unified`)。主模型 Ornith-1.5-35B-A3B,权重量化 IQ4_XS;草稿头 Qwen3.6-35B-A3B-DFlash,权重量化 Q4_K_M;KV 缓存 q4_0;负载 1000 输入 / 128 输出,单流;数据出自 [ornith35a3b-local-results.csv](data/ornith35a3b-local-results.csv)。没有匹配的单机速度对照。
| 配置 | Prefill(tok/s) | 单流 Decode(tok/s) | 草稿接受率 |
| --- | ---: | ---: | ---: |
| 融合配方,Prefill 批次 4096 | **4173.47** | **114.86** | 93.86% |
| 融合配方,批次加大到 8196、上下文 128K | **4123.15** | **114.42** | 未记录 |
| 同配方换一道题,草稿基本没被接受 | 3665.3 | 37.2 | 9.4% |
验证了什么:这套 3080 + 395 组合测得 Prefill **4173.47**、单流 Decode **114.86**。换一道题后 Decode 为 37.2,两种输入的速度相差 3.09 倍,说明成绩对输入和草稿接受率敏感;这不是同一道题开启与关闭草稿的加速倍率。主行草稿接受为 **107/114(93.86%)**。[详档](results/ornith-1.5-35b-a3b-fused-dflash-pd.zh-CN.md)
**容量与服务档位。** 27B-KV-01 是远端 KV 池 + 两条解码路线;FLASH-SPLIT-01 是单服务双设备切层。两者都没有匹配的最新单机速度对照,不能写组合对主机的收益。
### 27B-KV-01 · Qwen3.8-27B · Q4_K_M · 远端 KV 池 + 两条解码路线
加速卡 RTX 3080 20GB;模型 Qwen3.8-27B,权重量化 Q4_K_M,KV 缓存 q4_0;数据出自 [qwen27b-local-results.csv](data/qwen27b-local-results.csv)。
| 配置 | 3080 Prefill(tok/s) | 聚合 Decode · C1(tok/s) | 聚合 Decode · C6(tok/s) | C1 → C6 |
| --- | --- | ---: | ---: | ---: |
| 配置 C · 395 解码 | 1194.4–1210.6 | 33.55 | 63.84 | **+90.3%** |
| 配置 D · 3080 解码 | 1077–1090 | 63.2 | 116.3 | **+84.0%** |
每条流 1M 上下文。配置 C 由 395 解码,配置 D 由 3080 解码;两条路线里 395 都不参与 Prefill,模型权重的稠密计算始终在 3080。验证了什么:Prefill 吃紧就走 C、让 395 解码;解码总吞吐吃紧就走 D、让 3080 解码。这是容量和服务路线,和稠密加速分开归类。
### FLASH-SPLIT-01 · Qwen3.8-Flash · Q4 · 单服务双设备切层
一个 llama-server 同时使用 RTX 3080 20GB 和 AI Max+ 395;模型 Qwen3.8-Flash,权重量化 Q4,KV 缓存 q4_0;张量切分 0.38 / 0.62,ubatch 1024 / batch 4096,6 槽、每槽 131072 上下文;3080 显存峰值 19129 MiB;数据出自 [qwen38flash-q4-local-results.csv](data/qwen38flash-q4-local-results.csv)。无单机对照——提升是这一组合上 C1 → C4。
| 指标 | C1(tok/s) | C4 最好用的档(tok/s) | C1 → C4 |
| --- | ---: | ---: | ---: |
| Prefill | 569.892 | 633.685 | **+11.2%** |
| 聚合 Decode | 35.204 | 71.185 | **+102.2%** |
| 总吞吐 | 213.581 | 338.270 | **+58.4%** |
C1–C6 Prefill 聚合为 569.892–633.685 tok/s,聚合 Decode 为 35.204–71.185 tok/s。21/21 计分请求成功,负载约 2077 输入 / 256 输出。验证了什么:这套配置最好用的并发档是 C4,C5、C6 已经不再上涨;这是一个工作档位,换负载要重测。
**核查与外部参考。** 27B-DRAFT-AUDIT-01 是数据核查;EXT-DGX-01 是外部参考,只当背景。上面的本地 Spark Q4_K_M 行不和那些 NVFP4 社区数字合并。
### 27B-DRAFT-AUDIT-01 · Qwen3.8-27B · Q4_K_M · 投机解码核查
模型 Qwen3.8-27B,权重量化 Q4_K_M,KV 缓存 q4_0;在 AI Max+ 395 上做的数据核查;数据出自 [qwen27b-local-results.csv](data/qwen27b-local-results.csv)。
| 文本类型 | Decode(tok/s) | 接受率 |
| --- | --- | --- |
| 重复文本 | 35.0–38.5 | 100% |
| 自然语言,C1 | 12.1 | 17.7% |
验证了什么:重复文本与自然语言是两种负载,投机解码对输入内容敏感;重复文本上的高分不能代表真实文本。
### EXT-DGX-01 · Qwen3.5 9B / TQ3_4S;Qwen3.8-27B / NVFP4 · DGX Spark 外部参考
本条包含两个外部工作负载:Qwen3.5 9B,权重量化 TQ3_4S;Qwen3.8-27B,权重量化 NVFP4、KV 缓存 FP8。公开成绩约为 1000 tok/s Prefill、25–30 tok/s 单流 Decode、107 tok/s 聚合 Decode,C1–C6。这是别人机器上的公开数据,只当背景,不和本地数据排名,包括本地 27B-SPARK-01 的 Q4_K_M 三档。[详档](results/dgx-spark-community-control.zh-CN.md)
数字口径备忘:为什么同一台机器会有几个不同的数
- 395 在 9B 档有两个成绩:`llama-bench` 那组(970.00 / 31.27)对着 9B-PIPE-01 看,服务状态那组(861.55 / 30.24)对着 9B-PD-01 看。
- 27B 档 395 单机 Prefill 有三个数。**207.2** 是 v1.0 服务态的 C1 solo 成绩,那一版每处理一个 prompt 都要整拷一份 524 MiB 的递归态检查点,Vulkan 侧回读约 0.8 秒,这个数对着 27B-PD-01 的组合成绩 1000.6 看。**307.1** 是同一批机器关掉检查点后(v1.1 口径)的 C1 solo 成绩,记在 27B-KV-01 配置 C 的详档表里作历史对照。**313.28** 是 IQ3 量化下 `llama-bench` pp4096 的成绩,对着 27B-LONG-01 看。207.2 不是 1207.2 的笔误。
- 3080 侧 Prefill 链条:683.2(RPC 逐 ubatch 同步)→ 1000.6(纯 CUDA 直挂,+46%)→ 1210.6(关掉检查点,见 27B-KV-01 配置 C,是裸算上限 1228.53 的 98.5%)。27B-PD-01 的 1000.6 是裸算的 82%,服务态不随并发下滑、稳定在 1000–1015 tok/s;KV 搬运 68–76 毫秒(服务记录也写过 71 ms)。两侧一起涨之后,组合对 395 单机的优势仍在 4 倍上下。
- 27B 档在 395 主机线上,1200 以上的 Prefill 只出现在 RTX 3080 这一侧(裸算 1228.53、服务态 1194.4–1210.6);395 单机跑 27B 稠密模型的 Prefill 在 200–320 之间,它跑 9B 也只有 861.55–970.00。27B-SPARK-01 的 1603.20 Prefill 是 3080 + Spark 的**组合成绩**,不是 3080 单机;这次 8K、无投机的 3080 单机 Prefill 是 1113.13。
- 配置 D 从 C1 到 C6 依次为 1090 / 1081 / 1080 / 1077 / 1082 / 1082 tok/s,同一轮的聚合口径从 1079 降到 1016 tok/s。配置 D 的显存与算力代价:草稿头权重占 1080 MiB、验证批还要约 500 MiB 计算缓冲,ctx8192 下 ubatch 只能从 1024 压到 512、slot 从 2 个减到 1 个,每步验证批的矩阵乘也实打实吃算力(4 token 批 +21 ms、8 token 批 +49 ms),Prefill 于是从 1210.6 掉到 1077–1090,低约一成。
- 配置 C 里 3080 还留 2 个 slot,395 带 DFlash 头单流 38.75 tok/s、持全量 KV 池。3080 带头单流实测自然语言 42.7 tok/s、代码 67.4 tok/s,是 395 带同一个头的 2.2–2.3 倍,聚合 Decode 因此从 63.84 抬到 116.3。
- 9B 流水四个检查点 Prefill 爬升为 **1865.08 → 1893.87 → 1999.51 → 2129.69 tok/s**;**37.16 tok/s** 的 Decode 只属于 1999.51 那个检查点,不是最终的 50.73。
- 实验表里的 v1.0/v1.1 口径是历史服务测法标签,不是当前公开里程碑编号;对应实验现在分别归入 v1.2/v1.3。
- ORNITH-PD-02 的 3080 显存占用 18661/20480 MiB,395 Vulkan 约 22678/65536 MiB。同轮另一次附加性能门禁只测到 3785/44,原因是那道题的草稿接受率低,不是参数改坏了。三端 HTTP 200、启动后无 OOM 无崩溃。融合配方的 4173.47 比 ORNITH-PD-01 的 C1 4017.46 高 3.9%。ORNITH-PD-01 那一档当时没有单独记录单流 Decode;它 100K 档写的 395 纯 Decode 是六路并发的合计(C1 23.33 到 C6 148.20),和单流速度不是一个口径。
## 版本时间线 v1.0 → v1.6
七个版本对应七次有数据的实验。27B-SPARK-01 是 v1.6 上 2026-09-11 的数据补录,不是第八个公开版本。
| 版本 | 实验 | 一句结论 |
| --- | --- | --- |
| v1.0 | 9B-PD-01 | 3060 做 Prefill、状态交给 395 做 Decode 能成。组合对 395 单机:首字 3.496 秒对 5.879 秒、Prefill 1452.29 对 861.55、Decode 30.28 对 30.24 |
| **v1.1** | 9B-PIPE-01、27B-LONG-01、EXT-DGX-01 | 3060 + 395 同时算同一阶段的 9B 稠密加速走通:组合 Prefill 四个检查点 1865.08 → 1893.87 → 1999.51 → 2129.69,最终 Decode 50.73(37.16 只属于 1999.51 那个检查点)。27B-LONG-01 分层装对 395 单机:pp4096 658.52 对 313.28、pp65536 319.10 对 136.69,pp98304 从 900 秒超时变成 225.10 |
| v1.2 | 27B-PD-01 | 3080 做 Prefill、395 做 Decode 在服务状态下能跑。3080 Prefill 从 683.2(RPC 逐 ubatch 同步)提到 1000.6(纯 CUDA 直挂),1 到 6 路并发稳定在 1000–1015;C1 TTFT 组合 1073 毫秒对 395 单机 4825 毫秒。207.2 是 v1.0 口径下 395 单机 Prefill 的实测 |
| v1.3 | 27B-KV-01、27B-DRAFT-AUDIT-01 | 关掉检查点拷贝后,3080 服务态 Prefill 1000.6 → 1210.6(裸算 1228.53 的 98.5%),395 单机 Prefill 207.2 → 307.1。远端 KV 池两条路线:配置 C 由 395 解码,3080 Prefill 1194.4–1210.6、聚合 Decode 1 路 33.55 → 6 路 63.84;配置 D 由 3080 解码,3080 Prefill 1077–1090、聚合 Decode 1 路 63.2 → 6 路 116.3。核查:395 上自然语言 C1 Decode 12.1、草稿接受率 17.7% |
| v1.4 | ORNITH-PD-01 | 3080 做全部 Prefill、395 做全部 Decode 的 MoE 压测,两份负载 × 六档并发 42/42 请求走通。输入 1000 token:3080 Prefill 聚合 1 路 4017.46 → 6 路 3943.88;输入 100K:2895.53 → 2793.24;395 Decode 聚合(100K 档)1 路 23.33 → 6 路 148.20 |
| v1.5 | FLASH-SPLIT-01 | 单服务切层(3080 占 0.38、395 占 0.62)21/21 计分请求成功。最好用的档是 4 路(C4):Prefill 633.685、聚合 Decode 71.185、总吞吐 338.270;1 到 6 路 Prefill 569.892–633.685 |
| **v1.6** | ORNITH-PD-02 | 3080 Prefill 4173.47,395 带 DFlash 草稿单流 Decode 114.86,草稿接受 107/114(93.86%)。解码跟着接受率走:9.4% 时只有 3665.3 / 37.2 |
| 2026-09-11 补录(仍是 v1.6) | 27B-SPARK-01 | RTX 3080 20GB + DGX Spark GB10,Qwen3.8-27B Q4_K_M。Prefill 优先 8K/128 无投机:组合 1603.20 / 17.62 对 3080 单机 1113.13 / 33.36(**+44.03%**)。Decode 优先 DFlash2:2K 1153.95 / 63.97,8K 1124.32 / 49.20。均衡 DFlash2 C1–C6 126/126。不创造新版本。 |
| 2026-09-14 补录(仍是 v1.6) | FLASH-SPARK-01 | Qwen3.8-Flash-Next NVFP4,6000D + Spark 完整双机;容量配平 8K Prefill 8157.74、C6 聚合输出 414.90;特殊配比分层 PP2 8696.94 / 284.56;各 63/63。 |
版本号是实验里程碑,不是文档维护次数;与旧发布号的对应见 [VERSION_HISTORY.md](VERSION_HISTORY.md)。
27B-C 和 27B-D 是 27B-KV-01 一个实验的两种配置;395 上那组自然语言测试属于 27B-DRAFT-AUDIT-01;EXT-DGX-01 仍是别人机器上的公开 Spark 成绩,只当背景;27B-SPARK-01 是本地 3080 + Spark 的 Q4_K_M 实测。
## 怎么读这些数据
一个数字能写成什么结论,按下面几条定。
- **能跑**:请求完整跑完、状态交接成功、每个指标都能说清算在谁头上。27B-KV-01、ORNITH-PD-01、ORNITH-PD-02、FLASH-SPLIT-01、27B-SPARK-01 属于这一档,都已验证。
- **更快**:模型、量化、负载、指标全都一致,而且有单卡或单机对照。9B-PIPE-01、9B-PD-01、27B-LONG-01、27B-PD-01 满足这条,提升幅度都在上面的表里。27B-SPARK-01 只在最高 Prefill 确认档上,对本次 3080 单机的 Prefill 满足这条。
- **装得下、服务得住**:负载跑完、有显存和稳定性数据。27B-KV-01、FLASH-SPLIT-01 以及 27B-SPARK-01 均衡档的结论就是这样写的。
- **远端 KV 归容量路线**:395 只作远端 KV 池、不参与 Prefill 稠密计算,验证的是容量(解码归属见 27B-KV-01 的两条路线),和稠密加速分开归类。
- **投机解码的点测不和随机种子压测互换**:27B-DRAFT-AUDIT-01 只立规矩,不给提升。
- **外部参考只当背景,不同条件不拼横向排名**:EXT-DGX-01 是别人公开的实测,不当本地对照;模型、量化、引擎、prompt 或连接方式不同的数据不拼排名。版本号不是实验编号,也不当数据来源。每个数据都要能说清用的是 RTX 3060、RTX 3080、395,还是 3080 + Spark 组合。
**2026-09-20 数据补录:DS41-6GPU-01 V8 seq32。** 六卡部署 V1–V8 是独立的部署演进线,研究仓库仍为 v1.6。[版本演进与对照](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md)。
## 后续规划
下一步补齐六卡与 H20 的相同负载、投机及计时对照,补充 V8 同档重复长时压测与冷恢复验收;其余待测路线如下。
| 阶段 | 当前结果引出的问题 | 计划做什么、做到什么算完成 |
| --- | --- | --- |
| **补齐匹配对照与其余 MoE 格** | D1 这一格已经在 9B + 3060 上做齐了单卡与单机两组对照;其余几格要按同一套负载标准把对照补齐,两格 MoE 实验还没有开始。 | 一、9B Q6_K 同样条件下补 RTX 3080 的复测;二、27B 与 MoE 各格补 3060、3080 的同条件单卡对照,27B-KV-01 补同一轮「3080 不接远端 KV」的对照;三、做 M1(MoE 轻松装)和 M3(MoE 装不下)两格的完整实验;四、把一对一的稠密加速搬到更多大内存主机和更多小显存显卡上。做完的标准:稠密区能对得上、Prefill 和 Decode 的收益不打折、调度稳定。 |
| **Spark 组合后续** | 3080 + Spark 上已测与待测要分开写。 | **已测:** 27B-SPARK-01 三档,对照本次 3080 单机微基准(Prefill 优先无投机;Decode 优先 DFlash2 的 2K 与 8K;均衡 DFlash2 C1–C6)。**尚未测试:** 同模型、同量化、同负载的 Spark 单机基线;3080 单机均衡 C1–C6;组合与对照统一投机参数;这条线上的更多模型。 |
| **算力与显存配比** | 从可装载性与阶段耗时推导候选配置,再用实测验证。 | FLASH-SPARK-01 已验证容量配平与特殊配比分层的不同取舍;后续跨模型、跨加速卡校准配比方法,同时考虑 Prefill、Decode、并发、上下文与输出。 |
| **一卡对多主机** | 一对一跑稳之后,一张加速卡能不能同时带多台大内存主机? | 研究一对多的调度、资源隔离、公平分配、故障恢复和扩展上限。做完的标准:主机数量增加后收益还能复现,单台主机的性能下降在可接受范围内。 |
## 详档与数据
**新增 DS41-6GPU-01:** [V1–V8 与三类机组对照](results/deepseek-v4.1-flash-six-gpu-v1-v7.zh-CN.md) · [CSV](data/deepseek-v4.1-flash-six-gpu-v1-v7.csv) · [证据 JSON](data/deepseek-v4.1-flash-six-gpu-v1-v7-evidence.json)。
首页每个实验只摘最关键的几个数,完整数据行、指标定义和字段说明都在下面的详档和 CSV 里;自己算的时候用对应的 CSV;除非详档写明有可比的对照,不要把不同编号的实验数据合起来算。
| 编号 | 模型 · 权重量化 · 加速卡 | 要回答的问题 | 详档 | CSV |
| --- | --- | --- | --- | --- |
| 9B-PD-01 | Ornith 9B · Q6_K · RTX 3060 12GB | CUDA 做 Prefill,能不能把状态交给 Vulkan 去 Decode? | [v1.0 独立 PD](results/v1.0-independent-pd.zh-CN.md) | [CSV](data/benchmark-results.csv) |
| 9B-PIPE-01 | Ornith 9B · Q6_K · RTX 3060 12GB | 两台设备能不能通过异步分层流水一起算同一个模型? | [v2.4 融合分层流水](results/v2.4-fused-layer-pipeline.zh-CN.md) | [CSV](data/benchmark-results.csv) |
| 27B-LONG-01 · 27B-PD-01 · 27B-KV-01 · 27B-DRAFT-AUDIT-01 | Qwen3.8-27B · UD-IQ3_XXS 与 Q4_K_M · RTX 3060 / RTX 3080 | 27B 分层装、服务状态 PD、远端 KV 和投机解码核查 | [Qwen3.8-27B 双机 PD](results/qwen3.8-27b-dual-machine-pd.zh-CN.md) | [CSV](data/qwen27b-local-results.csv) |
| ORNITH-PD-01 | Ornith-1.5-35B-A3B · IQ4_XS · RTX 3080 20GB | MoE 能不能分清 Prefill / Decode 归属,并扛住 100K 的 C1–C6 压测? | [Ornith 双机 PD](results/ornith-1.5-35b-a3b-dual-machine-pd.zh-CN.md) | [CSV](data/ornith35a3b-local-results.csv) |
| ORNITH-PD-02 | Ornith-1.5-35B-A3B · IQ4_XS · RTX 3080 20GB | 在独立 PD 之上加融合草稿和统一 KV 池,Prefill 和单流 Decode 能不能一起上台阶? | [Ornith 融合草稿 PD](results/ornith-1.5-35b-a3b-fused-dflash-pd.zh-CN.md) | [CSV](data/ornith35a3b-local-results.csv) |
| FLASH-SPLIT-01 | Qwen3.8-Flash · Q4 · RTX 3080 20GB | 一个服务同时用 CUDA 和 Vulkan 切层,吞吐在哪一档到顶? | [Qwen3.8-Flash Q4 切层](results/qwen3.8-flash-q4-layer-split.zh-CN.md) | [CSV](data/qwen38flash-q4-local-results.csv) |
| 27B-SPARK-01 | Qwen3.8-27B · Q4_K_M · RTX 3080 20GB + DGX Spark GB10 | 这套组合相对 3080 单机,Prefill、Decode、均衡服务档分别能站住什么? | [Qwen3.8-27B Spark + 3080 三档](results/qwen3.8-27b-spark-3080-profiles.zh-CN.md) | [CSV](data/qwen27b-spark-3080-profiles.csv) |
| FLASH-SPARK-01 | Qwen3.8-Flash-Next · NVFP4 · RTX 6000D + DGX Spark | 算力与容量如何配平;特殊配比分层如何影响 Prefill 与生成吞吐? | [Flash 双机完整实验](results/qwen3.8-flash-next-spark-6000d.zh-CN.md) | [CSV](data/qwen3.8-flash-next-spark-6000d.csv) |
| EXT-DGX-01 | Qwen3.5 9B · TQ3_4S 与 Qwen3.8-27B · NVFP4 · 外部 DGX Spark | DGX Spark 的公开成绩,只当背景 | [DGX Spark 社区对照](results/dgx-spark-community-control.zh-CN.md) | [CSV](data/dgx-spark-community-controls.csv) |
实验编号和旧标签的对应关系在 [data/experiment-index.csv](data/experiment-index.csv);全部详档在 [results/](results/) 目录。[更新记录](CHANGELOG_ZH.md)记录每一版公开实验版本测了什么。版本对照:[VERSION_HISTORY.md](VERSION_HISTORY.md)。