Helm#

用于为 Kubernetes 部署 vLLM 的 Helm Chart

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

本指南将引导您完成使用 Helm 部署 vLLM 的过程,包括必要的前提条件、helm 安装步骤以及关于架构和 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

Values#

类型

默认值

描述

autoscaling

object

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

自动扩缩配置

autoscaling.enabled

bool

false

启用自动扩缩

autoscaling.maxReplicas

int

100

最大副本数

autoscaling.minReplicas

int

1

最小副本数

autoscaling.targetCPUUtilizationPercentage

int

80

自动扩缩的目标 CPU 利用率

configs

object

{}

Configmap

containerPort

int

8000

容器端口

customObjects

list

[]

自定义对象配置

deploymentStrategy

object

{}

部署策略配置

externalConfigs

list

[]

外部配置

extraContainers

list

[]

附加容器配置

extraInit

object

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

init 容器的附加配置

extraInit.pvcStorage

string

“50Gi”

s3 的存储大小

extraInit.s3modelpath

string

“relative_s3_model_path/opt-125m”

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

extraInit.awsEc2MetadataDisabled

boolean

true

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

extraPorts

list

[]

附加端口配置

gpuModels

list

[“TYPE_GPU_USED”]

使用的 GPU 类型

image

object

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

镜像配置

image.command

list

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

容器启动命令

image.repository

string

“vllm/vllm-openai”

镜像仓库

image.tag

string

“latest”

镜像标签

livenessProbe

object

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

存活探针配置

livenessProbe.failureThreshold

int

3

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

livenessProbe.httpGet

object

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

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

livenessProbe.httpGet.path

string

“/health”

HTTP 服务器上访问的路径

livenessProbe.httpGet.port

int

8000

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

livenessProbe.initialDelaySeconds

int

15

容器启动后多久(秒)启动存活探针

livenessProbe.periodSeconds

int

10

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

maxUnavailablePodDisruptionBudget

string

“”

中断预算配置

readinessProbe

object

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

就绪探针配置

readinessProbe.failureThreshold

int

3

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

readinessProbe.httpGet

object

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

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

readinessProbe.httpGet.path

string

“/health”

HTTP 服务器上访问的路径

readinessProbe.httpGet.port

int

8000

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

readinessProbe.initialDelaySeconds

int

5

容器启动后多久(秒)启动就绪探针

readinessProbe.periodSeconds

int

5

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

replicaCount

int

1

副本数量

resources

object

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

资源配置

resources.limits.”nvidia.com/gpu”

int

1

使用的 GPU 数量

resources.limits.cpu

int

4

CPU 数量

resources.limits.memory

string

“16Gi”

CPU 内存配置

resources.requests.”nvidia.com/gpu”

int

1

使用的 GPU 数量

resources.requests.cpu

int

4

CPU 数量

resources.requests.memory

string

“16Gi”

CPU 内存配置

secrets

object

{}

Secrets 配置

serviceName

string

服务名称

servicePort

int

80

服务端口

labels.environment

string

test

环境名称

labels.release

string

test

发布名称