计算后端

后端通过 --backend(CLI 与服务器)选择,决定由哪种硬件运行数学运算。对任何未实现的运算,每个后端都会回退到 CPU,因此各处输出都保持正确 —— 后端只在速度上不同。

我该用哪个后端?

你的硬件推荐参数说明
Apple Silicon(Mac)GGML Metalggml_metalmacOS 默认。mlx 是另一条 Apple Silicon GPU 路径。
Windows / Linux + NVIDIAGGML CUDAggml_cuda测试最充分的 NVIDIA 路径。cuda 是用于实验的直接 PTX/cuBLAS 后端 —— 也是支持多 GPU 张量并行的那一个。
Windows / Linux + AMD / Intel / NVIDIAGGML Vulkanggml_vulkan与厂商无关的 GPU 路径(ggml-vulkan,驱动支持时启用 cooperative-matrix 加速)。当主机存在 Vulkan 运行时时会在原生构建时自动启用;用 --no-vulkan 退出。
无 GPU / 可移植 / 调试纯 C# CPUcpu无原生依赖。要更快的 CPU 推理请用 ggml_cpu(原生内核)。

所有后端详解

后端参数最适合
直接 CUDA / cuBLAScudaNVIDIA 推理与实验
MLX MetalmlxApple Silicon(GGML Metal 的替代)
GGML Metalggml_metalApple Silicon(macOS 默认)
GGML CUDAggml_cuda通过 ggml 的 NVIDIA 推理
GGML Vulkanggml_vulkan通过 ggml 的厂商无关 GPU 推理(AMD / Intel / NVIDIA)
GGML CPUggml_cpu原生 CPU 内核
纯 C# CPUcpu可移植与调试

GGML Metal、GGML CUDA 与 GGML Vulkan

建立在链接 ggml 的原生 C++ 桥接之上的 GPU 路径。

三者都在不反量化为 FP32 的情况下运行原生量化 matmul(Q4_K_M、Q8_0 ……),并配有驱动 ggml_flash_attn_ext 的原生分页注意力内核。

多 GPU。GGML CUDA 与 GGML Vulkan 同样支持张量并行--tp N 让每个 rank 在自己的 GPU 上拥有独立的 ggml 后端、权重分片与 KV 缓存,由 rank 工作线程池并发驱动,跨 GPU AllReduce 走 ggml 的集合通信(构建时能找到 NCCL 就用 NCCL),小载荷则在主机内存中归约。融合的按 rank block 计算图让 Gemma 4 上 --tp 2 的 decode 快于单卡,也让超出单卡显存的模型能够完整跑在 GPU 上。

已验证的 E4B 快路径:仓库基准已在这些 GGML 原生 GPU 后端上验证 Gemma 4 E4B Q8_0 家族。E4B 的 PLE 与共享 KV 布局会进入融合整模型 prefill/verify 和单图 decode 路径,服务端 N=1 时也会自动选择融合路径。请从 Gemma 4 E4B 指南开始。

MLX Metal

--backend mlx 是建立在 mlx-c 之上、GPU 加速的 Apple Silicon 路径。它在不反量化为 FP32 的情况下实现量化运算(Q4_K_M、Q8_0、Q5_K、Q6_K、IQ2_XXS、IQ4_XS、IQ4_NL、MXFP4 ……)、融合的 decode/prefill Metal 内核、编译图内核、异步 worker 调度、批量 MoE decode 与 MoE 专家卸载。它通过 mlock(2) 把 GGUF mmap 钉在物理内存中,并根据主机的统一内存容量推导分配器上限。需要 libmlxc(本地构建,或通过 TENSORSHARP_MLX_LIBRARY / TENSORSHARP_MLX_LIBRARY_DIR 定位)。

直接 CUDA

--backend cuda 是一条纯 C# 路径,使用 CUDA Driver API、cuBLAS GEMM,以及常见 float32 运算的 PTX 内核(fill、一元/二元/三元、激活、RMSNorm、softmax、RoPE/RoPEEx、SDPA、GQA prefill/decode、因果掩码、gather/concat),外加受支持量化类型的原生量化 matmul/get-rows。未支持的运算在保留张量语义的前提下走 CPU 回退。它也是MTP 推测解码能获益的纯 C# 后端。

