Helm Chart 部署#

本教程将指导您完成在支持 GPU 的 Kubernetes 环境中部署 vLLM 服务引擎所需的基本配置。您将学习如何指定模型详细信息、设置必要的环境变量(如 HF_TOKEN)以及启动 vLLM 服务引擎。

目录#

  1. 先决条件

  2. 步骤 1:准备配置文件

  3. 步骤 2:应用配置

  4. 步骤 3:验证部署

  5. 步骤 4(可选):多 GPU 部署

先决条件#

  • 前提条件 教程中设置的支持 GPU 的 Kubernetes 环境。

  • 系统上安装了 Helm。

  • 拥有 HuggingFace 令牌 (HF_TOKEN) 的访问权限。

步骤 1:准备配置文件#

  1. 找到示例配置文件 tutorials/assets/values-02-basic-config.yaml

  2. 打开文件并更新以下字段
    • 在 yaml 文件中,将 hf_token: <YOUR HF TOKEN> 替换为您实际的 Huggingface token。

values-02-basic-config.yaml 文件中的关键项说明#

  • name: 模型部署的唯一标识符。

  • repository: 包含模型服务引擎镜像的 Docker 仓库。

  • tag: 指定要使用的模型镜像版本。

  • modelURL: 指向 Hugging Face 或其他托管服务上模型的 URL。

  • replicaCount: 部署的副本数量,支持负载扩展。

  • requestCPU: 每个副本请求的 CPU 资源量。

  • requestMemory: 部署的内存分配;加载模型需要足够的内存。

  • requestGPU: 指定分配给部署的 GPU 数量。

  • pvcStorage: 定义模型存储的持久卷声明大小。

  • vllmConfig: 包含模型特定的配置

    • enableChunkedPrefill: 通过预取模型块来优化性能。

    • enablePrefixCaching: 加快查询中常见前缀的响应时间。

    • maxModelLen: 模型可处理的最大序列长度。

    • dtype: 计算数据类型,例如,在现代 GPU 上为 bfloat16 以获得更快的性能。

    • extraArgs: 传递给 vLLM 引擎以微调行为的额外参数。

  • hf_token: 用于向 Hugging Face 模型中心进行身份验证的 Hugging Face token。

  • env: 要传递给模型服务引擎的额外环境变量。

示例片段#

servingEngineSpec:
  modelSpec:
  - name: "llama3"
    repository: "vllm/vllm-openai"
    tag: "latest"
    modelURL: "meta-llama/Llama-3.1-8B-Instruct"
    replicaCount: 1

    requestCPU: 10
    requestMemory: "16Gi"
    requestGPU: 1

    pvcStorage: "50Gi"

    vllmConfig:
      enableChunkedPrefill: false
      enablePrefixCaching: false
      maxModelLen: 16384
      dtype: "bfloat16"
      extraArgs: ["--disable-log-requests", "--gpu-memory-utilization", "0.8"]

    hf_token: <YOUR HF TOKEN>

步骤 2:应用配置#

使用 Helm 部署配置

helm repo add vllm https://vllm-project.github.io/production-stack
helm install vllm vllm/vllm-stack -f tutorials/assets/values-02-basic-config.yaml

预期输出

您应该会看到输出,表明 Helm Chart 已成功部署

Release "vllm" has been deployed. Happy Helming!
NAME: vllm
LAST DEPLOYED: <timestamp>
NAMESPACE: default
STATUS: deployed
REVISION: 1

步骤 3:验证部署#

  1. 检查 Pod 的状态

    kubectl get pods
    

    预期输出

    您应该看到以下 Pod

    NAME                                             READY   STATUS    RESTARTS   AGE
    pod/vllm-deployment-router-xxxx-xxxx         1/1     Running   0          3m23s
    vllm-llama3-deployment-vllm-xxxx-xxxx        1/1     Running   0          3m23s
    
    • vllm-deployment-router Pod 作为路由器,负责管理请求并将其路由到相应的模型服务 Pod。

    • vllm-llama3-deployment-vllm Pod 为推理服务实际模型。

  2. 验证服务是否已正确公开

    kubectl get services
    

    预期输出

    确保服务引擎和路由器都有对应的服务

    NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    vllm-engine-service   ClusterIP   10.103.98.170    <none>        80/TCP    4m
    vllm-router-service   ClusterIP   10.103.110.107   <none>        80/TCP    4m
    
    • vllm-engine-service 公开了服务引擎。

    • vllm-router-service 负责路由和跨模型服务 Pod 的负载均衡。

  3. 测试健康检查端点

    curl http://<SERVICE_IP>/health
    

    <SERVICE_IP> 替换为服务的外部 IP。如果一切配置正确,您将收到

    {"status":"healthy"}
    

有关查询已部署的 vLLM 服务,请参阅 快速入门 教程中的步骤 3。

步骤 4(可选):多 GPU 部署#

到目前为止,您已配置并部署了一个带单个 GPU 的 vLLM 服务引擎。您也可以使用以下示例配置片段在多个 GPU 上部署服务引擎

servingEngineSpec:
  runtimeClassName: ""
  modelSpec:
  - name: "llama3"
    repository: "vllm/vllm-openai"
    tag: "latest"
    modelURL: "meta-llama/Llama-3.1-8B-Instruct"
    replicaCount: 1
    requestCPU: 10
    requestMemory: "16Gi"
    requestGPU: 2
    pvcStorage: "50Gi"
    pvcAccessMode:
      - ReadWriteOnce
    vllmConfig:
      enableChunkedPrefill: false
      enablePrefixCaching: false
      maxModelLen: 4096
      tensorParallelSize: 2
      dtype: "bfloat16"
      extraArgs: ["--disable-log-requests", "--gpu-memory-utilization", "0.8"]
    hf_token: <YOUR HF TOKEN>
    shmSize: "20Gi"

请注意,目前仅支持张量并行。如果您请求的 requestGPU 大于一,则必须配置 shmSize 字段,以便为运行张量并行所需的多个进程启用适当的共享内存。

结论#

在本教程中,您在 Kubernetes 环境中配置并部署了一个支持 GPU(单个 GPU 或多个 GPU)的 vLLM 服务引擎。您还学习了如何验证其部署并确保其按预期运行。如需进一步自定义,请参阅 values.yaml 文件和 Helm Chart 文档。