FlashKV 是阿里云 PAI 推出的专为 LLM 推理设计的分布式 KV-Cache 缓存服务,它将 KV 张量分层持久化至内存、磁盘和远端,实现集群级跨实例共享,后续相同前缀的请求直接复用,跳过重复计算,从而大幅降低TTFT,提升服务吞吐量。
核心价值
vLLM、SGLang 等推理引擎的本地前缀缓存仅在单副本内生效,且受 GPU 显存容量制约。KV Cache 服务在此基础上提供集群级系统增强:
-
集群级共享:已绑定该 KV Cache 服务的所有推理服务副本共享同一份缓存,无论请求被路由到哪个副本,均可命中其他副本已计算的缓存结果。单副本扩展到多副本时,缓存命中率不会因扩容而下降。
-
大幅降低首 Token 延迟(TTFT):命中缓存的请求跳过公共前缀的整个 Prefill 阶段,TTFT 接近仅处理当轮新增输入的水平。前缀越长(如数千 Token 的对话历史或检索文档),跳过的计算量越大,TTFT 降低越显著。
-
提升吞吐量,降低成本:跳过 Prefill 释放 GPU 算力,同等资源下可处理更多并发请求,单请求平均计算成本随命中率提升而下降。
-
突破 GPU 显存容量限制:KV Cache 服务采用内存、磁盘和远端多级分层存储,热点前缀驻留内存保障低延迟,冷门数据自动下沉至磁盘或远端扩展容量,可缓存远超 GPU 显存容量的前缀数据,维持更高命中率;存储容量不受单机限制,增加节点即可线性扩展,扩缩容近乎零改造。
-
高可用与故障自愈:节点故障后元数据自动清理,缓存状态自动恢复;进程重启后磁盘中的缓存数据可直接复用,推理服务不受影响。扩缩容场景下有效降低数据丢失比例,保障服务稳定运行。
工作原理
KV Cache 服务位于推理引擎与底层存储介质之间,核心流程分两步:
-
算完即存:推理引擎完成前缀 Prefill 后,将生成的 KV 张量写入 KV Cache 服务,按分层存储策略(内存→磁盘→远端)持久化。
-
用前先取:后续请求到来时,优先从 KV Cache 服务查找匹配前缀的缓存;命中则直接取回,跳过该前缀的 Prefill 计算。
适用场景
以下场景中不同请求包含大量相同的前缀内容,KV Cache 收益最为显著:
-
多轮对话:对话历史随轮次持续累积,命中缓存后每轮只需计算新增消息的 KV,TTFT 持续降低。
-
RAG 检索增强生成:检索文档反复出现在不同请求中,命中缓存后每个请求只需计算用户 Query 对应的 KV。
-
共享系统提示词:多用户共享同一套较长 System Prompt,命中缓存后每个请求只需计算用户输入部分的 KV。
-
多模型/多实例集群:绑定同一 KV Cache 服务的多个推理服务共享缓存,热点前缀只需计算一次,整体资源利用率提升。
-
弹性伸缩的推理服务:扩容后新副本直接命中已有缓存,无需等待预热;扩缩容不丢缓存,平稳应对流量峰谷。
KV Cache 不提供推理能力,需与推理服务配合使用;推理服务部署时需选择 KV Cache 服务,绑定后缓存自动生效,无需在推理引擎层额外配置。
创建 KV Cache 服务
-
在左侧导航栏,单击服务,切换到KV Cache页签。
-
单击+ 创建缓存服务,配置以下参数:
-
服务名称:支持小写字母、数字、下划线,必须以小写字母开头。
-
资源配置:KV Cache 服务仅使用 CPU 和内存资源,无需 GPU。
-
资源类型:选择 EAS资源组或资源配额。
-
资源配置:设置副本数、CPU 、内存(GB)和系统盘(GB)。
缓存容量主要由内存大小决定,建议根据预期缓存数据量适当调大内存。
-
-
Redis 配置:实例规格建议至少16GB。请使用与工作站(存储用户和使用统计信息)不同的Redis 实例,以防数据相互影响。
请根据是否已有可用 Redis 实例选择配置方式:
创建新实例:需新建实例时推荐使用,系统将自动完成 Tair 实例创建和白名单配置。
单击创建Redis实例后,将显示 Tair 实例的创建进度,此过程请勿刷新页面;如已刷新,请前往 Tair 控制台完成剩余操作。创建完成后,页面展示 Redis 地址、Redis 用户名(默认为 default)和 Redis 密码,请妥善保管上述信息。
选择已有实例:账号下已有 Tair 或 Redis 实例时可直接复用,避免重复创建和额外费用。
手动输入:请确保 Redis 实例所在 VPC 与工作站配置的专有网络一致,否则无法正常连接。
-
-
确认配置后,单击部署。
管理 KV Cache 服务
-
查看服务监控:单击KV Cache服务进入详情页面,切换到监控页签。参见FlashKV 监控指标说明 了解服务的整体性能表现,或进行故障诊断与排查。
-
删除 KV Cache 服务:在 KV Cache 页面,找到目标缓存服务,单击操作列中的删除。
-
删除 KV Cache 服务后,工作站内推理服务将停止使用缓存,已缓存的数据不可恢复,但推理服务本身不受影响,仍可正常接收请求。
-
删除缓存服务时不会自动删除 Redis 实例,请根据需要手动释放。
-
FlashKV 监控指标说明
FlashKV 服务提供服务级和实例级两个监控面板,两个面板的图表布局和指标含义基本一致,区别在于统计维度不同:
-
服务级面板展示所有实例聚合后的监控数据,用于观察整体趋势;
-
实例级面板按实例展示监控数据,用于具体实例的性能分析和问题排查。
所有指标如下表所示:
|
分类 |
面板指标 |
指标说明 |
|
空间使用情况 |
Object Keys |
已存储的 Key 总数量,包括内存和本地磁盘中存储的 Key 数量 |
|
Object Bytes |
已存储的 Object 数据总大小,包括内存和本地磁盘中存储的数据大小 |
|
|
Instance Utilization |
各实例的存储空间使用率,用于识别空间使用不均衡或热点实例(仅服务级面板) |
|
|
请求状态 |
Request Count |
三类不同数据访问请求的访问 QPS,包含:
|
|
Request Fail Count |
数据写入/读取/查询请求的失败状态数,按返回状态码分组展示 |
|
|
Key状态 |
Key Status |
数据写入/读取/查询请求访问返回的 Key 状态分布 |
|
Query Hit Rate |
数据查询请求的命中率 |
|
|
数据回收指标 |
Recycle Count |
数据回收操作的主动触发和超时触发次数,包括内存 Eviction 和磁盘 Cleanup |
|
Recycle Keys |
回收的 Key 数量,包括 Eviction 淘汰和 Cleanup 清理的 Key 数量 |
|
|
Recycle Bytes |
回收的数据大小,包括 Eviction 淘汰和 Cleanup 清理的数据大小 |
|
|
数据加载指标 |
Reload Keys |
从本地磁盘加载的 Key 数量,包括 Restore 同步加载和 Preload 预加载的 Key 数量 |
|
Reload Bytes |
从本地磁盘加载的数据大小,包括 Restore 同步加载和 Preload 预加载的数据大小 |
|
|
传输指标 |
Transfer Out |
Transfer Engine 不同传输方式(包含 TCP 和 RDMA)的流出数据量大小 |
|
Transfer In |
Transfer Engine 不同传输方式(包含 TCP 和 RDMA)的流入数据量大小 |
|
|
时延指标 |
Put Latency Avg |
数据写入请求的平均时延,以及各个子步骤的平均时延,包含查询 Meta、分配内存、传输数据、Seal Data |
|
Put Latency P99 |
数据写入请求的 P99 时延,以及各子步骤的 P99 时延,用于观察长尾延迟,包含查询 Meta、分配内存、传输数据、Seal Data |
|
|
Get Latency Avg |
数据读取请求的平均时延,以及各个子步骤的平均时延,包含查询 Key 内存、传输数据 |
|
|
Get Latency P99 |
数据读取请求的 P99 时延,以及各子步骤的 P99 时延,用于观察长尾延迟,包含查询 Key 内存、传输数据 |
|
|
Query Latency Avg |
数据查询请求的平均时延,以及各个子步骤的平均时延,包含查询 Meta、设置响应 Meta |
|
|
Query Latency P99 |
数据查询请求的 P99 时延,以及各子步骤的 P99 时延,用于观察长尾延迟,包含查询 Meta、设置响应 Meta |