记录一下使用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

【AI】——SpringAI通过Ollama本地部署的Deepseek模型实现一个对话机器人(二)

【AI】——SpringAI通过Ollama本地部署的Deepseek模型实现一个对话机器人(二)

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】 🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】  感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 目录 🎈Java调用Deepseek  🍕下载Deepseek模型  🍕本地测试  🍕Java调用模型 🎈构建数据库  🍕增强检索RAG  🍕向量数据库  🍕Springboot集成pgvector 🎈chatpdf 🎈function call调用自定义函数 🎈多模态能力 🎈Java调用Deepseek 本地没有安装Ollama、Docker,openwebUI,可以先学习一下这篇文章:【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型_ollma+本地大模型+open web ui-ZEEKLOG博客

OpenClaw 新手指南:从零开始的 AI 机器人搭建完全攻略

OpenClaw 新手指南:从零开始的 AI 机器人搭建完全攻略 想随时随地通过微信、飞书、Telegram 等平台与 AI 助手对话?OpenClaw 帮你实现。 为什么选择 OpenClaw? OpenClaw 是一个开源的自托管 AI 网关,让你可以在自己服务器上运行一个 central hub,连接所有聊天平台到强大的 AI 模型(如 Claude、GPT、Pi、Kimi 等)。 核心优势: * ✅ 数据完全掌控(自托管,隐私安全) * ✅ 多平台统一管理(一个网关服务所有渠道) * ✅ 无代码扩展(通过技能系统) * ✅ 24/7 可用(开机自启动) * ✅ 日志和记忆(支持长期对话) 10个核心技巧详解 技巧 1:快速安装与配置 适用场景:

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇)

基于 FPGA 的千兆网 GigE Vision 视频传输方案实现(A7/K7 实战篇) 前言 在工业视觉和自动化领域,GigE Vision 协议因其无需采集卡、传输距离远、生态成熟等优势,已成为高性能工业相机的核心通讯标准。然而,在 FPGA 上实现一套完全符合标准的 Transmitter(发射端)方案并非易事。 本文将结合 Artix-7 和 Kintex-7 系列 FPGA 的架构特性,深度解析一套工业级 GigE Vision 方案的底层逻辑、核心功能以及在 A7/K7 平台上的落地实践,为企业项目集成和个人进阶学习提供参考建议。 一、 GigE Vision 协议栈的工业级功能拆解 一套商用级的 GigE Vision 方案(Transmitter)必须在

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

软件环境部署 系统软件架构以实时性与兼容性为核心设计目标,具体配置如下表所示: 类别配置详情操作系统Ubuntu 20.04 LTS,集成RT_PREEMPT实时内核补丁(调度延迟<1 ms)开发环境Python 3.8核心库组件PyQt5 5.15.4(图形界面)、OpenCV 4.5.5(图像处理)、NumPy 1.21.6(数值计算) 该环境支持模块化控制界面开发与传感器数据的实时融合处理,为连续体机器人的逆运动学求解(如FB CCD算法测试)提供稳定运行基础[16]。 手眼协调校准 为实现视觉引导的精确控制,需完成相机与机器人基坐标系的空间映射校准,具体流程如下: 1. 标识点布置:在机器人末端及各段首尾、中间位置共固定7个反光标识点,构建臂型跟踪特征集[29]; 2. 数据采集:采用NOKOV度量光学动作捕捉系统(8台相机,