跳到内容

Helm

用于部署vLLM到Kubernetes的Helm chart

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

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

先决条件

在开始之前,请确保您拥有以下内容

  • 一个正在运行的Kubernetes集群
  • NVIDIA Kubernetes设备插件 (k8s-device-plugin): 可以在 https://github.com/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组件包括持久卷并删除发布。

架构

helm deployment architecture

Values

下表描述了values.yaml中chart的可配置参数

类型 默认值 描述
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 {"modelDownload":{"enabled":true},"initContainers":[],"pvcStorage":"1Gi"} 初始化容器的附加配置
extraInit.modelDownload object {"enabled":true} 模型下载功能配置
extraInit.modelDownload.enabled bool true 启用自动模型下载作业和等待容器
extraInit.modelDownload.image object {"repository":"amazon/aws-cli","tag":"2.6.4","pullPolicy":"IfNotPresent"} 模型下载操作的镜像
extraInit.modelDownload.waitContainer object {} 等待容器配置(命令,参数,环境变量)
extraInit.modelDownload.downloadJob object {} 下载作业配置(命令,参数,环境变量)
extraInit.initContainers list [] 自定义初始化容器(如果启用,则在模型下载后附加)
extraInit.pvcStorage string "1Gi" PVC的存储大小
extraInit.s3modelpath string "relative_s3_model_path/opt-125m" (可选)S3上模型的路径
extraInit.awsEc2MetadataDisabled bool true (可选)禁用AWS 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 {} Secret配置
serviceName string "" 服务名称
servicePort int 80 服务端口
labels.environment string test 环境名称

配置示例

使用S3模型下载(默认)

extraInit:
  modelDownload:
    enabled: true
  pvcStorage: "10Gi"
  s3modelpath: "models/llama-7b"

仅使用自定义初始化容器

用于llm-d等需要自定义sidecar而无需模型下载的用例

extraInit:
  modelDownload:
    enabled: false
  initContainers:
    - name: llm-d-routing-proxy
      image: ghcr.io/llm-d/llm-d-routing-sidecar:v0.2.0
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 8080
          name: proxy
      securityContext:
        runAsUser: 1000
      restartPolicy: Always
  pvcStorage: "10Gi"