1115714829/llama.cpp-v100

llama.cpp optimized for NVIDIA Tesla V100 (SM70): large MoE Qwen3.8-Flash-Next with MTP (prefill 3464 tok/s at 200K context, 6x V100-16GB) and Qwen3.8-27B with DFlash2 (decode up to 225 tok/s); 2-6 GPUs, 262K-512K context, multimodal, concurrent serving.

C++

40

459 commits

updated Oct 17, 2026

See the code

README

llama.cpp-v100

简体中文 | English | 27B 稠密模型(Qwen3.8-27B + DFlash2) | 2.0.0 大 MoE(Qwen3.8-Flash-Next + MTP) | 更新日志

面向 NVIDIA V100(SM70)的 llama.cpp 修改版。当前版本 2.0.0,各版本的更新内容见 CHANGELOG.md。

快速部署:两个详情页按硬件给出可直接复制的完整命令,最后一节“快速部署(给 AI 助手与新手)”(27B / 大 MoE)列出每个参数对能力 / 速度 / 显存的影响、选配置的判断步骤和常见问题对照,可以把详情页直接交给 AI 助手照着部署。


简介

基于 llama.cpp(上游 v0.6.0,2026-10-05 的 d81235049)修改,从计算内核到运行时为 V100 重新实现与优化;引用的外部实现见文末致谢,出处与许可见各文件头和 licenses/ 目录。

围绕 V100(SM70)的硬件特性,从计算内核到运行时进行了系统性优化:

  • 多卡并行:优化张量并行的调度与内核发射,降低 GPU 等待主机的开销;卡间 all-reduce 按 NVLink 拓扑分层进行;支持对注意力头数不能被卡数整除时的切分优化(如 6 卡)。
  • 长上下文:在超长上下文下保持预填充与吐字速度的稳定,并降低计算缓冲的显存占用。
  • 投机解码:实现 DFlash2 投机解码的完整链路,优化采样与每轮开销,提升吐字速度。
  • 计算内核:优化 SM70 计算内核并适配 Q8_0 量化格式,同时进行算子融合。
  • 平台适配:针对 IBM AC922 的 NVLink 互联与 NUMA 内存架构进行适配。
  • 多路并发:多路请求时吐字优先、限制提示词处理占用的时间,多路的解码批次、投机解码与显存预留都按路数优化。
  • 多模态:支持视觉模块(mmproj)在 GPU 上运行,处理图片、PDF 与视频。
  • 大 MoE 模型(2.0.0):专家并行与张量并行结合的多卡切分;显存放不下的专家放在锁页主机内存,由 GPU 直接读取并按 NUMA 节点放置;按路由画像决定哪些专家常驻显存、各卡分配哪些专家;MTP 投机解码与稀疏注意力针对 V100 优化。

致谢

感谢群友 umacro、看透、天语星落、lsaac。 没有他们提供的测试机设备与 token,本项目不会这么快实现。

