大模型本地部署指南

llama.cpp 实战指南:从源码编译到多模型 Router 部署

> 本文系统介绍基于 llama.cpp 框架构建本地大语言模型推理服务的全流程,涵盖源码编译、模型下载、多模型 Router 部署、API 调用接口及性能优化策略。

1. 技术选型分析

1.1 llama.cpp 与其他框架对比

本地大语言模型推理框架主要有 llama.cpp、Ollama、vLLM 等方案。各框架特性对比如下:

| 特性 | llama.cpp | Ollama | vLLM |

|------|-----------|--------|------|

| 量化等级支持 | 支持 GGUF 全量化格式 | 支持官方预设量化等级 | 支持 4/8-bit 量化 |

| 上下文长度 | 完全可调 | 受预设限制 | 可配置 |

| 多模态支持 | 原生支持(--mmproj) | 依赖版本更新 | 需额外框架集成 |

| 工具调用 | 原生支持(--jinja) | 依赖版本更新 | 需额外框架集成 |

| 推理引擎 | C/C++ | 封装 llama.cpp | Python + CUDA |

| 显存占用 | 最低 | 中等 | 较高 |

**选型结论**:Ollama 封装了 llama.cpp,存在版本滞后及参数受限的问题;vLLM 注重高吞吐场景但显存占用较高;llama.cpp 提供底层控制能力,适合对推理参数有精细化需求的场景。


2. 安装与编译

2.1 环境要求

| 组件 | 版本要求 |

|------|----------|

| NVIDIA 驱动 | ≥ 535 |

| CUDA Toolkit | ≥ 11.8 |

| CMake | ≥ 3.18 |

| GCC/G++ | ≥ 8(推荐 10+) |

| GPU 显存 | ≥ 24GB(RTX 3090 / 4090 / A5000) |

| 系统内存 | ≥ 32GB(推荐 64GB) |

2.2 克隆源码

```bash

git clone https://github.com/ggml-org/llama.cpp.git

cd llama.cpp

git pull origin master # 确保获取最新版本

```

> **版本管理说明**:llama.cpp 更新频率较高,建议持续跟踪 `master` 分支以获取最新模型架构支持。若需版本稳定性,可切换至特定 release tag:

>

> ```bash

> git tag -l --sort=-version:refname | head -20 # 查看可用版本

> git checkout b5011 # 切换到指定版本

> ```

2.3 配置编译选项

```bash

RTX A5000 (Ampere 架构, SM 86)

cmake -B build \

-DGGML_CUDA=ON \

-DCMAKE_CUDA_ARCHITECTURES=86 \

-DLLAMA_SERVER_VERBOSE_LOGS=ON \

-DGGML_CUDA_GRAPHS=ON \

-DGGML_CUDA_PEER_MAX_BATCH_SIZE=128 \

-DLLAMA_CURL=ON

```

**GPU 架构参数参考:**

| GPU 型号 | 架构 | CMAKE_CUDA_ARCHITECTURES |

|----------|------|--------------------------|

| RTX 3090 / 3080 | Ampere | `86` |

| RTX 4090 / 4080 | Ada | `89` |

| A5000 / A4000 | Ampere | `86` |

| H100 | Hopper | `90` |

| 动态检测 | --- | `nvidia-smi --query-gpu=compute_capability --format=csv,noheader \| cut -d. -f1,2 \| tr -d '. '` |

**编译参数说明:**

| 参数 | 说明 |

|------|------|

| `-DGGML_CUDA=ON` | 启用 CUDA GPU 加速(必选) |

| `-DCMAKE_CUDA_ARCHITECTURES=xx` | 指定 GPU 计算能力,生成针对性优化代码 |

| `-DLLAMA_SERVER_VERBOSE_LOGS=ON` | 输出服务端详细日志,便于调试 |

| `-DGGML_CUDA_GRAPHS=ON` | 启用 CUDA Graphs 优化,提升推理速度 |

| `-DGGML_CUDA_PEER_MAX_BATCH_SIZE=128` | 多卡 P2P 通信优化(单卡环境保留无副作用) |

| `-DLLAMA_CURL=ON` | 启用通过 HTTP 加载模型的能力 |

> **编译模式说明**:

> - 纯 CPU 编译:`cmake -B build -DGGML_CUDA=OFF`

> - 多架构兼容编译:`-DCMAKE_CUDA_ARCHITECTURES="86;89;90"`(增加编译时间与产物体积)

2.4 执行编译

```bash

cmake --build build --config Release -j$(nproc)

```

编译耗时参考(16 核服务器):

  • 首次编译:约 3~5 分钟

  • 增量编译(`git pull` 后):约 1~2 分钟

