记录一下使用llama.cpp过程中遇到的一些问题和解决方法

写在前面:

什么未操作即同意的条款?我写的东西免费分享也不是你能随意搬运的理由啊

特此声明,若该文章被搬运到除ZEEKLOG(www.ZEEKLOG.net)以外的其他社区如2048 AI社区,则视为该社区同意将所有收益无偿捐赠给我所有

此外,我写的所有分享都是免费的,如有VIP文章也是ZEEKLOG干的,请私信我修改成免费

起因:使用LMStudio调用AI模型时发现显存占用率一直不超过80%,询问AI解决办法无果后一怒之下换用llama.cpp,遇到了一堆AI解决不了的问题,遂记录

llama.cpp下载地址如下

https://github.com/ggml-org/llama.cpp/releases

以防万一 我老年痴呆说一下如何使用llama.cpp调用模型,把下面的代码保存成bat,放在和llama-server.exe同目录下,然后运行这个bat(确保模型位置选对,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,  --fit [on|off]                   whether to adjust unset arguments to fit in device memory ('on' or 'off', default: 'on')

也就是默认打开了自动适应, --gpu-layers、--n-cpu-moe等等这些参数不填也行,倒不如说在我的机器上不填效果最好,也有大概率每个人的设备情况不一样,

根据https://www.hardware-corner.net/gpt-oss-offloading-moe-layers/

这篇文章所写,合理设置--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

打开cmd输一下代码就行

上图是AI(Qwen3 Max)(不是广告)的错误回答,太相信AI导致走错了不少路,仅供批判

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

当我加载的模型是DeepSeek时酒馆就会报这个错

解决办法:
①换用文本补全模式

②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,这是因为关闭思考后又出现了新的问题:

设置“--reasoning-budget 0”发现模型刚输出空白就停止了,或者ai的输出和输入没有关系,无论输入什么,输出都是“DeepSeek is an AI assistant developed by……”这是内置自动加载的聊天模板有问题,我使用了内置的deepseek3聊天模板发现不行,我不确定这与我从网上下载的gguf模型是否有关。

按照Unsloth的说法:“我们的 DeepSeek-V3.1 GGUF 包含 Unsloth 聊天模板修复 用于 llama.cpp 支持的后端。”我不是从他那里下载的模型,但他的模板确实能解决我的问题,模板如下:
 

{% 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 %}{{'<think>'}} {%- else %}{{'</think>'}}{%- 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端口,即上图右边代码中的:

set PORT=1234

但实际运行后,cmd 日志(上图左上)显示:server is listening on http://127.0.0.1:8080

这是 默认端口,说明 --port 1234 被忽略了或未生效。

我通过 netstat -ano | findstr :1234  一查看(上图左下),发现没有程序占用1234端口, 我就纳闷了,端口没被占用那为什么指定了不用?嫌1234数字不够吉利?

一问AI,经典无中生有,各种幻觉

注:上图中AI的回答是错的

琢磨了一圈才发现是另一台电脑在向这个端口发送请求,我在另一台电脑上的酒馆通过端口转发一直在连这个1234端口

解决方法:把酒馆关了,完美解决
 

Read more

OpenClaw 飞书机器人配置教程|一键对接飞书,实现聊天下达 AI 指令

OpenClaw 飞书机器人配置教程|一键对接飞书,实现聊天下达 AI 指令

适配版本:OpenClaw v2.3.12/v2.4.1(小龙虾)前置要求:已部署 OpenClaw Windows 端(Win10/Win11 均可),未部署可先下载一键部署包完成安装核心效果:配置完成后,可在飞书聊天窗口直接向机器人发送自然语言指令,OpenClaw 自动拆解任务、操控电脑完成操作,实现飞书远程下达 AI 任务 📌 OpenClaw Windows 一键部署包下载地址🔗 OpenClaw Windows 一键部署包 v2.3.12✅ 免配置、免命令行、解压即用,内置所有运行依赖,部署完成后再进行飞书配置即可 (此教程配合这个安装包使用) 一、配置前必看 1. 需拥有飞书账号,个人 / 企业账号均可,企业账号需确保有应用开发权限 2. OpenClaw

本地部署中文OpenClaw 飞书机器人部署指南

本地部署中文OpenClaw 飞书机器人部署指南

适用场景:在 Windows 本地(PowerShell)一键部署 OpenClaw,使用阿里云百炼作为大模型后端,通过飞书长连接模式实现 AI 机器人。 安装skills工具参考:OpenClaw 最新必安装 10 个 Skills-ZEEKLOG博客 自动化发布小红书:OpenClaw 实现小红书自动化发文:操作指南 步骤 1:安装 OpenClaw(openclaw中文社区) 1. 打开 PowerShell。 2. 执行以下命令一键安装: # 在 PowerShell 中运行 iwr -useb https://clawd.org.cn/install.ps1 | iex * 安装过程会自动下载 Node.js、依赖等,耗时几分钟。 * 安装完成后会自动进入配置向导,或提示你继续下一步。

ComfyUI Manager高效管理指南:提升AI绘画工作流的核心工具

ComfyUI Manager高效管理指南:提升AI绘画工作流的核心工具 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager ComfyUI Manager是AI绘画爱好者不可或缺的效率工具,它通过集中管理插件、模型和环境配置,帮助用户轻松扩展ComfyUI功能,优化工作流程。本文将从功能价值、场景化应用到问题解决,全面介绍如何利用这一工具提升创作效率。 评估环境价值:系统兼容性检查 在开始使用ComfyUI Manager前,确保系统环境满足基本要求是避免后续问题的关键步骤。这不仅关系到工具能否正常运行,也影响到后续插件和模型的兼容性。 执行系统兼容性验证 1. 检查Python版本 * 方法一:终端执行python --version或python3 --version 2. 验证Git安装状态 * 基础检查:git --version * 进阶验证:git config --global --list确认用户配置 3. 评估系统资

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

FPGA商用级ISP:动态坏点校正(DPCC)的滑窗架构与并行判决实现

【写在前面:为什么要写这个专栏?】 在数字图像处理领域,ISP(图像信号处理器)的算法原理并不罕见,但真正能够支持 4K@60fps 实时处理、并经过商用验证的 Verilog 硬核实现思路 却往往秘和封装在黑盒之中。 我手里有一套商用级的 ISP 源码,通过对其进行深度拆解,我希望能够分析并抽象出其背后的设计逻辑。这不仅是对高性能图像处理架构的复盘,更是希望能为广大 FPGA 开发者和 ISP 算法工程师提供一个硬核的设计基线(Baseline)。通过分享这些商用 IP 的实现细节,我希望能帮助更多人了解如何将复杂的图像算法转化为高效的硬件流水线,为行业提供一份有价值的参考。 1. 深度解析:为什么“商用级”坏点校正极其困难? 在传感器(Sensor)制造中,由于半导体工艺缺陷或后期老化,不可避免会出现常亮像素(Hot Pixel)或死像素(Dead Pixel)。 * 痛点一:误杀边缘。 如果只是简单的中值滤波,图像中真实的星星、