参与开发:仓库作者(发起项目,提供硬件与测试环境,确定目标与取舍);外部贡献者 天语星落(ATIVX928)(PR #1、PR #2)。参考的项目与使用的 AI 助手见文末致谢。


2.0.0 更新内容

2.0.0 新增大 MoE 模型 Qwen3.8-Flash-Next 的 V100 专项支持;Qwen3.8-27B 的功能不变,并带上下一节的修复。本版支持的大 MoE 配置:6 × V100-16GB + Qwen3.8-Flash-Next UD-Q4_K_XL + MTP 草稿(Q4_K_M) 是标准配置,本页与详情页的实测数据都来自它;4 × V100-32GB(x86,PCIe) 可以运行,专家全部常驻显存、不走主机内存(参考数据见 MoE 详情页);其他卡数、其他量化(如 Q8_0 主模型)与更多模型后续陆续兼容。

  • 大 MoE 模型 Qwen3.8-Flash-Next:多卡 --split-mode tensor 时,路由专家按专家分到各卡(专家并行),注意力、线性注意力、共享专家等稠密部分按张量并行。推荐配置为 6 张 16 GB 的 V100、上下文 262144、带 MTP 投机解码。
  • 专家放在显存与主机内存两级:启动时按每张卡剩下的显存自动决定每层常驻显存的专家,其余放在 GPU 能直接读取的锁页主机内存里、仍由 GPU 计算,不需要 --n-cpu-moe / -ot;锁页内存按 GPU 所在的 CPU 节点(NUMA)分配和填充。
  • 专家路由画像:--expert-profile 按一份路由统计把最常用的专家留在显存,并据此调整专家在各卡之间的分配,使各卡的计算量接近;scripts/v100-expert-profile.sh 用一段校准文本生成画像。
  • n-gram 嵌入表放主机内存:模型的 n-gram 嵌入表与词嵌入表放在锁页主机内存,各卡共用一份、由 GPU 直接查表,不占显存。
  • 稀疏注意力(QSA):全注意力层只对索引器选出的位置做注意力(此前的上游实现在 V100 上按全部上下文计算),计算缓冲不再随上下文线性增长,262144 上下文可以在 16 GB 的卡上运行。
  • MTP 投机解码的 V100 优化:草稿链在 GPU 上连续执行、每轮只回传一次结果;草稿层只看最近的若干位置(新参数 --spec-draft-window);草稿上下文可以单独设物理批大小(新参数 --spec-draft-ubatch)。
  • 内核与运行时:预填充的专家矩阵乘使用 Volta 张量核的融合内核;吐字时合并多个小算子;多卡执行计划第一次运行时由各卡的发射线程并行提交。

实测(2026-10-11,IBM AC922 + 6 × V100-SXM2-16GB,构建 4d50148cc;上下文 262144、带 MTP 与专家路由画像;约 20 万 token 真实代码,新起服务、温度 0、不开思考,输出 686 token 时自然结束):预填充 2334.8 / 2340.8 tok/s,吐字 107.9 / 109.7 tok/s。同一台机器上,大 MoE 的约 20 万 token 预填充比 27B 高约 13%,吐字约为 27B 的 87%。


27B 修复内容

  • 开启 top-k 输出时每批重新规划显存(1.1.1 中已存在):目标模型开启 top-k 输出(设备端 top-k 或拒绝采样)时,没有输出行的预填充批与预留的计算图不一致,每批都会重新规划显存并让全部 GPU 同步。27B 现有的 DFlash2 配置不触发,实测修复前后无差别;这项修复为 27B 以后支持 MTP 预先处理。
  • 层切分 + DFlash2 启动即失败(1.1.1 中已存在):--split-mode layer 配合 DFlash2 草稿时启动失败;现在可以启动,启动时的显存规划同时计入 DFlash2 草稿的隐状态缓冲。
  • 其他:ggml 分配器在只作叶子出现的输入变大时会覆盖相邻内存的问题;POWER9(ppc64le)上 CPU 计算 IQ1_S 点积的结果错误(只影响 CPU 计算,GPU 推理不受影响)。

实测(2026-10-11,IBM AC922 + 6 × V100-SXM2-16GB;1.1.1 与 2.0.0 构建 4d50148cc 同一时段交替各两轮;上下文 262144、DFlash2,条件见 27B 详情页):短提示吐字 186.2 / 188.9 → 218.3 / 206.9 tok/s;约 1.6 万 token 预填充 2863.4 / 2842.7 → 3119.1 / 3121.1 tok/s;约 20 万 token 预填充 2047.8 / 2047.1 → 2066.6 / 2063.2 tok/s、吐字 114.5 / 115.6 → 122.2 / 127.0 tok/s。


测试平台

标准测试机(两个详情页的主要数据都在这台机器上测):IBM Power AC922,2 × POWER9,96 GB 内存(两个 CPU 节点各 48 GB),6 × Tesla V100-SXM2-16GB,CUDA 12.4。每颗 CPU 连 3 张 GPU,同一颗 CPU 下的 GPU 之间 NVLink 直连;GPU 与 CPU 之间是 NVLink 2.0。

参考主机(x86):4 × Tesla V100-SXM2-32GB(GPU 之间 NVLink 全互联,GPU 与主机之间 PCIe 3.0,136 GB 内存,CUDA 12.8),用于大 MoE 的 4 卡参考数据;2 × Tesla V100-SXM2-16GB(NVLink,PCIe 3.0,CUDA 12.8),用于编译与正确性测试。

AC922 与 x86 服务器的基础区别,以及它们对加速效果的间接影响(大 MoE 尤其明显):

IBM AC922x86 服务器
GPU 与主机之间NVLink 2.0(6 卡配置每张 GPU 2 条,理论单向 50 GB/s)PCIe 3.0(x16 理论单向约 16 GB/s)
GPU 显存与系统内存显存作为 NUMA 内存节点并入系统内存,每张 GPU 一个节点显存不并入系统内存
CPU 与 GPU 的归属2 个 CPU 节点,各连 3 张 GPU;跨节点读内存要经过 CPU 之间的总线视主板而定(上面的 4 卡参考主机只有 1 个 NUMA 节点)
  • 页缓存可能占用显存:AC922 上系统把显存当作内存节点,读大文件(例如加载模型)产生的页缓存可能落进 GPU 的节点,CUDA 回收不了,表现为显存不足。所以 AC922 上要用 numactl --membind=<CPU 节点> 启动(例如 0,8),x86 不需要。
  • 可用显存略少:显存并入系统内存时驱动按内存块保留一部分显存,AC922 上每张卡可用的显存比同型号卡在 x86 上少一些;对大 MoE 来说,显存少一点就意味着更多专家要放在主机内存。
  • 主机内存里的专家经 NVLink 读取:16 GB 的卡放不下全部专家,吐字时用到主机内存里的专家要由 GPU 搬进显存再算。AC922 的 GPU 与主机之间的带宽约为 PCIe 3.0 的 3 倍(理论值),专家放在主机内存的代价因此小得多;跨 CPU 节点读取更慢。
  • 锁页内存的放置:主机内存里的专家与 n-gram 嵌入表都放在锁页内存。程序启动时按 GPU 所在的 CPU 节点分配和填充这些内存,并实测各 GPU 读取各节点的速度来决定放置;只有一个 NUMA 节点的机器没有这项差别。

当前是通用版本,同一套代码在 AC922 与 x86 上运行;之后会按架构分别优化。


交流群

扫描下方二维码添加微信,拉你进交流群,与群友讨论更多使用方法。

微信二维码

版本与许可

版本

  • 当前版本 2.0.0(发布日期 2026-10-12),各版本的更新内容见 CHANGELOG.md。
  • 编译方法、Releases 页面的 x86_64 Linux 预编译程序,以及 Docker 镜像 ghcr.io/1115714829/llama.cpp-v100:2.0.0(同一标签含 x86_64 与 IBM Power AC922)见两个详情页。
  • 1.1.1 及更早版本的完整说明(27B 在 2~6 卡、Q4 配置、多路并发、多模态等的测试表)见对应标签的 README,例如 v100-1.1.1。

许可

本项目自 2.0.0 起采用 GPL-3.0 许可(全文见 LICENSE);1.1.1 及更早版本为 MIT。上游 llama.cpp 的 MIT 许可文本保留在 licenses/LICENSE-llama.cpp,移植的第三方代码保留各自原许可,出处与许可见各文件头与 licenses/README.md。


致谢(项目与 AI 助手)

  • 参考与借鉴的项目:llama.cpp / ggml(本项目的基础框架);1Cat-vLLM(V100 工程实践的参考,早期部分 SM70 内核移植自它,出处与许可见各文件头与 licenses/);Strata 及其 AC922 分支 Strata-AC922(大 MoE 的专家融合矩阵乘、QSA 选择与注意力等内核移植自它们,专家缓存与预填充环参考其设计,出处与许可见各文件头与 licenses/);vLLM(投机解码等设计的参考)。
  • AI 助手:开发过程由 Claude、DeepSeek、小米 MiMo、MiniMax 协作完成。
cuda
gguf
llama-cpp
llm-inference
local-llm
long-context
mixture-of-experts
moe
mtp
multi-gpu
multimodal
qwen
qwen3
sm70
speculative-decoding
tensor-parallelism
tesla-v100
v100
volta

1115714829/llama.cpp-v100

llama.cpp optimized for NVIDIA Tesla V100 (SM70): large MoE Qwen3.8-Flash-Next with MTP (prefill 3464 tok/s at 200K context, 6x V100-16GB) and Qwen3.8-27B with DFlash2 (decode up to 225 tok/s); 2-6 GPUs, 262K-512K context, multimodal, concurrent serving.

C++

40

459 commits

updated Oct 17, 2026

See the code

README

llama.cpp-v100

简体中文 | English | 27B 稠密模型(Qwen3.8-27B + DFlash2) | 2.0.0 大 MoE(Qwen3.8-Flash-Next + MTP) | 更新日志

面向 NVIDIA V100(SM70)的 llama.cpp 修改版。当前版本 2.0.0,各版本的更新内容见 CHANGELOG.md。

快速部署:两个详情页按硬件给出可直接复制的完整命令,最后一节“快速部署(给 AI 助手与新手)”(27B / 大 MoE)列出每个参数对能力 / 速度 / 显存的影响、选配置的判断步骤和常见问题对照,可以把详情页直接交给 AI 助手照着部署。


简介

基于 llama.cpp(上游 v0.6.0,2026-10-05 的 d81235049)修改,从计算内核到运行时为 V100 重新实现与优化;引用的外部实现见文末致谢,出处与许可见各文件头和 licenses/ 目录。

围绕 V100(SM70)的硬件特性,从计算内核到运行时进行了系统性优化:

  • 多卡并行:优化张量并行的调度与内核发射,降低 GPU 等待主机的开销;卡间 all-reduce 按 NVLink 拓扑分层进行;支持对注意力头数不能被卡数整除时的切分优化(如 6 卡)。
  • 长上下文:在超长上下文下保持预填充与吐字速度的稳定,并降低计算缓冲的显存占用。
  • 投机解码:实现 DFlash2 投机解码的完整链路,优化采样与每轮开销,提升吐字速度。
  • 计算内核:优化 SM70 计算内核并适配 Q8_0 量化格式,同时进行算子融合。
  • 平台适配:针对 IBM AC922 的 NVLink 互联与 NUMA 内存架构进行适配。
  • 多路并发:多路请求时吐字优先、限制提示词处理占用的时间,多路的解码批次、投机解码与显存预留都按路数优化。
  • 多模态:支持视觉模块(mmproj)在 GPU 上运行,处理图片、PDF 与视频。
  • 大 MoE 模型(2.0.0):专家并行与张量并行结合的多卡切分;显存放不下的专家放在锁页主机内存,由 GPU 直接读取并按 NUMA 节点放置;按路由画像决定哪些专家常驻显存、各卡分配哪些专家;MTP 投机解码与稀疏注意力针对 V100 优化。

致谢

感谢群友 umacro、看透、天语星落、lsaac。 没有他们提供的测试机设备与 token,本项目不会这么快实现。

参与开发:仓库作者(发起项目,提供硬件与测试环境,确定目标与取舍);外部贡献者 天语星落(ATIVX928)(PR #1、PR #2)。参考的项目与使用的 AI 助手见文末致谢。


2.0.0 更新内容

2.0.0 新增大 MoE 模型 Qwen3.8-Flash-Next 的 V100 专项支持;Qwen3.8-27B 的功能不变,并带上下一节的修复。本版支持的大 MoE 配置:6 × V100-16GB + Qwen3.8-Flash-Next UD-Q4_K_XL + MTP 草稿(Q4_K_M) 是标准配置,本页与详情页的实测数据都来自它;4 × V100-32GB(x86,PCIe) 可以运行,专家全部常驻显存、不走主机内存(参考数据见 MoE 详情页);其他卡数、其他量化(如 Q8_0 主模型)与更多模型后续陆续兼容。

  • 大 MoE 模型 Qwen3.8-Flash-Next:多卡 --split-mode tensor 时,路由专家按专家分到各卡(专家并行),注意力、线性注意力、共享专家等稠密部分按张量并行。推荐配置为 6 张 16 GB 的 V100、上下文 262144、带 MTP 投机解码。
  • 专家放在显存与主机内存两级:启动时按每张卡剩下的显存自动决定每层常驻显存的专家,其余放在 GPU 能直接读取的锁页主机内存里、仍由 GPU 计算,不需要 --n-cpu-moe / -ot;锁页内存按 GPU 所在的 CPU 节点(NUMA)分配和填充。
  • 专家路由画像:--expert-profile 按一份路由统计把最常用的专家留在显存,并据此调整专家在各卡之间的分配,使各卡的计算量接近;scripts/v100-expert-profile.sh 用一段校准文本生成画像。
  • n-gram 嵌入表放主机内存:模型的 n-gram 嵌入表与词嵌入表放在锁页主机内存,各卡共用一份、由 GPU 直接查表,不占显存。
  • 稀疏注意力(QSA):全注意力层只对索引器选出的位置做注意力(此前的上游实现在 V100 上按全部上下文计算),计算缓冲不再随上下文线性增长,262144 上下文可以在 16 GB 的卡上运行。
  • MTP 投机解码的 V100 优化:草稿链在 GPU 上连续执行、每轮只回传一次结果;草稿层只看最近的若干位置(新参数 --spec-draft-window);草稿上下文可以单独设物理批大小(新参数 --spec-draft-ubatch)。
  • 内核与运行时:预填充的专家矩阵乘使用 Volta 张量核的融合内核;吐字时合并多个小算子;多卡执行计划第一次运行时由各卡的发射线程并行提交。

实测(2026-10-11,IBM AC922 + 6 × V100-SXM2-16GB,构建 4d50148cc;上下文 262144、带 MTP 与专家路由画像;约 20 万 token 真实代码,新起服务、温度 0、不开思考,输出 686 token 时自然结束):预填充 2334.8 / 2340.8 tok/s,吐字 107.9 / 109.7 tok/s。同一台机器上,大 MoE 的约 20 万 token 预填充比 27B 高约 13%,吐字约为 27B 的 87%。


27B 修复内容

  • 开启 top-k 输出时每批重新规划显存(1.1.1 中已存在):目标模型开启 top-k 输出(设备端 top-k 或拒绝采样)时,没有输出行的预填充批与预留的计算图不一致,每批都会重新规划显存并让全部 GPU 同步。27B 现有的 DFlash2 配置不触发,实测修复前后无差别;这项修复为 27B 以后支持 MTP 预先处理。
  • 层切分 + DFlash2 启动即失败(1.1.1 中已存在):--split-mode layer 配合 DFlash2 草稿时启动失败;现在可以启动,启动时的显存规划同时计入 DFlash2 草稿的隐状态缓冲。
  • 其他:ggml 分配器在只作叶子出现的输入变大时会覆盖相邻内存的问题;POWER9(ppc64le)上 CPU 计算 IQ1_S 点积的结果错误(只影响 CPU 计算,GPU 推理不受影响)。

实测(2026-10-11,IBM AC922 + 6 × V100-SXM2-16GB;1.1.1 与 2.0.0 构建 4d50148cc 同一时段交替各两轮;上下文 262144、DFlash2,条件见 27B 详情页):短提示吐字 186.2 / 188.9 → 218.3 / 206.9 tok/s;约 1.6 万 token 预填充 2863.4 / 2842.7 → 3119.1 / 3121.1 tok/s;约 20 万 token 预填充 2047.8 / 2047.1 → 2066.6 / 2063.2 tok/s、吐字 114.5 / 115.6 → 122.2 / 127.0 tok/s。


测试平台

标准测试机(两个详情页的主要数据都在这台机器上测):IBM Power AC922,2 × POWER9,96 GB 内存(两个 CPU 节点各 48 GB),6 × Tesla V100-SXM2-16GB,CUDA 12.4。每颗 CPU 连 3 张 GPU,同一颗 CPU 下的 GPU 之间 NVLink 直连;GPU 与 CPU 之间是 NVLink 2.0。

参考主机(x86):4 × Tesla V100-SXM2-32GB(GPU 之间 NVLink 全互联,GPU 与主机之间 PCIe 3.0,136 GB 内存,CUDA 12.8),用于大 MoE 的 4 卡参考数据;2 × Tesla V100-SXM2-16GB(NVLink,PCIe 3.0,CUDA 12.8),用于编译与正确性测试。

AC922 与 x86 服务器的基础区别,以及它们对加速效果的间接影响(大 MoE 尤其明显):

IBM AC922x86 服务器
GPU 与主机之间NVLink 2.0(6 卡配置每张 GPU 2 条,理论单向 50 GB/s)PCIe 3.0(x16 理论单向约 16 GB/s)
GPU 显存与系统内存显存作为 NUMA 内存节点并入系统内存,每张 GPU 一个节点显存不并入系统内存
CPU 与 GPU 的归属2 个 CPU 节点,各连 3 张 GPU;跨节点读内存要经过 CPU 之间的总线视主板而定(上面的 4 卡参考主机只有 1 个 NUMA 节点)
  • 页缓存可能占用显存:AC922 上系统把显存当作内存节点,读大文件(例如加载模型)产生的页缓存可能落进 GPU 的节点,CUDA 回收不了,表现为显存不足。所以 AC922 上要用 numactl --membind=<CPU 节点> 启动(例如 0,8),x86 不需要。
  • 可用显存略少:显存并入系统内存时驱动按内存块保留一部分显存,AC922 上每张卡可用的显存比同型号卡在 x86 上少一些;对大 MoE 来说,显存少一点就意味着更多专家要放在主机内存。
  • 主机内存里的专家经 NVLink 读取:16 GB 的卡放不下全部专家,吐字时用到主机内存里的专家要由 GPU 搬进显存再算。AC922 的 GPU 与主机之间的带宽约为 PCIe 3.0 的 3 倍(理论值),专家放在主机内存的代价因此小得多;跨 CPU 节点读取更慢。
  • 锁页内存的放置:主机内存里的专家与 n-gram 嵌入表都放在锁页内存。程序启动时按 GPU 所在的 CPU 节点分配和填充这些内存,并实测各 GPU 读取各节点的速度来决定放置;只有一个 NUMA 节点的机器没有这项差别。

当前是通用版本,同一套代码在 AC922 与 x86 上运行;之后会按架构分别优化。


交流群

扫描下方二维码添加微信,拉你进交流群,与群友讨论更多使用方法。

微信二维码

版本与许可

版本

  • 当前版本 2.0.0(发布日期 2026-10-12),各版本的更新内容见 CHANGELOG.md。
  • 编译方法、Releases 页面的 x86_64 Linux 预编译程序,以及 Docker 镜像 ghcr.io/1115714829/llama.cpp-v100:2.0.0(同一标签含 x86_64 与 IBM Power AC922)见两个详情页。
  • 1.1.1 及更早版本的完整说明(27B 在 2~6 卡、Q4 配置、多路并发、多模态等的测试表)见对应标签的 README,例如 v100-1.1.1。

许可

本项目自 2.0.0 起采用 GPL-3.0 许可(全文见 LICENSE);1.1.1 及更早版本为 MIT。上游 llama.cpp 的 MIT 许可文本保留在 licenses/LICENSE-llama.cpp,移植的第三方代码保留各自原许可,出处与许可见各文件头与 licenses/README.md。


致谢(项目与 AI 助手)

  • 参考与借鉴的项目:llama.cpp / ggml(本项目的基础框架);1Cat-vLLM(V100 工程实践的参考,早期部分 SM70 内核移植自它,出处与许可见各文件头与 licenses/);Strata 及其 AC922 分支 Strata-AC922(大 MoE 的专家融合矩阵乘、QSA 选择与注意力等内核移植自它们,专家缓存与预填充环参考其设计,出处与许可见各文件头与 licenses/);vLLM(投机解码等设计的参考)。
  • AI 助手:开发过程由 Claude、DeepSeek、小米 MiMo、MiniMax 协作完成。
cuda
gguf
llama-cpp
llm-inference
local-llm
long-context
mixture-of-experts
moe
mtp
multi-gpu
multimodal
qwen
qwen3
sm70
speculative-decoding
tensor-parallelism
tesla-v100
v100
volta