跳到主要内容

推理运行时

llama.cpp 本地部署:一张 24GB 卡,跑通量化、服务与多卡并行

GGUF 量化把 8B 模型压到 4.58GB,把 27B 压到 19GB。剩下的问题只有两个:你需要哪张卡,它每小时多少钱。

llama.cpp 是 ggml-org 维护的 C/C++ 推理引擎,MIT 许可,版权署名 The ggml authors。它没有 Python 依赖,编译产物就是一组能直接扔到裸机上跑的二进制。构建号以 bXXXX 递增,一天能出好几个 tag——DeepSeek V4 的 -sm tensor 支持、GLM-4.5-Air 的修复、Mamba2 把投影层展平成 GEMM 的优化,都是这样几天之内进主干的。这也是它和「等一个官方推理框架适配」最大的区别。

但入口已经不是 2024 年那套了。官方快速上手现在是统一的 llama 命令:llama cli -hf ggml-org/Qwen3.5-0.8B-GGUF 直接拉模型开聊,llama serve -hf ... 起 OpenAI 兼容服务;纯文本补全被拆到独立的 llama-completion。-ngl 和 -fa 的默认值都改成了 auto,不用再手数层数。所以网上贴 ./main 或 -no-cnv 的老教程,照抄大概率跑不起来。

真正决定你租哪张卡的,不是参数量,是 GGUF 文件体积加 KV 缓存。Llama-3.1-8B 的 f16 KV 缓存是每 token 128KB(8 个 KV head × 128 维 × K/V 两份 × 2 字节 × 32 层),32K 上下文就要吃掉 4GB;再加上 -np 并发 slot、mmproj 视觉投影和 MTP 草稿权重,24GB 常常比你以为的紧。NexGPU 有 1,175 个已验证可租节点、2,498 张卡、75 种型号,从 $0.188/卡·时 的 Tesla V100 32GB 到 141GB 的 H200 都能按秒起停——先租一小时量准,再决定长期方案。

01 —

GGUF 量化档位:官方实测的位宽与体积

位宽与 8B 体积取自 llama.cpp 仓库 tools/quantize 的实测表(基准模型 meta-llama/Llama-3.1-8B);27B 与 12B 一列取自 ggml-org 在 Hugging Face 上发布的 GGUF 实际文件大小。

版本参数量显存上下文说明
Q4_K_M4.8944 bpw8B 4.58GB | 27B 19GB8B 配 q8_0 KV:24GB 卡可冲 128K默认首选。几乎所有 GGUF 发布页都把它排在第一位,质量与体积的拐点就在这一档。
IQ4_XS4.4597 bpw8B 4.17GB比 Q4_K_M 多留约 0.4GB 给 KV显存卡在边缘时用的 i-quant,靠 imatrix 重要性矩阵把精度补回来,解码侧开销略高于 K-quant。
Q5_K_M5.7036 bpw8B 5.33GB8B 配 f16 KV:24GB 卡约 96K怀疑 Q4 掉点、又不想付 Q8 体积时的中间档,常用来做 A/B 对照。
Q6_K6.5633 bpw8B 6.14GB32GB 的 RTX 5090 上 8B 可开满 128K质量已经贴着 Q8,体积少 1.8GB。32GB 单卡跑 8B 长上下文时最合适。
Q8_08.5008 bpw8B 7.95GB | 27B 28.6GB | 30B-A3B 33.6GB27B 在 48GB 卡上仍余约 19GB 给 KV近无损基线。评估量化掉点时该拿它做参照,而不是拿 F16——F16 的体积会让对照实验贵一倍。
F16 / BF1616.0005 bpw8B 14.96GB | 12B 23.8GB | 27B 53.8GB12B BF16 已顶满 24GB,需 48GB 起量化与 imatrix 校准的源头。gemma-4-12B-it 的 BF16 是 23.8GB,24GB 卡装得下权重也装不下 KV,别硬试。

02 —

按量化档位选卡:NexGPU 实价对照

先算 GGUF 体积加 KV 缓存,再选卡。下面每一档都留了并发 slot 和计算缓冲的余量。

  • 8B–12B 的 Q4_K_M 单卡冒烟测试与接口联调

    RTX 3090 24GB$0.193/卡·时

    sm_86 是 llama.cpp CUDA 后端打磨最久的架构之一,4.58GB 权重全量卸载后还剩十几 GB 喂 KV,是最便宜的 24GB 起步位。

  • 27B Q4_K_M 带 mmproj 视觉投影跑长上下文

    RTX A6000 48GB$0.817/卡·时

    19GB 权重加 931MB 的 mmproj 一张卡吃得下,剩下二十多 GB 全给 KV 和 -np 并发 slot,完全不用碰多卡拆分。

  • Q8_0 的 27B 或 30B-A3B MoE 做质量对照与压测

    A100 PCIE 80GB$0.824/卡·时

    28.6GB / 33.6GB 的 Q8_0 权重装完仍余 45GB 以上,sm_80 的 Flash Attention 内核成熟,llama-bench 跑出来的数字可复现。

  • BF16 大模型多卡张量并行(-sm tensor + NCCL)

    H100 SXM 80GB$3.582/卡·时

    官方文档明确写着 -sm tensor 需要高速互联,只有 SXM 的 NVLink 撑得住;NexGPU 单节点最多可挂 14 张卡,节点显存上限 2,152GB。

