实测Hermes + Qwen3.6 27B 使用Qwen-Fixed-Chat-Templates大幅提高缓存命中率
-
更新下,又发现了一个基于 froggeric 的模板再优化的版本:https://huggingface.co/spiritbuun/buun-Qwen3.6-chat_template 。自己用了两天,如果是一般性的聊天,几乎不再会缓存重建。但调用browser等工具引发大量token引入的情况下,还是会发生。不过已经改善良多了,感谢作者。
下载地址: https://huggingface.co/spiritbuun/buun-Qwen3.6-chat_template/tree/main
另外,我让Hermes监控llama.cpp的输出日志,自己跑两组测试,看看还可以调整哪些参数进一步优化缓存重建的问题。 它调试分析后建议就我的硬件情况,可增加如下参数 --ctx-checkpoints 32 --checkpoint-min-step 256 --cache-ram 12288。大家也可以自己试试。
-
更新下,又发现了一个基于 froggeric 的模板再优化的版本:https://huggingface.co/spiritbuun/buun-Qwen3.6-chat_template 。自己用了两天,如果是一般性的聊天,几乎不再会缓存重建。但调用browser等工具引发大量token引入的情况下,还是会发生。不过已经改善良多了,感谢作者。
下载地址: https://huggingface.co/spiritbuun/buun-Qwen3.6-chat_template/tree/main
另外,我让Hermes监控llama.cpp的输出日志,自己跑两组测试,看看还可以调整哪些参数进一步优化缓存重建的问题。 它调试分析后建议就我的硬件情况,可增加如下参数 --ctx-checkpoints 32 --checkpoint-min-step 256 --cache-ram 12288。大家也可以自己试试。
-
T terry 于 将此主题固定
-
@bily j 关于--jinja和chat template的关系,我来解释一下:
本质上两者是同一个东西,只是生效方式不同。
--jinja是 llama.cpp server 的参数,用来指定一个自定义的 Jinja2 模板文件。而 Qwen-Fixed-Chat-Templates(以及后来 Colt 更新的 buun 版本)提供的就是模板文件本身。也就是说:
- 用
--jinja指向 froggeric 的模板 → 效果等同直接替换 chat_template - 不设
--jinja,llama.cpp 用模型自带的 template → KV 缓存重建率高 - 设了
--jinja指向优化模板 → KV 缓存命中率明显提升
所以关键在于模板内容,不是用 --jinja 还是改模板文件。 只要是同一个优化模板,两种方式的缓存效果完全一样。
不过有个细节:
--jinja的优先级高于模型自带的 template,所以用了 --jinja 后,模型自带的 template 会被覆盖。好处是不用改模型文件,换模板只需改 --jinja 路径。关于 buun 版本:Colt 后来更新的那个(spiritbuun/buun-Qwen3.6-chat_template)是在 froggeric 基础上进一步优化了日常对话场景的缓存复用。如果是一般聊天,buun 版的缓存重建更少。但工具调用(browser 等引入大量 token)时还是会触发重建,这是模型本身的 attention 机制决定的,模板只能缓解不能根除。
- 用
-
系统 于 取消固定此主题
-
我是llama.cpp + Qwen3.6-27B + hermes 重度使用者,每天至少1个小时以上。基本上智能家居+网络配置+日常电脑任务+记账 都转到AI上了。三者配合最大的问题还是prompt重算的问题,初略统计,基本上context累计到40-50K以上(尤其是频繁工具调用),就会开始出现prompt重算,之后越聊会越频繁。到最后基本就不可用了。为了缓解这个问题,频繁调试llama.cpp启动参数,都无法彻底解决。
好在一直都有人在致力于优化,我相信终会得到解决。以下是近期一些prompt重算问题的进展:
-
https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates 更新到了v21版本,我更新它之后,解决了hermes新版读取memory报错的一个bug(hermes自己分析是prompt/template 格式问题)。但对prompt重算改善不大。
-
https://github.com/ggml-org/llama.cpp/issues/22746#issuecomment-4843582985 这个issue持续有人在跟进,并提供了patch。开源的意义就在于此。
-
-
我是llama.cpp + Qwen3.6-27B + hermes 重度使用者,每天至少1个小时以上。基本上智能家居+网络配置+日常电脑任务+记账 都转到AI上了。三者配合最大的问题还是prompt重算的问题,初略统计,基本上context累计到40-50K以上(尤其是频繁工具调用),就会开始出现prompt重算,之后越聊会越频繁。到最后基本就不可用了。为了缓解这个问题,频繁调试llama.cpp启动参数,都无法彻底解决。
好在一直都有人在致力于优化,我相信终会得到解决。以下是近期一些prompt重算问题的进展:
-
https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates 更新到了v21版本,我更新它之后,解决了hermes新版读取memory报错的一个bug(hermes自己分析是prompt/template 格式问题)。但对prompt重算改善不大。
-
https://github.com/ggml-org/llama.cpp/issues/22746#issuecomment-4843582985 这个issue持续有人在跟进,并提供了patch。开源的意义就在于此。
-
-
@Colt
我自己用下来本地AI跑Agent的命门在缓存,启用Llamacpp的缓存机制,多试试各种不同组合总有一个可用的。
自己的经验是之前(5070ti跑27B IQ3XXS)Hermes吐字大概要10s左右,而且会越来越慢,缓存的问题解决以后基本在3-5s,因为Hermes的系统提示词部分不用每次让5070Ti再重算了。体验好很多,但是我后来还是不用了,因为Deepseek V4 flash太便宜了,哈哈,除非需要识图的时候让Hermes自己做了个技能,需要的时候自己停掉Comfyui调用27B,因为目前单卡。 -
@fcme 谢谢回复,我现在也是如此。hermes里配了deepseek和gemini,复杂问题都先切到deepseek,一般几个来回都能发现和解决问题。Qwen 27B主要执行一些routine tasks。
但就是个执念:)
-
我是llama.cpp + Qwen3.6-27B + hermes 重度使用者,每天至少1个小时以上。基本上智能家居+网络配置+日常电脑任务+记账 都转到AI上了。三者配合最大的问题还是prompt重算的问题,初略统计,基本上context累计到40-50K以上(尤其是频繁工具调用),就会开始出现prompt重算,之后越聊会越频繁。到最后基本就不可用了。为了缓解这个问题,频繁调试llama.cpp启动参数,都无法彻底解决。
好在一直都有人在致力于优化,我相信终会得到解决。以下是近期一些prompt重算问题的进展:
-
https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates 更新到了v21版本,我更新它之后,解决了hermes新版读取memory报错的一个bug(hermes自己分析是prompt/template 格式问题)。但对prompt重算改善不大。
-
https://github.com/ggml-org/llama.cpp/issues/22746#issuecomment-4843582985 这个issue持续有人在跟进,并提供了patch。开源的意义就在于此。
我是llama.cpp + Qwen3.6-27B + hermes 重度使用者,每天至少1个小时以上。基本上智能家居+网络配置+日常电脑任务+记账 都转到AI上了。三者配合最大的问题还是prompt重算的问题,初略统计,基本上context累计到40-50K以上(尤其是频繁工具调用),就会开始出现prompt重算,之后越聊会越频繁。到最后基本就不可用了。为了缓解这个问题,频繁调试llama.cpp启动参数,都无法彻底解决。
好在一直都有人在致力于优化,我相信终会得到解决。以下是近期一些prompt重算问题的进展:
-
https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates 更新到了v21版本,我更新它之后,解决了hermes新版读取memory报错的一个bug(hermes自己分析是prompt/template 格式问题)。但对prompt重算改善不大。
-
https://github.com/ggml-org/llama.cpp/issues/22746#issuecomment-4843582985 这个issue持续有人在跟进,并提供了patch。开源的意义就在于此。
看了issue ,patch没有被合并,要用只有自己编译修复了的旧版,
-