它支持张量并行--tp N 把一个模型切分到 N 张 CUDA GPU 上,--tp-node-id / --tp-peers 则把并行组扩展到多台机器。GGML CUDA 与 GGML Vulkan 后端同样支持切分(见上文);MLX 与 CPU 后端为单设备 —— 在多 GPU 主机上它们只会选择其中一张卡(不带 --tp 时 Vulkan 用 --gpu-device),而不会切分模型。→ 多 GPU 与多节点

CPU 后端

🔎

服务器会在 GET /api/modelssupportedBackends)中报告主机上实际可用的后端。如果缺少 CUDA 或 MLX 后端,说明主机在启动时未检测到可用的驱动 / 运行时。如果缺少 ggml_vulkan,说明原生桥接库未启用 Vulkan 构建,或未找到支持 Vulkan 1.3 的设备/驱动。

构建原生库

请先按平台安装并验证 .NET 10 SDK。原生 GGML 库会在首次 dotnet build 时自动构建。要手动构建或启用 CUDA:

cd TensorSharp.GGML.Native

# macOS(Metal)
bash build-macos.sh

# Linux —— 仅 CPU、强制启用 CUDA、强制关闭 Vulkan
bash build-linux.sh
bash build-linux.sh --cuda
bash build-linux.sh --no-vulkan
# Windows —— 仅 CPU、强制启用 CUDA、强制关闭 Vulkan
.\build-windows.ps1 --no-cuda
.\build-windows.ps1 --cuda
.\build-windows.ps1 --no-vulkan

GGML Vulkan 后端会自动启用——当主机存在 Vulkan 运行时(Windows 上的 vulkan-1.dll 或 Linux 上的 libvulkan.so.1 loader,近期 GPU 驱动均自带)时即启用;用 --no-vulkan(或 TENSORSHARP_GGML_NATIVE_ENABLE_VULKAN=OFF)退出,且显式选择会经 CMake 缓存在重复构建中保持。Windows 上已安装 LunarG Vulkan SDK 时直接使用;未安装时构建会通过 eng/fetch-vulkan-toolchain.ps1 自动把便携工具链(Vulkan-Headers、由系统 loader 生成的 vulkan-1 导入库、glslc、SPIRV-Headers)准备到 ExternalProjects/vulkan-toolchain/。Linux 上有发行版开发包时直接使用(apt install libvulkan-dev glslc spirv-headers);否则构建会通过 eng/fetch-vulkan-toolchain.sh 自动补齐缺失部分(Vulkan-Headers、来自 shaderc CI 预编译的 glslc、SPIRV-Headers)。运行时需要支持 Vulkan 1.3 的 GPU 驱动。

在 Windows/Linux 上,脚本会自动检测可见 NVIDIA GPU 的计算能力,并传入一个收窄的 CMAKE_CUDA_ARCHITECTURES(例如 RTX 3080 上的 86-real),从而大幅缩短 CUDA 构建时间。可显式覆盖:

TENSORSHARP_GGML_NATIVE_CUDA_ARCHITECTURES='86-real;89-real' bash build-linux.sh --cuda
bash build-linux.sh --cuda --cuda-arch='86-real;89-real'

你也可以直接在 dotnet build 中请求 CUDA:

TENSORSHARP_GGML_NATIVE_ENABLE_CUDA=ON dotnet build TensorSharp.Cli/TensorSharp.Cli.csproj -c Release

MLX 原生库(仅 macOS)

MLX 后端依赖 libmlxc。一个辅助脚本会获取并构建它:

bash TensorSharp.Backends.MLX/build-native-macos.sh

它会把库写入 TensorSharp.Backends.MLX/Native/dist/。运行时后端会先探测应用目录;用 TENSORSHARP_MLX_LIBRARYTENSORSHARP_MLX_LIBRARY_DIR 指向别处。

平台二进制发行状态

⚠️

当前最新的 v3.0.5.0 没有上传应用归档。除非文件已明确列在 Releases 页面,否则请从源码构建。

计划中的发行工作流会在全部必需构建 job 成功后生成以下自包含归档:

归档捆绑的原生后端格式
win-x64-cpuGGML CPU.zip
win-x64-cudaGGML CUDA + 纯 C# CUDA (PTX) + CUDA 12.x 运行时.zip
linux-x64-cpuGGML CPU.tar.gz
linux-x64-cudaGGML CUDA + 纯 C# CUDA (PTX) + CUDA 12.x 运行时.tar.gz
osx-arm64GGML Metal + MLX.tar.gz

这些是计划中的产物名称,并不表示文件目前可下载。文件存在时,-cuda 归档仍需 NVIDIA GPU 与兼容驱动;macOS 归档需要 Apple Silicon。