跨实例共享 KV Cache#

本教程演示如何在 vLLM 部署中启用 LMCache 的远程 KV Cache 存储。远程 KV Cache 共享将大型 KV Cache 从 GPU 内存移至远程共享存储,从而提高 KV Cache 的命中率,并可能提高部署的容错能力。

vLLM Production Stack 使用 LMCache 进行远程 KV Cache 共享。更多详情,请参阅 LMCache GitHub 仓库

目录#

  1. 先决条件

  2. 第 1 步:配置远程 KV 缓存存储

  3. 第 2 步:部署 Helm Chart

  4. 第 3 步:验证安装

  5. 远程共享存储的性能增益基准测试(进行中)

先决条件#

步骤 1:配置远程 KV Cache 存储#

找到文件 tutorials/assets/values-06-remote-shared-storage.yaml,其内容如下:

servingEngineSpec:
  runtimeClassName: ""
  modelSpec:
  - name: "mistral"
    repository: "lmcache/vllm-openai"
    tag: "latest"
    modelURL: "mistralai/Mistral-7B-Instruct-v0.2"
    replicaCount: 2
    requestCPU: 10
    requestMemory: "40Gi"
    requestGPU: 1
    pvcStorage: "50Gi"
    vllmConfig:
      enableChunkedPrefill: false
      enablePrefixCaching: false
      maxModelLen: 16384
      v1: 1

    lmcacheConfig:
      enabled: true
      cpuOffloadingBufferSize: "20"

    hf_token: <YOUR HF TOKEN>

cacheserverSpec:
  replicaCount: 1
  containerPort: 8080
  servicePort: 81
  serde: "naive"

  repository: "lmcache/vllm-openai"
  tag: "latest"
  resources:
    requests:
      cpu: "4"
      memory: "8G"
    limits:
      cpu: "4"
      memory: "10G"

  labels:
    environment: "cacheserver"
    release: "cacheserver"

注意

将 `<YOUR HF TOKEN>` 替换为您的实际 Hugging Face 令牌。

另外,目前 v1 必须设置为 1 才能使用带有 latest 标签的 LMCache docker 镜像。

``CacheserverSpec`` 用于启动远程共享 KV Cache 存储。

步骤 2:部署 Helm Chart#

使用自定义值文件部署 Helm Chart

helm install vllm vllm/vllm-stack -f tutorials/assets/values-06-shared-storage.yaml

步骤 3:验证安装#

  1. 检查 Pod 日志以验证 LMCache 是否处于活动状态

    kubectl get pods
    

    找到 vLLM 部署的 Pod 名称(例如,`vllm-mistral-deployment-vllm-xxxx-xxxx`)。然后运行:

    kubectl logs -f <pod-name>
    

    查找日志中指示 LMCache 已启用并正常运行的条目。示例文本(指示 KV Cache 已存储)为:

    INFO 01-21 20:16:58 lmcache_connector.py:41] Initializing LMCacheConfig under kv_transfer_config kv_connector='LMCacheConnector' kv_buffer_device='cuda' kv_buffer_size=1000000000.0 kv_role='kv_both' kv_rank=None kv_parallel_size=1 kv_ip='127.0.0.1' kv_port=14579
    INFO LMCache: Creating LMCacheEngine instance vllm-instance [2025-01-21 20:16:58,732] -- /usr/local/lib/python3.12/dist-packages/lmcache/experimental/cache_engine.py:237
    
  2. 将路由器的服务端口转发到本地以访问堆栈

    kubectl port-forward svc/vllm-router-service 30080:80
    
  3. 向堆栈发送请求并观察日志

    curl -X POST https://:30080/v1/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "mistralai/Mistral-7B-Instruct-v0.2",
        "prompt": "Explain the significance of KV cache in language models.",
        "max_tokens": 10
      }'
    

    预期输出

    来自堆栈的响应应包含完成结果,并且日志应显示 LMCache 活动,例如:

    DEBUG LMCache: Store skips 0 tokens and then stores 13 tokens [2025-01-21 20:23:45,113] -- /usr/local/lib/python3.12/dist-packages/lmcache/integration/vllm/vllm_adapter.py:490
    

对远程共享存储的性能提升进行基准测试(正在进行中)#

在本节中,我们将对使用 LMCache 进行远程 KV Cache 共享存储时的性能改进进行基准测试。请关注更新。

结论#

本教程演示了如何在 vLLM 部署中使用 LMCache 为多个 vllm 节点启用跨实例共享的 KV Cache 存储。通过将 KV Cache 存储到远程共享存储,您可以提高 KV Cache 的命中率,并可能提高部署的容错能力。探索进一步的配置,以根据您的工作负载定制 LMCache。