LMCache 服务状态诊断指南:深入解析 `lmcache describe` 命令的 KV 缓存与推理引擎状态查询
2026/9/15 20:09:07 网站建设 项目流程

LMCache 服务状态诊断指南:深入解析lmcache describe命令的 KV 缓存与推理引擎状态查询

【免费下载链接】LMCacheLMCache: Supercharge Your LLM with the Fastest KV Cache Layer项目地址: https://gitcode.com/GitHub_Trending/lm/LMCache

lmcache describe是 LMCache 项目(README.md)中用于查看运行中服务详细状态的 CLI 诊断命令,支持对 KV 缓存服务(kvcache)与推理引擎(engine)两种目标进行健康检查、资源用量与 KV 缓存布局的全景式观察。读完本文,你将掌握该命令的全部子命令、输出字段含义、JSON 机器可读输出方式,以及引擎 KV 形状(EngineKVFormat)缩写背后的底层含义,能够在排障与性能调优时快速定位问题。

命令概览:一个命令,两种诊断视角

在 lmcache/cli/commands/describe.py 中,DescribeCommand通过位置参数target区分两种目标:

  • kvcache—— LMCache KV 缓存服务自身,包含健康状态、L1 存储、已注册模型、L2 适配器四类信息;
  • engine—— 与 LMCache 配对的推理引擎(vLLM),包含模型标识、上下文窗口、健康状态与在途请求数。

二者的数据来源完全不同:describe kvcache读取 LMCache 服务自身暴露的/statusHTTP 端点,而describe engine只读取 vLLM 引擎自己的 HTTP 端点(/v1/models/health/metrics),完全不依赖 LMCache 内部状态。

实现细节:在 lmcache/cli/http.py 中定义了两个目标的默认 URL ——kvcache默认http://localhost:8080engine默认http://localhost:8000。若未指定--url,命令会按目标自动选取默认值。

