首页 / 资讯中心 / 文章详情

TokenSpeed Agentic对话成本优化:前缀缓存命中率拉满的3个技巧

TokenSpeed Agentic对话成本优化:前缀缓存命中率拉满的3个技巧 ★ FEATURED ARTICLE
人工智能大模型推理引擎模型推理服务后端【免费下载链接】tokenspeedTokenSpeed is a speed-of-light LLM inference engine.项目地址https://gitcode.com/GitHub_Trending/to/tokenspeed点击查看免费下载TokenSpeed 是一款面向 Agentic 工作负载的 LLM 推理引擎在 agentic 多轮对话场景中前缀缓存prefix cache命中率直接决定了你省下的 prefill 算力也就是直接决定了推理成本。本文给出 3 个实操技巧帮你把 TokenSpeed 的前缀缓存命中率拉满。为什么前缀缓存是 Agentic 成本的最大杠杆Agentic 对话有一个天然优势每一轮请求都会携带相同的 system prompt、工具定义和历史消息。这些重复内容就是前缀。只要前缀缓存命中这些 token 的 prefill 就完全不需要重算首 token 延迟TTFT和算力开销都大幅下降。反过来说缓存未命中时就要付出完整的 prefill 成本。下面这张图展示了 TokenSpeed 内置 MLA prefill 内核相对 TensorRT-LLM MLA 的延迟对比——prefill 越快未命中的代价越低而命中的部分则是纯赚TokenSpeed 的缓存体系分三层详见 docs/configuration/server.md 的 Host L2 and Mooncake Store L3 章节GPU Device KV (L1) ↕ D2H / H2D Host pinned buffer (L2 / flat KV) ↕ batch_put_from / batch_get_into Mooncake Store (L3)命中率优化就是围绕这三层展开的下面是 3 个具体技巧。技巧一开启前缀缓存并稳定你的对话前缀先确认开关。TokenSpeed 的enable_prefix_caching默认为 True见 python/tokenspeed/runtime/utils/server_args.py命令行可用--enable-prefix-caching/--disable-prefix-caching控制。默认开着的情况下命中率低往往不是引擎的问题而是请求构造方式的问题做法原因system prompt、工具定义固定在最前面前缀缓存按 token 序列前缀匹配开头一旦变动整条链全部失效可变内容时间戳、随机 ID、会话变量放到结尾让共同前缀尽可能长保持 chat template 稳定模板改动会改变所有 token 的分词结果多轮对话尽量增量追加每轮只追加新消息不重排历史另外可以用--prefix-granularity调整缓存复用的身份边界token 数默认值对绝大多数 agentic 场景已经合适不必动。技巧二用 Host L2 Mooncake L3 把热前缀钉住GPU 显存L1是稀缺资源热门前缀在内存压力下会被逐出。TokenSpeed 支持两级兜底Host L2--kvstore-ratioDevice KV 的倍数默认 2或--kvstore-size每 rank 的 GB 数优先生效配置一块 Host 常驻缓存。被逐出 L1 的前缀会异步写回 L2命中时从 Host 分层加载回显存成本远低于重算 prefill。Mooncake Store L3加上--kvstore-storage-backend mooncake后L2 之下再挂一层分布式对象存储前缀可以在 GPU 全部清空甚至服务重启后依然可复用——对白天高峰、凌晨低峰的前缀轮转特别友好。tokenspeed serve model \ --enable-prefix-caching \ --kvstore-ratio 2 \ --kvstore-storage-backend mooncake \ --kvstore-prefetch-min-pages 8 \ --kvstore-prefetch-timeout-base-s 2 \ --kvstore-prefetch-timeout-per-page-s 0.1 \ --kvstore-prefetch-batch-pages 128L3 的 4 个--kvstore-prefetch-*参数控制准入前预取等待中的请求如果 L3 里有足够长的前缀页调度器会在准入前异步拉回 Host之后按普通 Host 命中处理不会阻塞其他请求。参数语义详见 docs/configuration/server.md。技巧三缓存亲和路由——多轮会话始终落在同一个 rank一个容易踩的坑开启 attention DP数据并行时每个 rank 持有私有的前缀缓存同一会话的不同轮次如果被路由到不同 rank前缀缓存直接归零。TokenSpeed 提供了两种固定手段见 docs/serving/parallelism.md 的 Pinning a request to an attention-DP rank 章节请求级固定通过data_parallel_rank请求字段把某会话的所有轮次钉在同一个 rank 上绕过负载均衡直发网关级固定使用捆绑网关时给ts serve传--policy cache_aware --dp-aware由网关按前缀感知策略做 per-rank 亲和路由。对 agentic 场景一个 agent 会话持续几十轮来说这一步往往比任何调参收益都大。如何验证命中率用指标闭环技巧做完要看数字。TokenSpeed 提供两个观测入口每请求统计启动时加--enable-log-request-stats每个请求完成日志里会带cache_hit_rate命中 token 数 / prompt token 数、cache_tokens等字段无需额外 GPU 同步开销Prometheus 指标计费口径的命中率可以直接从现有计数器推导cached_prompt_tokens tokenspeed:prefix_cache_hits_total uncached_prompt_tokens tokenspeed:prompt_tokens_total - tokenspeed:prefix_cache_hits_total另外--kv-events-config可以向外发布前缀缓存块级的写入/移除事件ZMQ用于做外部的缓存感知路由系统。指标定义详见 docs/configuration/server.md。相关文档与代码路径服务器参数含--kvstore-*、--prefix-granularity全表docs/configuration/server.md缓存体系设计前缀匹配、L2/L3 分层、状态组docs/design/cache-concepts.md启动指南docs/guides/launching.md并行与 DP 缓存亲和docs/serving/parallelism.md兼容性参数表docs/configuration/compatible-parameters.md每请求统计实现python/tokenspeed/runtime/engine/request_stats.py前缀缓存默认开关python/tokenspeed/runtime/utils/server_args.py小结前缀缓存默认已开启把命中率拉满的关键在于——稳定前缀技巧一、扩展缓存容量到 Host/存储技巧二、保证会话路由亲和技巧三最后用cache_hit_rate指标验证闭环。对 agentic 对话这种前缀重复率极高的负载这三步做完推理成本通常能降下一个量级。赞分享人工智能大模型推理引擎模型推理服务后端【免费下载链接】tokenspeedTokenSpeed is a speed-of-light LLM inference engine.项目地址https://gitcode.com/GitHub_Trending/to/tokenspeed点击查看免费下载相关推荐Ristretto缓存命中率优化10个提升性能的关键技巧Ristretto缓存命中率优化10个提升性能的关键技巧 Ristretto是一个高性能的内存绑定Go缓存库专为需要极致性能的应用场景设计。作为Go语言生态缓存billion-context 缓存调优指南:如何把前缀缓存命中率保持在95–97%,大幅降低 Token 读成本billion context 缓存调优指南:如何把前缀缓存命中率保持在95–97%,大幅降低 Token 读成本 billion context 是一个上下文sccache性能优化技巧10个提升缓存命中率的方法sccache性能优化技巧10个提升缓存命中率的方法 sccache作为一款基于云存储的编译缓存工具能够显著加速C/C、Rust等语言的编译过程。通过优开发工具构建工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站