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

LLama-Factory vs. 传统微调:效率与成本的深度对比

LLama-Factory vs. 传统微调:效率与成本的深度对比 当技术团队面临大语言模型微调任务时,往往陷入工具选择的困境。传统的手工编码微调方法曾长期主导这一领域,但新兴的LLama-Factory等自动化工具正在改写游戏规则。本文将从实际工程角度,剖析两种方案在资源配置、时间消耗和产出质量三个维度的真实差异。 1. 核心效率指标对比 在评估微调工具时,我们主要关注三个关键效率指标:配置时间、训练周期和迭代速度。传统微调通常需要工程师手动处理数据预处理、超参数调整和训练监控等环节,而LLama-Factory通过模块化设计将这些步骤标准化。 以微调Llama3-8B模型为例,我们实测得到以下数据: 环节传统方法耗时LLama-Factory耗时效率提升环境配置4-6小时0.5小时8-12倍数据预处理3-5小时0.5小时6-10倍训练周期(3轮)18-24小时8-12小时2-3倍超参数优化手动调整自动推荐N/A 实际测试基于NVIDIA A4000 GPU,数据集规模为50,000条中文指令数据 LLama-Factory的Web界面集成了以下自动化功能:

llama.cpp加载多模态gguf模型

llama.cpp预编译包还不支持cuda12.6 llama.cpp的编译,也有各种坑 llama.cpp.python的也需要编译 llama.cpp命令行加载多模态模型 llama-mtmd-cli -m Qwen2.5-VL-3B-Instruct-q8_0.gguf --mmproj Qwen2.5-VL-3B-Instruct-mmproj-f16.gguf -p "Describe this image." --image ./car-1.jpg **模型主gguf文件要和mmporj文件从一个库里下载,否则会有兼容问题,建议从ggml的官方库里下载 Multimodal GGUFs官方库 llama.cpp.python加载多模态模型 看官方文档 要使用LlamaChatHandler类,官方已经写好了不少多模态模型的加载类,比如qwen2.5vl的写法: from llama_cpp import Llama

【Copilot配置】—— copilot-instructions.md vs AGENTS.md vs .instructions.md三种指令文件解析与配置

【Copilot配置】—— copilot-instructions.md vs AGENTS.md vs .instructions.md三种指令文件解析与配置

Copilot 指令文件全解析:copilot-instructions.md vs AGENTS.md vs .instructions.md 作为常年和 VS Code 打交道的研发,最近在折腾 Copilot Agent 时,我发现很多同学和我一样,被 .github/copilot-instructions.md、AGENTS.md 和 .instructions.md 这三个文件绕晕了。 明明都是给 Copilot 写的 “指令”,为什么要分三个文件?它们的生效范围有啥区别?什么时候该用哪一个? 带着这些疑问,我翻遍了官方文档,又在自己的 AI Agent 项目里反复实测,终于把这三者的关系理得清清楚楚。这篇文章就用最直白的语言,结合实战配置,帮你彻底搞懂 Copilot 指令文件的使用逻辑。 一、先搞懂核心:

【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频

【AIGC前沿】MiniMax海螺AI视频——图片/文本生成高质量视频

目录 1.MiniMax海螺AI视频简介 2.使用教程 1.MiniMax海螺AI视频简介 海螺视频,作为 MiniMax 旗下海螺 AI 平台精心打造的 AI 视频生成工具,致力于助力用户产出高品质视频内容。该工具依托 abab-video-1 模型,具备强大的文生视频功能。用户仅需输入关键词或简短语句,海螺视频就能据此创作出情节丰富的完整视频。此外,海螺视频运用 DiT 架构,能够精准模拟现实世界的物理规律,尤其在生成复杂场景与高动作场景时,展现出卓越的性能。 2.使用教程 点击如下链接,进入蓝耘元生代智算云平台主页 https://cloud.lanyun.net/#/registerPage?promoterCode=11f606c51e 点击主页上方栏的“MaaS平台” 然后点击左侧栏的“视觉模型”  可以看到可以免费体验一次I2V-01图片生成视频  点击如下红框处将图片上传  例如输入如下的图片 例如想让小狗动起来,可以在如下红框处输入相应的指令,然后点击立即生成