基准测试
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):
| 模型 | 后端 | decode | prefill | TTFT |
|---|---|---|---|---|
| Gemma 4 E4B it (Q8_0, dense 多模态) | CUDA | 1.02× | 1.28× | 1.27× |
| Gemma 4 E4B it (Q8_0, dense 多模态) | Vulkan | 1.00× | 1.05× | 1.03× |
| Gemma 4 12B it (UD-Q4_K_XL, dense) | CUDA | 1.04× | 1.17× | 1.16× |
| Gemma 4 12B it (UD-Q4_K_XL, dense) | Vulkan | 1.21× | 1.04× | 1.03× |
| Qwen 3.6 35B-A3B (UD-IQ2_XXS, MoE) | CUDA | 0.98× | 1.28× | 1.27× |
| Qwen 3.6 35B-A3B (UD-IQ2_XXS, MoE) | Vulkan | 0.87× | 1.04× | 1.03× |
| Qwen 3.6 27B (UD-IQ2_XXS, dense) | CUDA | 1.07× | 0.96× | 0.95× |
| Qwen 3.6 27B (UD-IQ2_XXS, dense) | Vulkan | 1.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.cpp 的 image_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。请把上面的数字当作单台机器上可复现的参考点,而非普适保证 —— 在你自己的硬件上运行内置基准,得到对你真正有意义的数字。