Helm#

用于在 Kubernetes 上部署 vLLM 的 Helm Chart

Helm 是 Kubernetes 的包管理器。它将帮助您在 k8s 上部署 vLLM,并自动化 vLLMm Kubernetes 应用程序的部署。借助 Helm,您可以通过覆盖变量值,使用不同的配置将相同的框架架构部署到多个命名空间。

本指南将引导您完成使用 Helm 部署 vLLM 的过程,包括必要的先决条件、helm install 的步骤以及关于架构和 values 文件的文档。

先决条件#

在开始之前,请确保您已具备以下条件

  • 一个正在运行的 Kubernetes 集群

  • NVIDIA Kubernetes 设备插件 (k8s-device-plugin):可以在 NVIDIA/k8s-device-plugin 找到

  • 集群中可用的 GPU 资源

  • 带有将要部署模型的 S3

安装 Chart#

要使用发布名称 test-vllm 安装 Chart

helm upgrade --install --create-namespace --namespace=ns-vllm test-vllm . -f values.yaml --set secrets.s3endpoint=$ACCESS_POINT --set secrets.s3bucketname=$BUCKET --set secrets.s3accesskeyid=$ACCESS_KEY --set secrets.s3accesskey=$SECRET_KEY

卸载 Chart#

要卸载 test-vllm 部署

helm uninstall test-vllm --namespace=ns-vllm

该命令将删除与 Chart 关联的所有 Kubernetes 组件,包括持久卷,并删除发布。

架构#

../../_images/architecture_helm_deployment.png

#

类型

默认值

描述

自动扩缩

对象

{“enabled”:false,”maxReplicas”:100,”minReplicas”:1,”targetCPUUtilizationPercentage”:80}

自动扩缩配置

autoscaling.enabled

布尔值

false

启用自动扩缩

autoscaling.maxReplicas

整数

100

最大副本数

autoscaling.minReplicas

整数

1

最小副本数

autoscaling.targetCPUUtilizationPercentage

整数

80

自动扩缩的目标 CPU 利用率

configs

对象

{}

Configmap

containerPort

整数

8000

容器端口

customObjects

列表

[]

自定义对象配置

deploymentStrategy

对象

{}

部署策略配置

externalConfigs

列表

[]

外部配置

extraContainers

列表

[]

附加容器配置

extraInit

对象

{“pvcStorage”:”1Gi”,”s3modelpath”:”relative_s3_model_path/opt-125m”, “awsEc2MetadataDisabled”: true}

init 容器的附加配置

extraInit.pvcStorage

字符串

“50Gi”

s3 的存储大小

extraInit.s3modelpath

字符串

“relative_s3_model_path/opt-125m”

托管模型权重和配置文件的 s3 上的模型路径

extraInit.awsEc2MetadataDisabled

布尔值

true

禁用 Amazon EC2 实例元数据服务的使用

extraPorts

列表

[]

附加端口配置

gpuModels

列表

[“TYPE_GPU_USED”]

使用的 GPU 类型

image

对象

{“command”:[“vllm”,”serve”,”/data/”,”–served-model-name”,”opt-125m”,”–host”,”0.0.0.0”,”–port”,”8000”],”repository”:”vllm/vllm-openai”,”tag”:”latest”}

镜像配置

image.command

列表

[“vllm”,”serve”,”/data/”,”–served-model-name”,”opt-125m”,”–host”,”0.0.0.0”,”–port”,”8000”]

容器启动命令

image.repository

字符串

“vllm/vllm-openai”

镜像仓库

image.tag

字符串

“latest”

镜像标签

livenessProbe

对象

{“failureThreshold”:3,”httpGet”:{“path”:”/health”,”port”:8000},”initialDelaySeconds”:15,”periodSeconds”:10}

存活探针配置

livenessProbe.failureThreshold

整数

3

探针连续失败多少次后,Kubernetes 认为总体检查失败:容器未存活

livenessProbe.httpGet

对象

{“path”:”/health”,”port”:8000}

Kubelet 在服务器上发起 http 请求的配置

livenessProbe.httpGet.path

字符串

“/health”

HTTP 服务器上要访问的路径

livenessProbe.httpGet.port

整数

8000

容器上要访问的端口的名称或编号,服务器在该端口上监听

livenessProbe.initialDelaySeconds

整数

15

容器启动后,在启动存活探针之前等待的秒数

livenessProbe.periodSeconds

整数

10

执行存活探针的频率(秒)

maxUnavailablePodDisruptionBudget

字符串

“”

中断预算配置

readinessProbe

对象

{“failureThreshold”:3,”httpGet”:{“path”:”/health”,”port”:8000},”initialDelaySeconds”:5,”periodSeconds”:5}

就绪探针配置

readinessProbe.failureThreshold

整数

3

探针连续失败多少次后,Kubernetes 认为总体检查失败:容器未就绪

readinessProbe.httpGet

对象

{“path”:”/health”,”port”:8000}

Kubelet 在服务器上发起 http 请求的配置

readinessProbe.httpGet.path

字符串

“/health”

HTTP 服务器上要访问的路径

readinessProbe.httpGet.port

整数

8000

容器上要访问的端口的名称或编号,服务器在该端口上监听

readinessProbe.initialDelaySeconds

整数

5

容器启动后,在启动就绪探针之前等待的秒数

readinessProbe.periodSeconds

整数

5

执行就绪探针的频率(秒)

replicaCount

整数

1

副本数

resources

对象

{“limits”:{“cpu”:4,”memory”:”16Gi”,”nvidia.com/gpu”:1},”requests”:{“cpu”:4,”memory”:”16Gi”,”nvidia.com/gpu”:1}}

资源配置

resources.limits.”nvidia.com/gpu”

整数

1

使用的 GPU 数量

resources.limits.cpu

整数

4

CPU 数量

resources.limits.memory

字符串

“16Gi”

CPU 内存配置

resources.requests.”nvidia.com/gpu”

整数

1

使用的 GPU 数量

resources.requests.cpu

整数

4

CPU 数量

resources.requests.memory

字符串

“16Gi”

CPU 内存配置

secrets

对象

{}

Secrets 配置

serviceName

字符串

服务名称

servicePort

整数

80

服务端口

labels.environment

字符串

test

环境名称

labels.release

字符串

test

发布名称