03 —

从空机器到 OpenAI 兼容接口:四步

在 NexGPU 开一台带 NVIDIA 卡的实例,SSH 或 Web 终端进去照抄即可。

  1. 01

    装 llama.cpp:官方 CUDA 镜像最省事

    ghcr.io 上有 full / light / server 三个变体,各自还分 CUDA 12 与 CUDA 13。注意 RTX 5090 是 Blackwell(sm_120),必须走 CUDA 13 那一路,否则加载模型时会直接报 no kernel image is available for execution。

    docker run --gpus all -p 8080:8080 -v $PWD/models:/models ghcr.io/ggml-org/llama.cpp:server-cuda13 -m /models/model.gguf --host 0.0.0.0
  2. 02

    自己编时把计算能力显式锁死

    GGML_NATIVE 默认按当前机器优化,二进制换台机器就可能不认。要在多种卡之间搬运就关掉它,并把计算能力一次列全:3090 / A10 / A6000 是 86,4090 是 89,A100 是 80,H100 与 H200 是 90,5090 是 120,V100 是 70,P40 是 61。

    cmake -B build -DGGML_CUDA=ON -DGGML_NATIVE=OFF -DCMAKE_CUDA_ARCHITECTURES="61;70;80;86;89;90;120" && cmake --build build --config Release -j
  3. 03

    让 llama-fit-params 替你算显存

    不用再猜 -ngl 给多少。它读设备可用显存,直接吐出一串能用的参数:压下来的 -c、算好的 -ngl,以及把哪几层 FFN 甩回 CPU 的 -ot 规则,管道接给 llama-server 就能跑。

    ./build/bin/llama-fit-params --model /models/model.gguf | tee args.txt && cat args.txt | xargs ./build/bin/llama-server --model /models/model.gguf
  4. 04

    起服务并对外暴露

    llama-server 提供 /v1/chat/completions、/v1/completions、/v1/embeddings,以及 Anthropic 风格的 /v1/messages,还自带 WebUI。-np 开并发 slot 走连续批处理,--jinja 用模型自带模板,KV 缓存转 q8_0 可以再省近一半显存。对外暴露一定要加 --api-key。不带 -m 直接起还会进 router 模式,按请求里的 model 字段自动装载,--models-max 默认同时留 4 个实例。

    llama serve -hf ggml-org/gemma-4-12B-it-GGUF:Q8_0 --host 0.0.0.0 --port 8080 -c 32768 -np 4 --jinja -ctk q8_0 -ctv q8_0 --api-key $LLAMA_KEY

一次完整量化实验要花多少钱

拿 Llama-3.1-8B 走一遍完整流程:下 14.96GB 的 F16 权重约 15 分钟,llama-imatrix 跑重要性矩阵约 40 分钟,llama-quantize 一次出 Q4_K_M(4.58GB)、Q5_K_M(5.33GB)、IQ4_XS(4.17GB)三档约 15 分钟,再用 llama-perplexity 各测一遍约 50 分钟,合计约 2 小时。放在 RTX 4090 24GB 上是 2 × $0.540 = $1.08;不赶时间换 RTX 3090 24GB,就是 2 × $0.193 = $0.386。把 4.58GB 的 Q4_K_M 拉回本地,出网按中位价 4.58 × $0.0081 ≈ $0.04。真正会咬人的是存储:19GB 的 27B 权重留在盘上一个月是 19 × $0.414 ≈ $7.87,比机器本身贵得多——算力在实例停掉那一秒就停止计费,存储要销毁卷才停。所以正确姿势是跑完把量化产物推回 Hugging Face,下次用 -hf 重新拉,而不是长期挂盘。按秒计费、无最低消费、无开通费、不用申请配额,一次实验的门槛就是这么低。

04 —

常见问题

llama.cpp 本地部署到底需要多大显存?一张 24GB 的卡能跑多大的模型?

按 GGUF 文件体积加 KV 缓存算,不要按参数量算。官方实测表里 Llama-3.1-8B 的 Q4_K_M 是 4.58GB、Q8_0 是 7.95GB、F16 是 14.96GB;27B 级别的 Qwen3.8-27B 是 Q4_K_M 19GB、Q8_0 28.6GB、BF16 53.8GB。KV 缓存另算:8B 在 f16 下每 token 约 128KB,32K 上下文就是 4GB。结论是一张 24GB 卡舒服跑 14B 的 Q4_K_M,勉强够 27B 的 Q4_K_M(KV 必须转 q8_0),27B 想开长上下文就该上 48GB。NexGPU 上 RTX 3090 24GB 是 $0.193/卡·时、RTX A6000 48GB 是 $0.817/卡·时,按秒计费,先租一小时把数字量准,再决定长期方案。