2.5 验证编译结果

```bash

查看编译产物

ls -la build/bin/llama-*

检查版本信息

build/bin/llama-server --version

检查 GPU 识别

build/bin/llama-perf 2>&1 | head -20

```

正常输出示例:

```

Available CUDA GPUs:

GPU 0 - NVIDIA RTX A5000 (23.75 GiB)

```


3. 模型下载与管理

3.1 GGUF 格式发布者

在 [HuggingFace](https://huggingface.co) 或 [ModelScope](https://modelscope.cn) 搜索目标模型,确认提供 GGUF 格式。

| 发布者 | 特点 |

|--------|------|

| [unsloth](https://huggingface.co/unsloth) | 高质量量化,推荐首选 |

| [bartowski](https://huggingface.co/bartowski) | 社区主流,格式统一 |

| [TheBloke](https://huggingface.co/TheBloke) | 经典量化方案 |

3.2 量化等级选择

| 量化等级 | 精度 | 文件体积(以 27B 为例) | 适用场景 |

|----------|------|------------------------|----------|

| Q3_K_M | 约 4.04 BPW | ~13 GB | 快速推理、显存受限 |

| Q4_K_M | 约 5.06 BPW | ~16 GB | 高精度推理(推荐) |

| Q5_K_M | 约 5.96 BPW | ~19 GB | 需要更高精度 |

| Q8_0 | 约 8.00 BPW | ~27 GB | 几乎无损 |

3.3 模型下载示例(Qwen3.6-27B)

推荐国内源(ModelScope,无需代理):

```bash

关闭代理(国内源不需要)

source ~/proxy.sh off 2>/dev/null || true

mkdir -p ~/program/LLM/models/qwen3.6-27b

下载主模型

wget -c -O models/qwen3.6-27b/Qwen3.6-27B-Q3_K_M.gguf \

"https://www.modelscope.cn/models/unsloth/Qwen3.6-27B-GGUF/resolve/master/Qwen3.6-27B-Q3_K_M.gguf"

下载视觉投影器(多模态模型需要)

wget -c -O models/qwen3.6-27b/mmproj-F16.gguf \

"https://www.modelscope.cn/models/unsloth/Qwen3.6-27B-GGUF/resolve/master/mmproj-F16.gguf"

```

> 国内源下载速率通常在 10~30 MB/s;HuggingFace 经代理后速率可能仅数百 KB/s。


4. 模型管理与多模型部署

4.1 目录结构建议

```

~/program/LLM/

├── llama.cpp/ # 推理引擎

├── models/

│ ├── qwen3.6-27b/ # Q3_K_M 量化(快速推理)

│ │ ├── Qwen3.6-27B-Q3_K_M.gguf

│ │ └── mmproj-F16.gguf

│ ├── qwen3.6-27b-q4km/ # Q4_K_M 量化(高精度)

│ │ ├── Qwen3.6-27B-Q4_K_M.gguf

│ │ └── mmproj-F16.gguf

│ ├── glm4-9b-chat/ # 其他模型...

│ │ └── glm4-9b-chat.Q4_K_M.gguf

│ └── llama3.1-8b/

│ └── llama-3.1-8b-instruct.Q4_K_M.gguf

├── scripts/ # 管理脚本

│ ├── start-router-server.sh

│ ├── stop-router-server.sh

│ └── test-api.sh

└── README.md

```

4.2 Router Mode:单进程多模型管理

llama.cpp 的 **Router Mode** 支持单进程管理多个模型,实现按需加载/卸载及空闲自动释放显存。

**预设配置文件** `router-preset.ini`:

```ini

\*

cache-type-k = q8_0

cache-type-v = q8_0

flash-attn = on

Qwen3.6-27B-Q4_K_M

; 默认模型(不指定 model 时使用)

model = ~/program/LLM/models/qwen3.6-27b-q4km/Qwen3.6-27B-Q4_K_M.gguf

mmproj = ~/program/LLM/models/qwen3.6-27b-q4km/mmproj-F16.gguf

alias = default

reasoning = on

jinja = 1

mlock = 1

sleep-idle-seconds = 60

batch-size = 2048

ctx-size = 131072

threads = 16

ubatch-size = 512

Qwen3.6-27B-Q3_K_M

model = ~/program/LLM/models/qwen3.6-27b/Qwen3.6-27B-Q3_K_M.gguf

mmproj = ~/program/LLM/models/qwen3.6-27b/mmproj-F16.gguf

reasoning = on

jinja = 1

mlock = 1

sleep-idle-seconds = 60

batch-size = 2048

ctx-size = 131072

threads = 16

ubatch-size = 512

GLM-4-9B

model = ~/program/LLM/models/glm4-9b-chat/glm4-9b-chat.Q4_K_M.gguf

jinja = 1

mlock = 1

sleep-idle-seconds = 120

batch-size = 2048

ctx-size = 131072

threads = 16

ubatch-size = 512

LLaMA-3.1-8B

model = ~/program/LLM/models/llama3.1-8b/llama-3.1-8b-instruct.Q4_K_M.gguf

jinja = 1

mlock = 1

sleep-idle-seconds = 120

batch-size = 2048

ctx-size = 131072

threads = 16

ubatch-size = 512

```

**启动 Router Server:**

```bash

~/program/LLM/llama.cpp/build/bin/llama-server \

--host 0.0.0.0 \

--port 8080 \

--models-preset router-preset.ini \

--jinja \

--flash-attn on \

--cache-type-k q8_0 \

--cache-type-v q8_0 \

--mlock \

--no-mmap \

--sleep-idle-seconds 60

```

**Router Mode 特性:**

  • 不指定 `model` 参数时,默认使用标记为 `alias = default` 的模型

  • 在请求中指定 `"model": "Qwen3.6-27B-Q3_K_M"` 可切换至对应模型

  • 模型空闲 60 秒后自动卸载,释放显存供其他模型使用

  • Auto-Fitter 自动分配 GPU 层数


5. 单模型快速启动

单模型场景可直接启动:

```bash

~/program/LLM/llama.cpp/build/bin/llama-server \

-m models/qwen3.6-27b/Qwen3.6-27B-Q3_K_M.gguf \

--mmproj models/qwen3.6-27b/mmproj-F16.gguf \

--host 0.0.0.0 --port 8080 \

-c 131072 \

--jinja --flash-attn on --mlock

```

**关键参数说明:**

| 参数 | 说明 |

|------|------|

| `-m <path>` | 主模型 GGUF 路径 |

| `--mmproj <path>` | 视觉投影器路径(多模态必需) |

| `-c 131072` | 上下文长度(128K tokens) |

| `--jinja` | 启用 Jinja chat template 解析(支持工具调用) |

| `--flash-attn on` | Flash Attention,降低 KV Cache 显存占用 |

| `--mlock` | 锁定内存,防止换出到磁盘 |

| `--sleep-idle-seconds 60` | 空闲 60 秒后自动卸载模型 |

> **注意**:27B 模型在 128K 上下文中 KV Cache 已占用数 GB 显存。避免将 `ctx-size` 设置为过大值(如 2000000),否则会导致 OOM。


6. API 接口调用

服务启动后,API 端点:`http://localhost:8080/v1/chat/completions\`

6.1 文本对话

```bash

curl http://localhost:8080/v1/chat/completions \

-H "Content-Type: application/json" \

-d '{

"model": "Qwen3.6-27B-Q3_K_M",

"messages": [

{"role": "user", "content": "解释量子计算的基本原理"}

],

"temperature": 0.7,

"max_tokens": 512

}'

```

6.2 视觉理解(图像输入)

```bash

IMAGE_B64=$(base64 -w 0 photo.jpg)

curl http://localhost:8080/v1/chat/completions \

-H "Content-Type: application/json" \

-d '{

"model": "Qwen3.6-27B-Q3_K_M",

"messages": [

{

"role": "user",

"content": [

{"type": "text", "text": "描述这张图片里的内容"},

{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,'"${IMAGE_B64}"'"}}

]

}

],

"max_tokens": 256

}'

```

6.3 工具调用(Function Calling)

```bash

curl http://localhost:8080/v1/chat/completions \

-H "Content-Type: application/json" \

-d '{

"model": "Qwen3.6-27B-Q3_K_M",

"messages": [

{"role": "user", "content": "上海明天天气如何?"}

],

"tools": [

{

"type": "function",

"function": {

"name": "get_weather",

"description": "获取指定城市的天气",

"parameters": {

"type": "object",

"properties": {

"city": {"type": "string", "description": "城市名"}

},

"required": ["city"]

}

}

}

],

"max_tokens": 256

}'

```

返回结果中 `message.tool_calls` 包含函数名称及调用参数。

6.4 模型切换(Router Mode)

```bash

使用默认模型(Q4_K_M 高精度)

curl http://localhost:8080/v1/chat/completions \

-d '{"messages":[{"role":"user","content":"你好"}]}'

切换到 Q3_K_M 快速推理

curl http://localhost:8080/v1/chat/completions \

-d '{"model":"Qwen3.6-27B-Q3_K_M","messages":[{"role":"user","content":"你好"}]}'

切换到 GLM-4-9B

curl http://localhost:8080/v1/chat/completions \

-d '{"model":"GLM-4-9B","messages":[{"role":"user","content":"你好"}]}'

```


7. 性能优化

7.1 降低推理延迟

```bash

增大 batch size 加速 prompt 处理

-b 4096 -ub 1024

启用多用户并发

--parallel 4

```

7.2 降低显存占用

```bash

缩短上下文窗口

-c 32768

KV Cache 量化(节省约 50% 显存)

--cache-type-k q8_0 --cache-type-v q8_0

减少 GPU 层数

-ngl 60

```

7.3 提升吞吐量

```bash

--parallel 4 # 增加并发槽位

```


8. 故障排除

8.1 `unable to load model: unknown model architecture 'xxx'`

**原因**:llama.cpp 版本过旧,不支持当前模型架构。

**解决方案**:更新 llama.cpp 源码并重新编译:

```bash

cd ~/program/LLM/llama.cpp

git pull

cmake --build build --config Release -j$(nproc)

```

8.2 `CUDA out of memory`

**原因**:上下文窗口过长或模型体积超出可用显存。

**解决方案**:

  1. 降低上下文窗口:`-c 32768`

  2. KV Cache 量化:`--cache-type-k q8_0 --cache-type-v q8_0`

  3. 减少 GPU 层数:`-ngl 60`

8.3 端口占用

```bash

查找占用 8080 端口的进程

lsof -i :8080

终止所有 llama-server 进程

pkill -f llama-server

```

8.4 模型输出为空(content = "")

**原因**:Qwen3.6 默认启用 thinking 模式,输出写入 `reasoning_content` 字段。

**解决方案**:启动参数添加 `--reasoning off`。


9. 日常维护

9.1 更新 llama.cpp

```bash

cd ~/program/LLM/llama.cpp

git pull origin master

cmake --build build --config Release -j$(nproc)

```

9.2 安装新模型

  1. 从 HuggingFace / ModelScope 下载 GGUF 文件

  2. 放置至 `models/新模型名/` 目录

  3. 若使用 Router Mode,在 preset 配置文件中添加新模型配置段

  4. 重启服务

9.3 查看模型元数据

```bash

llama.cpp/build/bin/llama-gguf models/qwen3.6-27b/Qwen3.6-27B-Q3_K_M.gguf r

```

关键元数据字段:

  • `general.architecture` --- 模型架构标识(如 `qwen35`、`llama`、`gemma3`)

  • `general.name` --- 模型名称

  • `tokenizer.chat_template` --- 是否包含 chat template


10. 参考链接

  • llama.cpp GitHub\](https://github.com/ggml-org/llama.cpp)

  • unsloth/Qwen3.6-27B-GGUF (ModelScope)\](https://www.modelscope.cn/models/unsloth/Qwen3.6-27B-GGUF)

  • 本项目代码仓库 (Gitee)\](https://gitee.com/jedi-knight/LLM)

> **作者**:jedi-knight

> **项目地址**:https://gitee.com/jedi-knight/LLM

> **许可证**:MIT

相关推荐
ai产品老杨1 小时前
深度解析:基于异构计算的工业级AI视频中台架构,如何实现GB28181/RTSP跨平台部署与源码交付?
人工智能·架构·音视频
Rubin智造社1 小时前
04月25日AI每日参考:谷歌豪掷400亿押注Anthropic,DeepSeek V4横空出世
大数据·人工智能·物联网·comfyui·deepseek v4·谷歌anthropic投资·meta亚马逊芯片
geneculture1 小时前
本真信息观:基于序位守恒的融智学理论框架——人类认知第二次大飞跃的基础
人工智能·算法·机器学习·数据挖掘·融智学的重要应用·哲学与科学统一性·融智时代(杂志)
俊哥V2 小时前
每日 AI 研究简报 · 2026-04-25
人工智能·ai
szxinmai主板定制专家2 小时前
基于RK3588超小体积,轻巧,长续航的无人机AI模块,支持视频跟踪
arm开发·人工智能·嵌入式硬件·fpga开发·无人机
我是无敌小恐龙2 小时前
Java SE 零基础入门 Day05 类与对象核心详解(封装+构造方法+内存+变量)
java·开发语言·人工智能·python·机器学习·计算机视觉·数据挖掘
~央千澈~2 小时前
《2026鸿蒙NEXT纯血开发与AI辅助》第五章:选择成熟方案,创建第一个鸿蒙应用并成功运行-卓伊凡
人工智能·华为·harmonyos·harmony·harmony os
ting94520002 小时前
Kimi-VL-A3B-Thinking 技术全解
人工智能·架构