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)。注意满足如下要求:
内存大小至少配置为 400 GB,用于缓存 KV Cache。
如果使用灵骏资源配额部署,KVS 服务默认会挂载灵骏机器的 NVMe 本地盘,用于扩展 KV Cache 缓存容量。
Redis 配置:请使用与工作站(存储用户和使用统计信息)不同的 Redis 实例,以防数据相互影响。
重要Redis实例配置要求:
网络:Redis实例的专有网络(VPC)和交换机需要选择和KVS服务相同,即工作站配置的专有网络。
规格:使用灵骏资源配额部署 KVS 服务时,Redis 内存规格应按照每个 KVS 实例预留 3 GB 的标准线性配置。例如,8 个 KVS 实例需选择 24 GB 内存规格的 Tair(Redis)。
请根据是否已有可用 Redis 实例选择配置方式:
创建新实例:需新建实例时推荐使用,系统将自动完成 Tair 实例创建和白名单配置。
单击创建Tair实例后,将显示 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 |