使用 Kubernetes 部署#
使用 Kubernetes 部署 vLLM 是一种可扩展且高效的方式来服务机器学习模型。本指南将引导您完成使用 Kubernetes 部署 vLLM 的过程,包括必要的先决条件、部署步骤和测试。
先决条件#
在开始之前,请确保您已具备以下条件:
一个正在运行的 Kubernetes 集群
NVIDIA Kubernetes 设备插件 (k8s-device-plugin): 可以在 https://github.com/NVIDIA/k8s-device-plugin/ 找到。
集群中可用的GPU资源
部署步骤#
为 vLLM 创建 PVC、Secret 和 Deployment
PVC 用于存储模型缓存,它是可选的,您可以使用 hostPath 或其他存储选项。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mistral-7b
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: default
volumeMode: Filesystem
Secret 是可选的,仅在使用受限模型时需要,如果你不使用受限模型,可以跳过此步骤。
apiVersion: v1
kind: Secret
metadata:
name: hf-token-secret
namespace: default
type: Opaque
data:
token: "REPLACE_WITH_TOKEN"
为 vLLM 创建一个部署文件以运行模型服务器。以下示例部署了 Mistral-7B-Instruct-v0.3 模型:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mistral-7b
namespace: default
labels:
app: mistral-7b
spec:
replicas: 1
selector:
matchLabels:
app: mistral-7b
template:
metadata:
labels:
app: mistral-7b
spec:
volumes:
- name: cache-volume
persistentVolumeClaim:
claimName: mistral-7b
# vLLM needs to access the host's shared memory for tensor parallel inference.
- name: shm
emptyDir:
medium: Memory
sizeLimit: "2Gi"
containers:
- name: mistral-7b
image: vllm/vllm-openai:latest
command: ["/bin/sh", "-c"]
args: [
"vllm serve mistralai/Mistral-7B-Instruct-v0.3 --trust-remote-code --enable-chunked-prefill --max_num_batched_tokens 1024"
]
env:
- name: HUGGING_FACE_HUB_TOKEN
valueFrom:
secretKeyRef:
name: hf-token-secret
key: token
ports:
- containerPort: 8000
resources:
limits:
cpu: "10"
memory: 20G
nvidia.com/gpu: "1"
requests:
cpu: "2"
memory: 6G
nvidia.com/gpu: "1"
volumeMounts:
- mountPath: /root/.cache/huggingface
name: cache-volume
- name: shm
mountPath: /dev/shm
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 60
periodSeconds: 5
为 vLLM 创建 Kubernetes 服务
接下来,创建一个 Kubernetes 服务文件以暴露 mistral-7b 部署:
apiVersion: v1
kind: Service
metadata:
name: mistral-7b
namespace: default
spec:
ports:
- name: http-mistral-7b
port: 80
protocol: TCP
targetPort: 8000
# The label selector should match the deployment labels & it is useful for prefix caching feature
selector:
app: mistral-7b
sessionAffinity: None
type: ClusterIP
部署和测试
使用 kubectl apply -f <filename>
应用部署和服务配置:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
要测试部署,请运行以下 curl
命令:
curl http://mistral-7b.default.svc.cluster.local/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "facebook/opt-125m",
"prompt": "San Francisco is a",
"max_tokens": 7,
"temperature": 0
}'
如果服务正确部署,您应该会收到来自 vLLM 模型的响应。
结论#
通过Kubernetes部署vLLM可以有效利用GPU资源进行ML模型的扩展和管理。按照上述步骤,您应该能够在Kubernetes集群中设置并测试vLLM部署。如果您遇到任何问题或有建议,请随时为文档做出贡献。