跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++AI算法

使用 llama.cpp 部署本地大模型遇到的常见问题及解决方案

综述由AI生成记录了使用 llama.cpp 部署本地大模型时的常见问题。主要涉及基础启动脚本配置、多分片模型合并方法,以及两个典型故障:一是 DeepSeek 模型在 SillyTavern 中因思考模式导致响应异常,需关闭 reasoning-budget 并指定自定义聊天模板;二是 llama-server 端口绑定失败,经排查为远程客户端占用冲突。提供了相应的参数调整与解决代码。

RedisGeek发布于 2026/4/6更新于 2026/5/2230 浏览

背景

在使用 LMStudio 调用 AI 模型时发现显存占用率一直不超过 80%,遂改用 llama.cpp 进行本地部署。

基础使用

llama.cpp 下载地址:https://github.com/ggml-org/llama.cpp/releases

以下为基本使用方法,将代码保存为 bat 文件,放在和 llama-server.exe 同目录下运行(确保模型位置选对,GPU_LAYERS 和 THREADS 根据机器能力调整):

@echo off
setlocal
set "MODEL_PATH=F:\Models\Yakyu"
set "MODEL_FILE=Qwen3-235B-A22B-Instruct-2507-UD-Q8.gguf"
set CTX_SIZE=32768
set HOST=127.0.0.1
set PORT=1234
echo 正在启动 OpenAI 兼容 API 服务...
echo 模型:%MODEL_PATH%\%MODEL_FILE%
echo 端口:http://%HOST%:%PORT%
echo.
llama-server.exe ^
 -m "%MODEL_PATH%\%MODEL_FILE%" ^
 --ctx-size %CTX_SIZE% ^
 --host %HOST% ^
 --port %PORT%
echo.
echo 服务已停止。按任意键关闭窗口...
pause >nul

CMD 窗口出现'all slots are idle'说明模型加载完成,此时可以调用。如果出现乱码将 .bat 文件保存为 ANSI 编码格式即可。

注:通过 llama-server.exe -h 命令可以看到默认打开了自动适应内存参数 (--fit)。合理设置 --n-cpu-moe 的值能提速,但需根据设备情况调整。

可调参数版本示例:

@echo off
setlocal
set "MODEL_PATH=F:\Models\Yakyu"
set "MODEL_FILE=Qwen3-Next-80B-A3B-Instruct-abliterated-Q8_0.gguf"
set GPU_LAYERS=64
set THREADS=64
set CTX_SIZE=32768
set HOST=127.0.0.1
set PORT=1234
echo 正在启动 OpenAI 兼容 API 服务...
echo 模型:%MODEL_PATH%\%MODEL_FILE%
echo 端口:http://%HOST%:%PORT%
echo.
llama-server.exe ^
 -m "%MODEL_PATH%\%MODEL_FILE%" ^
 --gpu-layers %GPU_LAYERS% ^
 --threads %THREADS% ^
 --ctx-size %CTX_SIZE% ^
 --n-cpu-moe 10 ^
 --host %HOST% ^
 --port %PORT%
echo.
echo 服务已停止。按任意键关闭窗口...
pause >nul

分片模型合并

多个分片(shard)组成的 GGUF 模型需用 llama-gguf-split 合并成一个才能用:

D:\Yakyu\llama-b7640-bin-win-cuda-12.4-x64\llama-gguf-split.exe --merge F:/Models/Yakyu/Qwen3-235B-A22B-Instruct-2507/Qwen3-235B-A22B-Instruct-2507-UD-Q8_K_XL-00001-of-00006.gguf F:/Models/Yakyu/Qwen3-235B-A22B-Instruct-2507-UD-Q8.gguf

常见问题

1. SillyTavern 调用时报错:Chat Completion API Assistant response prefill is incompatible with enable_thinking

当加载 DeepSeek 模型时酒馆会报此错误。

解决办法:

  1. 换用文本补全模式。
  2. 在 bat 代码中增加 --reasoning-budget 0 来关闭思考。