检查 KV 缓存服务(describe kvcache

基本用法

lmcache describe kvcache --url http://localhost:8000

输出示例(源自 docs/source/cli/describe.rst):

============ LMCache KV Cache Service ============ Health: OK URL: http://localhost:8000 Engine type: BlendEngine Chunk size: 256 L1 capacity (GB): 60.00 L1 used (GB): 42.30 (70.5%) Eviction policy: LRU Cached objects: 1024 Active sessions: 3 ---- Model: meta-llama/Llama-3.1-70B-Instruct ---- Model: meta-llama/Llama-3.1-70B-Instruct World size: 4 GPU IDs: 0, 1, 2, 3 Num layers: 80 Num blocks: 2048 Cache size per token (bytes): 327680 --- Kernel group 0 (meta-llama/Llama-3.1-70B-Instruct) --- Kernel group index: 0 Engine group index: 0 Object group index: 0 Num layers: 80 Slots per block: 128 Dtype: torch.float16 MLA: False Attention backend: vLLM non-MLA flash attention Engine KV shape: NL x [2, NB, BS, NH, HS] Engine KV tensor shape: 80 x [2, 2048, 128, 8, 128] ------------- L2: NixlStoreL2Adapter ------------- Type: NixlStoreL2Adapter Health: OK Backend: nixl_rdma Stored objects: 512 Pool used: 480 / 512 (93.8%) ==================================================

输出字段逐段解读

KVCacheDescriber(describe.py)按四个逻辑分段构建输出:

Overview(总览):健康状态(Health)、服务 URL、引擎类型(Engine type,如BlendEngine)、分块大小(Chunk size)。其中Health字段直接取自/status响应中的is_healthy布尔值,由 fmt_health 渲染为OK/UNHEALTHY

L1 storage(L1 存储):容量(L1 capacity (GB))、已用空间及占用比例(L1 used (GB))、驱逐策略(Eviction policy,如LRU)、缓存对象数量(Cached objects)、活跃会话数(Active sessions)。这些数据通过 safe_get 从/status响应的storage_manager.l1_managerstorage_manager.eviction_controller嵌套结构中安全提取。

Registered models(已注册模型):按模型去重(以model_name + world_size为键,因为同一模型可能部署在多张 GPU 上),每个模型先给出上下文级摘要(World sizeGPU IDsNum layersNum blocksCache size per token (bytes)),随后针对每个 kernel group 输出一个分组小节,包含组索引、每组层数、Slots per block、张量Dtype、是否 MLA、注意力后端(Attention backend)、符号化 KV 形状(Engine KV shape)与具体化形状(Engine KV tensor shape)。

L2 adapters(L2 适配器):每个适配器的类型、健康状态、后端(如nixl_rdma)、已存储对象数、对象池占用(Pool used)。

源码验证/status端点由 lmcache/v1/multiprocess/http_apis/info_api.py 提供,内部调用引擎模块的report_status();而模型级布局数据来自 lmcache/v1/platform/base/cache_context.py 中的GPUCacheContext.report_status(),该方法返回num_layersnum_blockscache_size_per_token()kernel_groups列表 —— 这正是describe kvcache中模型段与 kernel group 段的数据源头。

检查推理引擎(describe engine

describe engine不接触 LMCache 服务,而是只读取 vLLM 引擎自身的 HTTP 端点:

lmcache describe engine --url http://localhost:8000

输出示例:

================ Inference Engine ================ Model: meta-llama/Llama-3.1-8B-Instruct Max context (tokens): 131072 Status: OK Running requests: 3 ==================================================

各字段含义:

  • Model / Max context—— 服务模型 ID 与最大上下文长度,来自/v1/models响应(EngineDescriber.add_overview 取第一个模型条目的idmax_model_len);
  • Status—— 引擎/health探针返回的OK/UNHEALTHY(fetch_health 仅以 HTTP 200 判定存活,因为 vLLM 的/health返回空 body 而非 JSON);
  • Running requests—— 在途请求数,通过 fetch_running_requests 解析/metrics页面中vllm:num_requests_running指标并跨所有序列求和得到;若指标被禁用或不可达,则显示N/A而非报错。

容错设计:只有/v1/models是必需请求。若/health/metrics不可用,命令仍会报告它能获取到的部分,而不是整体失败。同理,/metrics解析失败会降级为None(渲染为N/A),绝不抛出异常中断。

JSON 输出(机器可读模式):

lmcache describe engine --url http://localhost:8000 --format json
{ "title": "Inference Engine", "metrics": { "model": "meta-llama/Llama-3.1-8B-Instruct", "max_context": 131072, "status": "OK", "running_requests": 3 } }

完整命令行选项

Flag说明
target要描述的对象(位置参数,必填):kvcacheengine
--url服务器 URL。按目标取默认值:kvcachehttp://localhost:8080enginehttp://localhost:8000
--format输出格式:terminal(默认)或json
--output PATH将指标保存到文件(格式跟随--format)。
-q/--quiet抑制 stdout 输出,仅保留退出码。

实现细节--format--output-q/--quiet并非DescribeCommand自行注册,而是由基类 BaseCommand.register 统一调用 _add_output_args 注入到所有 CLI 子命令的公共参数。输出由 create_metrics 构建:非--quiet时注册StreamHandler到 stdout,设置--output时额外注册FileHandler,两者使用由--format选定的同一格式化器。--url会先经 normalize_url 规范化(自动补全http://协议前缀并去除尾部斜杠)。

-q模式适合脚本集成:命令不输出任何内容,仅通过进程退出码(成功为 0,网络/解析错误时为 1)传递结果。

JSON 输出:面向程序的结构化数据

--format json专为脚本、监控与自动化设计。modelskernel_groupsl2_adapters会被收集为列表,便于程序化遍历:

lmcache describe kvcache --url http://localhost:8000 --format json
{ "title": "LMCache KV Cache Service", "metrics": { "health": "OK", "url": "http://localhost:8000", "engine_type": "BlendEngine", "chunk_size": 256, "l1_capacity_gb": 60.0, "l1_used_gb": "42.30 (70.5%)", "eviction_policy": "LRU", "cached_objects": 1024, "active_sessions": 3, "models": [ { "model": "meta-llama/Llama-3.1-70B-Instruct", "world_size": 4, "gpu_ids": "0, 1, 2, 3", "num_layers": 80, "num_blocks": 2048, "cache_size_per_token": 327680 } ], "kernel_groups": [ { "model": "meta-llama/Llama-3.1-70B-Instruct", "kernel_group_idx": 0, "engine_group_idx": 0, "object_group_idx": 0, "num_layers": 80, "slots_per_block": 128, "dtype": "torch.float16", "is_mla": false, "attention_backend": "vLLM non-MLA flash attention", "engine_kv_shape": "NL x [2, NB, BS, NH, HS]", "engine_kv_concrete_shape": "80 x [2, 2048, 128, 8, 128]" } ], "l2_adapters": [ { "type": "NixlStoreL2Adapter", "health": "OK", "backend": "nixl_rdma", "stored_object_count": 512, "pool_used": "480 / 512 (93.8%)" } ] } }

实现细节:JSON 结构由 lmcache/cli/metrics/metrics.py 的add_list_section实现 —— 共享同一group键的多个 section 会被聚合为 JSON 中的数组(如"models": [{...}, {...}])。例如describe.py中以model_{idx}model_{idx}_kg_{kg_idx}作为唯一 section 键、以models/kernel_groups/l2_adapters作为分组键,最终由 to_dict 序列化。

Engine KV Shape 缩写表(EngineKVFormat)

engine_kv_shape字段使用EngineKVFormat枚举的短名(源自 csrc/engine_kv_format.h,该头文件不依赖任何厂商头文件,供所有后端与 Python 侧device_ops共享定义):

缩写含义
NBnum_blocks
NLnum_layers
BSblock_size
NHnum_heads
HShead_size
PBSpage_buffer_size(NB × BS)

如何阅读形状表达式:例如示例中的NL x [2, NB, BS, NH, HS]对应枚举值NL_X_TWO_NB_BS_NH_HS = 1,表示“每层一个列表条目、K/V 轴(size 2)位于 block 轴之前”,即 vLLM 非 MLA flash attention 的布局,其物理形状为[2, num_blocks, block_size, num_heads, head_size]。该格式事实由 format_facts 以constexpr表驱动方式给出:NL_X_TWO_NB_BS_NH_HS标记is_layer_list = trueis_two_major = true

其余常见格式包括(详细注释见 engine_kv_format.h):

  • NB_NL_TWO_BS_NH_HS(0):vLLM CROSS_LAYER 模式,全层融合于单一张量;
  • NL_X_NB_BS_HS(3):vLLM MLA、SGLang MLA(MP daemon),单潜在 KV 头、无独立 K/V 拆分,is_mla = true
  • NL_X_NB_NH_BS_CS(12):vLLM non-MLA blocks-first 注意力(HND 布局)且 K/V 融合到尾部 content 维(unified KV cache);
  • TWO_X_NL_X_NBBS_NH_HS(4):SGLang MHA(flash attention 与 flash infer);
  • NL_X_TWO_X_NB_BS_NH_HS(16):vLLM 每层(K, V)元组形式(is_kv_second_tuple = true)。

上述is_mlais_hndis_fused_packedis_cross_layer等谓词正是FormatFacts结构(engine_kv_format.h)中的分类标志,供设备侧传输 kernel 判断如何搬运对应布局的 KV 数据 —— 这也是describe kvcacheMLAAttention backendEngine KV shape等字段的底层语义来源。

典型使用场景与小结

  • 服务健康巡检lmcache describe kvcache快速确认 L1 存储占用比例(如70.5%)、驱逐策略与缓存对象规模,判断是否需要扩容或调整驱逐配置;
  • 多 GPU 模型布局核对:通过World sizeGPU IDs、kernel group 的三组索引(kernel_group_idx/engine_group_idx/object_group_idx)验证 KV 缓存分组是否与引擎配置一致;
  • 引擎侧排障lmcache describe engine无需登录 vLLM 管理界面即可获取Max contextRunning requests,配合-q与退出码可在监控脚本中做存活探测;
  • 自动化集成--format json+--output PATH将诊断结果落盘,供 Prometheus 抓取或自研巡检系统解析。

总而言之,lmcache describe把 LMCache 服务与 vLLM 引擎两个维度的运行状态统一收敛到一个命令之下:终端输出适合人读,JSON 输出适合机器读,优雅降级保证在部分端点不可用时依然能输出尽量完整的信息。它是运维 LMCache 部署时最直接、最可靠的诊断入口之一。

【免费下载链接】LMCacheLMCache: Supercharge Your LLM with the Fastest KV Cache Layer项目地址: https://gitcode.com/GitHub_Trending/lm/LMCache

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询