OpenClaw使用llama.cpp本地大模型部署完整教程
前言
本教程基于实际操作整理,适用于 Windows WSL2 环境
全程使用 openclaw 帮我搭建大模型
把大模型跑在本地,听着就挺酷的,但实操起来总有很多坑要踩。好在 llama.cpp 这套工具已经把门槛降得很低了,配合 WSL2 环境,只要跟着步骤来,基本不会出岔子。下面就从零开始,把整个过程梳理一遍。
一、环境准备
1. 硬件要求
| 显卡 | 推荐模型 | 显存占用 |
|---|---|---|
| GTX 1050 Ti (4GB) | Qwen2.5-3B Q4 | ~2.5GB |
| RTX 4060 (8GB) | Qwen2.5-7B Q4 | ~5GB |
| RTX 4090 (24GB) | Qwen2.5-32B Q4 | ~20GB |
显存是硬门槛。4GB 的 1050 Ti 跑 3B 模型刚好,8GB 的 4060 可以上 7B,如果是 4090 那就基本没什么束缚了。选模型前先看一眼自己显卡的显存。
2. 安装编译工具(WSL Ubuntu)
sudo apt update sudo apt install -y cmake build-essential
WSL 里默认不带这些编译工具,第一步就是补上它们。很简单,两条命令搞定。
二、下载和编译 llama.cpp
1. 克隆源码
mkdir -p ~/llama.cpp cd ~/llama.cpp git clone --depth 1 https://github.com/ggerganov/llama.cpp.git src
用 --depth 1 只拉最新版本,省时间也省空间。
2. 编译
cd ~/llama.cpp/src mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) llama-cli llama-server
编译只针对 llama-cli 和 llama-server 两个目标,其他不相关的一律跳过。完成后可执行文件在 ~/llama.cpp/src/build/bin/ 下。
三、下载模型
1. 创建模型目录
mkdir -p ~/llama.cpp/models
2. 下载 GGUF 模型(使用国内镜像加速)
Qwen2.5-3B(适合 4GB 显存):
curl -L -o ~/llama.cpp/models/qwen2.5-3b-instruct-q4_k_m.gguf "https://hf-mirror.com/Qwen/Qwen2.5-3B-Instruct-GGUF/resolve/main/qwen2.5-3b-instruct-q4_k_m.gguf"
Qwen2.5-7B(适合 8GB 显存):
curl -L -o ~/llama.cpp/models/qwen2.5-7b-instruct-q4_k_m.gguf "https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct-GGUF/resolve/main/qwen2.5-7b-instruct-q4_k_m.gguf"
用国内的 hf-mirror 镜像,下载速度会快很多,不用科学上网。
四、运行模型
方式一:命令行交互模式
cd ~/llama.cpp/src/build/bin ./llama-cli -m ~/llama.cpp/models/qwen2.5-3b-instruct-q4_k_m.gguf -c 4096 --no-display-prompt
参数说明:
-m模型路径-c上下文长度(默认 512,建议 4096)-nglGPU 层数(纯 CPU 可不加)
直接用命令行就能跟模型对话,适合快速测试。
方式二:启动 API 服务
cd ~/llama.cpp/src/build/bin ./llama-server -m ~/llama.cpp/models/qwen2.5-3b-instruct-q4_k_m.gguf --host 0.0.0.0 --port 8080 -c 4096
服务启动后访问:http://localhost:8080
这个方式更适合集成到自己的应用里,后面会详细介绍 API 怎么调。
五、API 调用方法
API 信息
| 项目 | 值 |
|---|---|
| 地址 | http://localhost:8080 |
| API Key | 不需要(或随意填写) |
| 兼容格式 | OpenAI API |
端点列表
| 端点 | 说明 |
|---|---|
POST /v1/chat/completions | 聊天补全 |
POST /v1/completions | 文本补全 |
GET /health | 健康检查 |
GET / | Web 聊天界面 |
好消息是它兼容 OpenAI 的 API 格式,所以客户端代码改个 base_url 就能直接用。
调用示例
curl
curl http://localhost:8080/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "qwen2.5-3b",
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好,介绍一下你自己"}
],
"temperature": 0.7,
"max_tokens": 512
}'
Python(OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed"
)
response = client.chat.completions.create(
model="qwen2.5-3b",
messages=[
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "你好"}
],
temperature=0.7,
max_tokens=512
)
print(response.choices[0].message.content)
Node.js
const response = await fetch('http://localhost:8080/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'qwen2.5-3b',
messages: [{ role: 'user', content: '你好' }]
})
});
const data = await response.json();
console.log(data.choices[0].message.content);
三种写法任你挑,Python 最简单,Node.js 原生 fetch 也很轻量。
六、常用参数说明
服务端参数(llama-server)
| 参数 | 说明 | 示例 |
|---|---|---|
-m | 模型路径 | -m model.gguf |
--host | 监听地址 | --host 0.0.0.0 |
--port | 端口 | --port 8080 |
-c | 上下文长度 | -c 4096 |
-ngl | GPU 层数 | -ngl 99(全部放 GPU) |
-np | 并行请求数 | -np 4 |
--api-key | 设置 API Key | --api-key your-key |
API 请求参数
| 参数 | 说明 | 默认值 |
|---|---|---|
temperature | 随机性(0-2) | 0.7 |
max_tokens | 最大生成长度 | 模型上限 |
top_p | 核采样 | 1.0 |
stream | 流式输出 | false |
stop | 停止词 | [] |
参数这块记几个常用的就行:-ngl 控制 GPU 负载,-np 用来提高并发能力,temperature 和 max_tokens 基本每次都要调。
七、常见问题
Q1: 报错 "CUDA out of memory"
减少 -ngl 数值,让部分层用 CPU 计算:
./llama-server -m model.gguf -ngl 20 # 只放 20 层到 GPU
Q2: 中文乱码
PowerShell 执行:
chcp 65001
Q3: 如何后台运行服务?
nohup ./llama-server -m model.gguf --host 0.0.0.0 --port 8080 > server.log 2>&1 &
Q4: 如何设置 API Key 认证?
./llama-server -m model.gguf --api-key "your-secret-key"
调用时需要带上:
curl -H "Authorization: Bearer your-secret-key" ...
Q5: 从其他设备访问
- 查看 WSL IP:
hostname -I - 使用该 IP 访问,如
http://172.x.x.x:8080
这几条都是日常翻车的高频场景,提前记一下能省不少排查时间。
八、推荐模型
| 模型 | 大小 | 适合场景 |
|---|---|---|
| Qwen2.5-3B-Instruct Q4 | ~2GB | 轻量对话、低配设备 |
| Qwen2.5-7B-Instruct Q4 | ~4.5GB | 通用对话、代码 |
| Qwen2.5-14B-Instruct Q4 | ~9GB | 复杂推理 |
| DeepSeek-R1-Distill-Qwen-7B Q4 | ~4.5GB | 数学、逻辑推理 |
| Mistral-7B-v0.3 Q5 | ~5GB | 英文、代码 |
下载地址: https://hf-mirror.com(国内镜像)
如果只是为了跑通流程,从 3B 起步够了。想做正经项目,7B 是性价比之选。
九、文件结构
~/llama.cpp/
├── src/ # llama.cpp 源码
│ └── build/
│ └── bin/
│ ├── llama-cli # 命令行工具
│ └── llama-server # API 服务
└── models/ # 模型存放目录
└── qwen2.5-3b-instruct-q4_k_m.gguf
记住这个结构,后面找文件就心里有数了。
十、快速启动脚本
创建 start-server.sh:
#!/bin/bash cd ~/llama.cpp/src/build/bin ./llama-server -m ~/llama.cpp/models/qwen2.5-3b-instruct-q4_k_m.gguf --host 0.0.0.0 --port 8080 -c 4096 -np 4
赋予执行权限:
chmod +x start-server.sh ./start-server.sh
基于 llama.cpp b7917 + Qwen2.5-3B-Instruct
总结
以上就是用 llama.cpp 在 WSL2 上部署本地大模型的完整流程,从环境准备到 API 调用,每一步都给出了可以直接执行的命令。只要按顺序来,基本不会遇到意外。如果想尝试其他模型,只需要替换下载链接和启动参数里的文件路径即可。