@echo off
setlocal
set "MODEL_PATH=F:\Models\Yakyu"
set "MODEL_FILE=DeepSeek-V3.1-Terminus-MXFP4_MOE.gguf"
set CTX_SIZE=32768
set HOST=127.0.0.1
set PORT=1234
echo 模型:%MODEL_PATH%\%MODEL_FILE%
echo 端口:http://%HOST%:%PORT%
echo.
llama-server.exe ^
 -m "%MODEL_PATH%\%MODEL_FILE%" ^
 --reasoning-budget 0 ^
 --chat-template-file "Unslothdeepseek-v3-chat-template.jinja" ^
 --ctx-size %CTX_SIZE% ^
 --host %HOST% ^
 --port %PORT%
echo.
echo 服务已停止。按任意键关闭窗口...
pause >nul

指定 --chat-template-file 是因为关闭思考后可能出现输出空白或内容无关的问题,内置模板可能不兼容下载的 gguf 模型。可使用 Unsloth 提供的聊天模板修复方案,将模板文件放置在与 llama-server.exe 同一文件夹内。

Jinja 模板内容如下:

{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% if enable_thinking is defined and enable_thinking is false %}{% set thinking = false %}{% elif enable_thinking is defined and enable_thinking is true %}{% set thinking = true %}{% elif not thinking is defined %}{% set thinking = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false,, is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- if ns.is_last_user %}{{'<|Assistant|></think>'}}{%- endif %}{%- set ns.is_last_user = false -%}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- else %}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'<|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + (tool['function']['arguments'] if tool['function']['arguments'] is string else tool['function']['arguments'] | tojson) + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}{%- if ns.is_last_user %}{{'<|Assistant|>'}}{%- if message['prefix'] is defined and message['prefix'] and thinking %}{{''}}{%- endif %}{%- endif %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{%- set content = message['content'] -%}{%- if '</think>' in content %}{%- set splitted = content.split('</think>') -%}{%- set content = splitted[1:] | join('</think>') -%}{%- endif %}{{content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endfor -%}{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool %}{{'<|Assistant|>'}}{%- if not thinking %}{{'</think>'}}{%- else %}{{'<think>'}}{%- endif %}{% endif %}

2. llama-server 端口绑定失败

使用 bat 脚本启动 llama-server 并指定了 1234 端口,但实际运行后日志显示 server is listening on http://127.0.0.1:8080,说明 --port 1234 被忽略。

排查发现另一台电脑上的客户端通过端口转发一直在连接这个 1234 端口,导致冲突。

解决方法: 关闭占用端口的客户端软件即可。

目录

  1. 背景
  2. 基础使用
  3. 分片模型合并
  4. 常见问题
  5. 1. SillyTavern 调用时报错:Chat Completion API Assistant response prefill is incompatible with enable_thinking
  6. 2. llama-server 端口绑定失败
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Claude 官方技能文档:前端构建、Git 工作树、iOS 模拟与自动化
  • Llama-2-7b 在昇腾 NPU 上的六大核心场景性能基准
  • Python 基础语法与核心概念详解
  • YOLO26-Pose 零样本姿态估计实战:从春晚机器人看通用视觉智能
  • N_m3u8DL-RE 跨平台流媒体下载器使用教程
  • 密码攻击实践:获取并破解 Net-NTLMv2 哈希(上)
  • Python 就业数据分析:方向、岗位与城市选择指南
  • 大模型落地路线图:从诊断到运营的全流程解析
  • LangChain 框架与智能 Agent 构建实战指南
  • π0 源码剖析:基于 PaLI-Gemma 的扩散策略与 C/S 架构部署
  • WebAssembly 技术详解:概念、优势与开发流程
  • Python Pandas 库超详细教程:从入门到精通实战指南
  • Android Framework 核心原理与源码解析实战指南
  • 区块链安全与共识机制深度解析
  • Linux 匿名管道通信:原理、特性与实战代码详解
  • Python 量化实战:AKshare 获取全市场金融数据
  • Llama 与 PyTorch:大模型开发与优化的核心组合
  • 青海学子 AI 农业创业实践:基于 ViT 的病虫害检测系统
  • Android 开发常用快速开发框架与第三方库精选指南
  • DeepSeek 结合通义万相制作 AI 视频实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online