返回资讯中心
外部精选
软件工程
#开发者实时流

TokiRecur 发布 llama.cpp 启动器:支持 KV 缓存回收复用

来源标题:TokiRecur – llama.cpp LLM launcher with KV-cache recycling

TokiRecur 推出一款 llama.cpp 启动器,可在 llama-server 前做精确前缀匹配并复用 KV 缓存,跳过重复前缀的 prefill。该方案覆盖 CUDA、ROCm、SYCL、OpenVINO、Vulkan、Metal 和 CPU,复用无损、输出与无缓存运行逐字节一致。在四个模型九项负载上,TTFT 提升 62–96%,prefill 吞吐提升 410–1280%。

Hacker News 最新TokiRecur2026/11/7 · 今天29 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

本地 LLM 推理的 KV cache 复用。在 llama-server 前面做精确前缀匹配,覆盖 CUDA、ROCm、SYCL、OpenVINO、Vulkan、Metal 和 CPU。 tokirecur.com — 基准测试表、平台支持矩阵、安装文档。 当新 prompt 到达 LLM 服务器时,KV cache 会从头重建——即使其中 90% 与片刻之前处理过的 prompt 完全相同。Toki Recur 对 prompt 做嵌入,找到最接近的已缓存前缀,逐 token 校验,然后把请求路由到已经持有该状态的 slot。精确前缀匹配会跳过 prefill;其他情况走正常路径。 复用发生在内存中且无损:输出与无缓存运行时逐字节一致。磁盘持久化曾经尝试过,但已被移除——从磁盘恢复 KV 会破坏精度(基准测试中与基线出现 88% 的实质性偏差),而且 ?action=save / ?action=restore 这层逻辑在代码库中处于休眠状态。 四个模型(Qwen3.5-9B、Qwen3.6-35B-A3B、Qwen3.6-27B、Qwen3.5-122B-A10B)上的九种工作负载:TTFT 提升 62–96%,prefill 吞吐提升 410–1280%,最大的 MoE 模型收益最大。完整表格见 tokirecur.com。 前缀缓存的效果,取决于它能匹配到什么样的前缀。以下数据在单一受支持模型、单 slot、长 system prompt 的条件下测得: 配置:Qwen3.5-2B Q4_K_M · llama-server b1099 (ROCm) · AMD Ryzen AI MAX+ 395 / Radeon 8060S · 8,192 token 上下文 · 1 个 slot · 1,372 token 的 prompt(长 system prompt 加一行用户消息)。 「Evaluated」指 llama-server 的 timings.prompt_n:它实际计算的 prompt token 数。热命中后剩余 4 个 token,而不是零——那是生成答案周围的模板边界。 这些数字用于理解比例关系,并非基准测试:一个 2B 模型、1.4k token。收益大小取决于你的 harness 在变化的那一轮之前保留了多少稳定前缀。daemon 在 /v1/chat/completions 中的 cache 块是路由元数据(哪个 slot、路由键是否匹配);上面的 token 计数来自 llama-server 自身的 timings。 克隆并运行安装脚本——跨平台,无需 token。MIT 许可,公开仓库。 git clone https://github.com/lhadzic377-netizen/TokiRecur.git cd TokiRecur ./install.sh # Windows: install.bat 两者都会用 pipx 安装 toki CLI(若缺失则自动安装,venv 作为回退)。默认包含 embeddings extra;用 TOKI_EXTRAS= ./install.sh 跳过。没有 pipx 时: python3 -m venv .venv && source .venv/bin/activate pip install -e .[embeddings] 然后获取后端、模型并启动: toki model install-llama # 自动检测 ROCm/CUDA/SYCL/Vulkan/Metal/CPU toki model pull Qwen/Qwen3-4B-GGUF --name qwen3-4b toki model use qwen3-4b # 启动 llama-server + daemon,配置 CLI 客户端 toki tui # 全屏聊天(或 toki web 使用浏览器 UI) toki model remove qwen3-4b # --purge 删除权重;--force 覆盖活跃模型保护 安装时不会安装或启动任何东西:toki model use <name> 是显式启动模型的方式。toki up --model <path> 是单模型等价命令,用于没有注册表条目的原始 GGUF。toki serve 只是 API daemon(默认 127.0.0.1:8787),代理到已经在运行的 llama-server。 在 8–16 GB 的机器上,toki model use 会缩减上下文,让 KV cache 能放在权重旁边。有效上下文写入模型的状态目录,并成为唯一事实来源:API 精确公布该数字,将 max_tokens 限制到该值,并拒绝超额分配。下限是 512 token。 纯 Python,基于 llama-server 的 HTTP API,可运行在任何 x86_64 或 aarch64 设备上,支持 Linux、macOS 或 Windows。唯一与平台相关的部分是 llama-server 二进制本身。 toki model install-llama # 最新 release,自动检测后端 toki model install-llama --backend rocm # rocm|cuda|sycl|openvino|vulkan|metal|cpu toki model install-llama --backend rocm --gfx 11.5.1 # HSA_OVERRIDE_GFX_VERSION toki model install-llama --tag b6400 --name 35b # 固定某个 release 或者在 ~/.config/tokirecur/models.yaml 中指向 PATH 上任意 llama-server 的 binary:。TOKI_MODEL_REGISTRY 和 TOKI_STATE_DIR 可移动注册表和 logs/pid/bin。 一个 daemon 之上有三个前端。API 才是 agent 实际对话的对象。 启动器会启动 Toki Chat、OpenCode、MiMo Code、Hermes、OpenClaw、Codex、Qwen Code、Factory Droid、Cline CLI、DeepSeek-Harness、Grok Build、Kilo Code、Pi、GitHub Copilot CLI、Kimi Code、OMP 和 Claude Code,全部固定到活跃模型。OpenAI 兼容客户端使用 daemon 的 OpenAI 路由;Claude Code 使用本地 Anthropic 兼容的 /anthropic/v1/messages 路由,并带有仅限所有者(owner-only)的设置覆盖。该覆盖将本地 token 作为 ANTHROPIC_AUTH_TOKEN 携带——而不是 ANTHROPIC_API_KEY,因为 Claude Code 只在其已批准 API key 后才发送它,未批准时会回退到另一个凭证:在配置了云厂商的机器上,那个凭证属于该厂商,本地 daemon 对它返回 401。 toki tui # raw / cached / compare:Ctrl+1 / 2 / 3 toki web --port 7778 --tls-cert cert.pem # HTTPS + wss toki diff --system "<long system>" "<prompt>" # 一次性的 raw/cached A/B Claude Code 每次 prompt 会带着完整设置发送数万个 token。TOKI_CLAUDE_BARE=1 启动 --bare,TOKI_CLAUDE_MCP=none 使用空 MCP 配置,TOKI_CLAUDE_EFFORT=low 使用更小的 effort 预算。 在慢速机器上——一台没有可用 GPU 的笔记本,profile 显示为 cpu——启动器还会给 Claude Code 30 分钟预算(API_TIMEOUT_MS、CLAUDE_STREAM_IDLE_TIMEOUT_MS),而不是其默认的 10 分钟,因为长 prompt 的 CPU prefill 本身就可能花掉这些时间。TOKI_CLAUDE_TIMEOUT_MS 以毫秒为单位覆盖它。daemon 默认比客户端等待更久(TOKI_BACKEND_TIMEOUT,1800 s),因此它永远不会是先放弃的一方,并且它会说明这次等待的代价:每个模型实测的 prefill 速率会成为它放在第一个流事件和日志中的估算值,因此缓慢的一轮是一个数字,而不是谜团。

stack

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →