llama.cpp 与 vLLM 自建推理免费开源,显存需求与部署指南
免费额度
开源,CPU / GPU 通吃;vLLM 适合高并发批量推理
注意事项
教程
llama.cpp 与 vLLM 都属于开源自建推理方案,没有“注册领额度”这一步,你能用的“额度”就是本机的显存和内存。整体流程是:从开源仓库拿到代码,装好运行环境,再把模型权重下载到本地。
- 进入官方仓库:如果要在 CPU 或小显存环境运行,访问 llama.cpp 的 GitHub 仓库
https://github.com/ggml-org/llama.cpp;如果要面向 GPU 高并发做服务化,访问 vLLM 仓库https://github.com/vllm-project/vllm。两者都直接在 GitHub 页面浏览,不需要填表申请。 - 账号与身份验证:不需要注册平台账号,也不需要实名认证或绑定银行卡。代码按开源许可发布,本地运行不产生按次计费。只有从部分模型托管站下载权重时可能需要登录,按其页面提示操作即可。
- 核对硬件底线:量化后 8B 模型约需 6–8GB 显存(纯 CPU 时看内存),14B 约 10–12GB,32B 约 20–24GB。vLLM 主要面向 NVIDIA GPU,还要预留显存给 KV 缓存,实际可用的上下文长度以启动日志为准。
- 安装运行环境:vLLM 用 pip 一条命令安装;llama.cpp 建议源码编译并打开对应 GPU 后端。
pip install vllmgit clone https://github.com/ggml-org/llama.cpp cd llama.cpp cmake -B build -DGGML_CUDA=ON cmake --build build --config Release -j - 准备模型权重并启动:llama.cpp 使用 GGUF 量化文件,按上面显存参考选择 Q4_K_M 等档位;vLLM 直接读取 Hugging Face 格式的模型目录。模型路径要和启动命令里的写法完全一致,否则会提示找不到文件。
./build/bin/llama-server -m ./models/qwen2.5-7b-instruct-q4_k_m.gguf --port 8080 -c 8192 -ngl 99 - 验证与常见坑:启动后先用浏览器或 curl 访问本地接口,确认模型已加载。显存不足会在启动阶段直接失败,或在推理中途超出显存;CUDA 版本与驱动不匹配会报找不到可用设备;量化档位选得过大,同样会启动失败。开源自建没有“额度到期”概念,限制只来自硬件与并发数,具体可用上下文与显存占用以控制台或启动日志实际显示为准。
llama.cpp 的 llama-server 与 vLLM 都提供 OpenAI 兼容接口,因此任何支持自定义 base_url 的 SDK 都能直接接入。base_url 形态为 http://127.0.0.1:8000/v1(vLLM 默认端口 8000)或 http://127.0.0.1:8080/v1(llama.cpp 默认端口 8080),api_key 填任意非空字符串即可,例如 EMPTY。
先启动服务
vLLM 启动时可以用 --served-model-name 给模型起一个简短的对外名称,同时用 --max-model-len 限制上下文长度:
vllm serve Qwen/Qwen2.5-7B-Instruct --served-model-name qwen2.5-7b --max-model-len 8192 --gpu-memory-utilization 0.9模型名有两种获取方式:vLLM 用启动参数指定,或直接写权重路径;llama.cpp 请求 GET /v1/models 就能看到当前加载的模型标识。请求体里的 model 字段必须与之完全一致。
一次对话补全调用
下面是 curl 示例。关键参数:model 必填且要与服务端一致;messages 是角色数组,常用 system、user、assistant 三种角色;temperature 控制随机性;top_p 做概率截断;max_tokens 是本次生成的 token 上限,与输入长度之和不能超过服务端的上下文上限;stream 设为 true 时按 SSE 分块返回。
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-7b",
"messages": [
{"role": "system", "content": "你是一个简洁的助手"},
{"role": "user", "content": "用一句话解释模型量化"}
],
"temperature": 0.7,
"top_p": 0.9,
"max_tokens": 256,
"stream": false
}'Python 侧把官方 SDK 的 base_url 指向本地地址即可,无需改动其他调用代码:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
model="qwen2.5-7b",
messages=[{"role": "user", "content": "你好,介绍一下你自己"}],
temperature=0.7,
max_tokens=256,
)
print(resp.choices[0].message.content)限流与“额度”打满的典型表现
自建推理没有账户额度,所谓的额度耗尽,通常表现为显存被占满或并发达到上限。常见现象与排查顺序如下:
- 连接被拒绝:服务没启动或端口写错,先确认进程是否存活,再核对 base_url 端口与防火墙设置。
- 401 或 403:
api_key传了空值,补一个非空字符串即可。 - 404 且提示模型不存在:
model字段与服务端加载的名字不一致,先调GET /v1/models对照。 - 400 提示上下文超长:输入加上
max_tokens超过了服务端上限,缩短输入或调小生成长度。 - 启动即失败并报显存不足:降低
--gpu-memory-utilization,或换更小的量化档位,或减小--max-model-len。 - 429 或请求长时间排队:vLLM 并发达到上限,可降低客户端并发或调大
--max-num-seqs;llama.cpp 单机吞吐有限,建议在前面加一层请求队列。
推荐排查顺序:先用短请求请求本地接口确认服务存活,再看模型列表核对名称,然后发一条最简对话验证链路,最后逐步加大并发与上下文长度,从而区分是参数配置问题还是硬件瓶颈。
这个还能用吗?点一下告诉我们
只能从下方固定选项中选择,无法自由输入,避免垃圾信息与安全隐患。
留言区 0
真实访客可自由留言,提交后先经内容安全审核(本地 + 可选远程 API)再展示;违规内容会被拦截,不会出现在此处。示例留言均带「示例」标识,不冒充真实用户。