基准测试

TensorSharp 在相同模型与硬件上与其他推理引擎的对比,以及守护正确性的测试框架。

同台对比:TensorSharp vs llama.cpp

一个纯 .NET 引擎与手工优化的 C++ llama.cpp 正面较量 —— 相同 GGUF、相同 NVIDIA RTX 3080 Laptop GPU(16 GB)、统一的 OpenAI /v1/chat/completions 接口,且两个引擎均分别在 GGML CUDA 与 GGML Vulkan 构建上测量,覆盖短提示、长上下文与多轮对话场景。下方数据来自当前签入的 benchmarks/engine_comparison harness 运行(docs/engine_comparison_report.md),可在自己的硬件上复现。

🏆

CUDA prefill 与 TTFT

Gemma 4 E4B 的 prefill 几何平均快 1.28×(短提示最高 1.39×);2-bit 量化的 Qwen 3.6 35B-A3B MoE 同样达到 1.28× prefill / 1.27× TTFT

💬

多轮 prefill 全面获胜

在 CUDA 上,后续轮次的 prefill 在每个模型上都更快 —— 1.27×(E4B)、1.39×(12B)、1.49×(35B-A3B)、1.11×(27B)—— 首 token 最高早 1.47× 到达。

CUDA decode:持平或更快

几何平均 E4B 1.02×、12B 1.04×、27B 1.07× —— 长上下文 decode 最高 1.12× —— 35B-A3B MoE 差距在 2% 以内(0.98×)。

🌋

Vulkan dense decode 1.21×

Gemma 4 12B 在厂商中立的 Vulkan 路径上 decode 快 1.21×(长上下文最高 1.32×),prefill / TTFT 不低于持平。

下表为 TensorSharp 相对 llama.cpp 在相同后端上的几何平均加速比(单流、贪心采样、关闭 MTP)。> 1.0× 表示 TensorSharp 更快(decode / prefill)或延迟更低(TTFT):

模型后端decodeprefillTTFT
Gemma 4 E4B it (Q8_0, dense 多模态)CUDA1.02×1.28×1.27×
Gemma 4 E4B it (Q8_0, dense 多模态)Vulkan1.00×1.05×1.03×
Gemma 4 12B it (UD-Q4_K_XL, dense)CUDA1.04×1.17×1.16×
Gemma 4 12B it (UD-Q4_K_XL, dense)Vulkan1.21×1.04×1.03×
Qwen 3.6 35B-A3B (UD-IQ2_XXS, MoE)CUDA0.98×1.28×1.27×
Qwen 3.6 35B-A3B (UD-IQ2_XXS, MoE)Vulkan0.87×1.04×1.03×
Qwen 3.6 27B (UD-IQ2_XXS, dense)CUDA1.07×0.96×0.95×
Qwen 3.6 27B (UD-IQ2_XXS, dense)Vulkan1.02×0.85×0.84×

这些领先来自 TensorSharp 的架构专属快路径:融合的整模型 prefill/verify 图(配以融合的 FFN / attention 内核)、融合的整模型 decode,以及 vLLM 式带跨请求前缀共享的分页 KV 缓存。即便在极限量化下引擎也不落下风:在 2-bit IQ2_XXS 权重上,dense Qwen 3.6 27B 的 decode 快 1.07×(CUDA)/ 1.02×(Vulkan),35B-A3B MoE 的 prefill 快 1.28×——纯 .NET 引擎与手工优化的 C++ 并驾齐驱。剩余低于 1.0× 的项——主要是 Qwen 3.6 35B-A3B 在 Vulkan 上的 decode(0.87×)、Qwen 3.6 27B dense 的 prefill(CUDA 0.96× / Vulkan 0.85×)以及 E4B 在 Vulkan 上的长提示 prefill(0.71×)——仍是正在优化的目标,而非最终结果。

文本场景之外 —— harness 还支持工具调用、结构化输出(JSON)、图像 / 音频 / 视频、MTP 开/关与并发扩展等场景,以及对比 stable-diffusion.cppimage_edit 场景;该场景较早的一次 CUDA 运行(Qwen-Image-Edit 2511 Q2_K DiT + Lightning 4-step LoRA,544×1184,4 步,相同输入与 seed)测得 TensorSharp 预热后的编辑耗时 40.44 s vs 48.16 s,约快 1.19×。这些 cell 可通过 benchmarks/engine_comparison 中记录的 harness 参数启用。

⚖️

诚实的对比会同时展示胜势与差距。这些数字来自单台机器(RTX 3080 Laptop、单流);你的硬件、模型与量化都会改变它们。请在你自己的机器上运行内置基准与引擎对比框架,得到对你而言真正有意义的数字。

测试

下方构建与测试命令需要按平台安装的 .NET 10 SDK;运行命令前请先验证安装。

单元测试(xUnit)

InferenceWeb.Tests 测试无需运行服务器的进程内行为:托管量化运算、直接 CUDA 与 MLX 后端内核(在硬件可用时)、分页 KV 调度、批量执行器正确性、各模型批量前向与 legacy 路径的一致性、MTP / NextN 推测解码正确性、DiffusionGemma 探针、编解码器往返、提示词渲染,以及服务器 CLI 选项构建器。

dotnet test InferenceWeb.Tests/InferenceWeb.Tests.csproj

服务器集成测试

TensorSharp.Server/testdata/ 中的集成测试覆盖全部三种 API 风格(Web UI SSE、Ollama、OpenAI)、多轮对话、思考模式、工具调用、结构化输出、队列状态兼容、并发请求与中止支持。架构相关功能会自动检测,并在当前模型不支持时跳过。

# 先启动 TensorSharp.Server,然后运行:
python3 TensorSharp.Server/testdata/test_multiturn.py
# 或
bash TensorSharp.Server/testdata/test_multiturn.sh

推理矩阵运行器

TensorSharp.TestMatrix 是更广泛的、由 CLI 驱动的长时段 模型 × 后端 × 功能 × 环境变量 覆盖框架。它发现 GGUF 文件、过滤不可用后端与不支持的提示类型、运行基线加环境变量扫描的各个 cell、为每个 cell 写一份 JSON 结果、生成聚合 Markdown 报告,并与各主机基线对比。

dotnet build TensorSharp.TestMatrix/TensorSharp.TestMatrix.csproj -c Release
dotnet run --project TensorSharp.TestMatrix -c Release -- --dry-run
📊

基准数字高度依赖硬件、模型、量化与 KV 缓存 dtype。请把上面的数字当作单台机器上可复现的参考点,而非普适保证 —— 在你自己的硬件上运行内置基准,得到对你真正有意义的数字。