llama.cpp 和 vLLM、Ollama 比,什么时候该选它?

llama.cpp 的强项是量化密度和硬件覆盖面:1.5-bit 到 8-bit 的整数量化、CPU+GPU 混合推理、CUDA / HIP / Metal / Vulkan / WebGPU / SYCL / CANN 等十几个后端,编译产物是无 Python 依赖的二进制。vLLM 的强项是高并发下的吞吐。所以单卡、显存紧、要塞下比卡更大的模型、或者要在杂牌硬件上跑,选 llama.cpp;几十路并发压满 A100 / H100,选 vLLM。Ollama 本身就是 llama.cpp 的封装,一旦你需要 -ot、--n-cpu-moe、-sm tensor 这种细粒度控制,就得直接用 llama.cpp。NexGPU 两边都能开:vLLM 有现成预置镜像,llama.cpp 直接拉官方 ghcr 镜像,同一台机器上换着测最省事。

网上教程里的 ./main 和 llama-cli -p 为什么跑不通了?

命令行入口重构过。现在官方快速上手是统一的 llama 命令——llama cli -hf ggml-org/Qwen3.5-0.8B-GGUF 直接从 Hugging Face 拉起对话,llama serve -hf ... 起 OpenAI 兼容服务;原来 ./main / -no-cnv 那套纯文本补全被拆到了独立的 llama-completion。另外 -ngl 和 -fa 的默认值都已经是 auto,不用再手数层数。二进制层面 llama-cli、llama-server、llama-completion 都还在,只是语义分工变了。安装方式也多了:winget install llama.cpp、brew install llama.cpp、conda-forge、nix 都可以。在 NexGPU 开一台按秒计费的实例,半小时就能把新旧写法都验一遍。

RTX 5090 上跑 llama.cpp 报 no kernel image is available for execution 怎么办?

5090 是 Blackwell,计算能力 sm_120,比它早的预编译二进制里根本没编进这个架构。两条路:用官方 Docker 的 CUDA 13 变体(把 :server-cuda 换成 :server-cuda13),或者自己编时显式加 -DCMAKE_CUDA_ARCHITECTURES="120"。同类问题也会出现在老卡上——Tesla P40 是 sm_61、V100 是 sm_70,而且 P40 没有快速 FP16 通路,得靠 llama.cpp 的 MMQ 整数内核才跑得动。最省事的做法是 -DGGML_NATIVE=OFF 加一串架构号一次编全。NexGPU 上 RTX 5090 32GB $0.723/卡·时、Tesla V100 32GB $0.188/卡·时、Tesla P40 24GB $0.214/卡·时,这些架构差异都能实机验,不必买卡回来试。

显存差一点点装不下,llama.cpp 有哪些省显存的办法?

按代价从小到大排:先把 KV 缓存降精度,-ctk q8_0 -ctv q8_0 能省掉近一半 KV 显存(可选类型还有 q4_0、q5_0、iq4_nl、bf16 等,默认是 f16);再换更省的量化档,IQ4_XS 比 Q4_K_M 每 8B 少约 0.4GB;MoE 模型用 --n-cpu-moe N 把前 N 层的专家权重留在 CPU,权重大头一下就搬走了;更精细的用 -ot 按张量名正则指定谁去 CPU;实在只差一点,Linux 上可以设 GGML_CUDA_ENABLE_UNIFIED_MEMORY=1 让它溢出到系统内存,代价是掉速。懒得试就直接跑 llama-fit-params,它把这些参数算好打印出来。或者干脆在 NexGPU 上换一张更大的卡:A100 PCIE 80GB 才 $0.824/卡·时,省下的调参时间比差价值钱。

llama.cpp 多卡怎么用?-sm layer 和 -sm tensor 该选哪个?

默认是 -sm layer,流水线并行,每张卡拿一段连续层、KV 留在本卡,对互联带宽不挑,显存受限和追求 prefill 速度时用它,还能用 -ts 3,1 手工调分配比例。-sm tensor 是新的张量并行,权重和 KV 都切开,大稠密模型下解码更快,但文档明确要求高速互联,装了 NCCL 才发挥得出来,还可以配 GGML_CUDA_P2P=1 打开点对点传输(个别 BIOS/IOMMU 组合会崩,崩了就关掉)。老的 -sm row 已经不推荐,用 tensor 取代。想认真验张量并行就得要 NVLink:NexGPU 的 H100 SXM 80GB 是 $3.582/卡·时,单节点最多 14 张卡、节点显存上限 2,152GB,开两小时就能把 layer 与 tensor 两种模式的数字压出来,用完即停。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。