1、课程导学与环境准备:vLLM与Kubernetes概述、课程目标、前置知识要求、实验环境搭建
大家好,欢迎来到这门课。我是你们的讲师,一个在AI运维和Kubernetes领域摸爬滚打了七八年的老工程师。今天咱们要聊的,是怎么把vLLM这个大模型推理框架,稳稳当当地跑在Kubernetes上。
说实话,我刚开始接触大模型部署那会儿,踩的坑真不少。模型跑不起来、显存爆了、请求超时……这些问题我几乎都遇到过。后来慢慢摸索出一套方法论,今天分享给你。
1.1 vLLM与Kubernetes:为什么是它们?
先说说vLLM。它是个高性能的大模型推理引擎,核心优势就两个:快和省。快,是因为它用了PagedAttention技术,显存利用率高得吓人;省,是因为它支持连续批处理,能把GPU的算力榨干。
我有个项目,之前用HuggingFace的Transformers直接部署,QPS(每秒查询数)只有20。换成vLLM后,同样的硬件,QPS直接飙到150。你想想看,这差距有多大?
再说Kubernetes。它是个容器编排平台,说白了就是帮你管理一堆服务器,让它们像一台电脑一样工作。在大模型场景下,Kubernetes能帮你做三件事:
- 自动扩缩容:流量大了自动加实例,流量小了自动减,省成本
- 故障自愈:某个Pod挂了,Kubernetes会自动重启,不用你半夜爬起来
- 资源调度:GPU这种稀缺资源,Kubernetes能精确分配,避免浪费
嗯,这里要注意:vLLM + Kubernetes的组合,不是简单的1+1。它需要你理解两者的特性,才能发挥最大效能。这也是这门课要解决的核心问题。
核心观点:vLLM解决的是模型推理的性能问题,Kubernetes解决的是服务运维的可靠性问题。两者结合,才能构建生产级的大模型服务。
1.2 课程目标:学完你能做什么?
这门课不是讲理论,是讲实战。学完之后,我希望你能做到:
- 独立搭建环境:用Minikube或Kind,在本地跑起一个Kubernetes集群
- 部署vLLM服务:把一个大模型(比如Llama、Qwen)部署到Kubernetes上,对外提供API
- 配置自动扩缩容:根据请求量,自动调整vLLM实例的数量
- 监控与调优:用Prometheus和Grafana监控推理性能,找到瓶颈并优化
- 处理常见故障:OOM(内存溢出)、GPU显存不足、请求超时……这些坑我带你一个个填平
我个人习惯,每节课都会留一个动手实验。你跟着做一遍,比看十遍视频都管用。
1.3 前置知识要求:你需要会什么?
这门课有一定门槛,但不高。你需要具备以下基础:
| 知识领域 | 具体要求 | 备注 |
|---|---|---|
| Linux基础 | 会基本的命令行操作(cd、ls、vim等) | 如果不会,建议先花2小时学一下 |
| Docker基础 | 知道什么是容器,会写Dockerfile | 我会在课程中简单回顾 |
| Python基础 | 能看懂简单的Python代码 | vLLM的API调用需要用到 |
| Kubernetes基础 | 了解Pod、Service、Deployment等核心概念 | 如果你完全零基础,建议先看官方入门教程 |
我的建议:如果你Kubernetes基础比较薄弱,别担心。我会在每节课前用5分钟回顾相关概念。但Docker和Linux基础,你得自己补一补。
1.4 实验环境搭建:Minikube vs Kind
工欲善其事,必先利其器。咱们先搭环境。本地跑Kubernetes,主流方案有两个:Minikube和Kind。
Minikube:它会在你的电脑上创建一个虚拟机,然后在虚拟机里跑Kubernetes。优点是功能完整,支持各种特性;缺点是资源占用大,启动慢。
Kind:它用Docker容器来模拟Kubernetes节点。优点是轻量、启动快;缺点是对某些高级特性支持不够好。
我个人更推荐Kind,原因有三:
- 启动快,30秒就能拉起一个集群
- 资源占用小,2核4G的笔记本也能跑
- 和CI/CD环境一致,方便后续集成
当然,如果你需要用到NodePort、LoadBalancer等特性,Minikube会更合适。咱们这门课主要用Kind,但我会在附录里给出Minikube的配置方法。
注意:无论用哪种方案,请确保你的电脑至少有4核CPU、8GB内存、20GB可用磁盘空间。如果条件允许,建议用16GB内存以上的机器。
1.5 安装kubectl和Helm
环境搭好了,还得装两个工具:kubectl和Helm。
kubectl是Kubernetes的命令行工具,所有操作都靠它。安装很简单:
# Linux/Mac
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证安装
kubectl version --client
Helm是Kubernetes的包管理器,类似apt或yum。用它安装vLLM会方便很多:
# 安装Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version
我曾经遇到过一个问题:kubectl版本和Kubernetes集群版本不匹配,导致某些命令执行失败。所以建议你安装最新版的kubectl,或者至少保证版本差异在±1以内。
1.6 启动你的第一个Kubernetes集群
好,现在咱们用Kind启动一个集群。先安装Kind:
# 安装Kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# 创建集群配置文件
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
EOF
# 启动集群
kind create cluster --config kind-config.yaml
启动成功后,你会看到类似这样的输出:
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ Preparing nodes 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
嗯,这里要注意:如果你用的是Windows,建议用WSL2来运行这些命令。原生Windows对容器支持不太好,容易出问题。
验证集群状态:
kubectl get nodes
# 应该看到3个节点,状态都是Ready
小技巧:如果你觉得每次都要输入kubectl太麻烦,可以设置别名:alias k=kubectl。我用了好几年,效率提升不少。
1.7 验证Helm和kubectl配置
最后,咱们验证一下Helm能不能正常工作:
# 添加一个测试仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# 安装一个测试应用(比如nginx)
helm install test-nginx bitnami/nginx
# 查看Pod状态
kubectl get pods
# 卸载测试应用
helm uninstall test-nginx
如果一切顺利,说明你的环境已经准备好了。接下来,咱们就可以正式进入vLLM的部署环节了。
说实话,环境搭建这一步最枯燥,但也是最重要的。我见过太多人因为环境没配好,后面学得一头雾水。所以,请务必跟着步骤走一遍,有问题随时在群里问我。
好了,这一章的内容就到这里。环境搭好了,下一章咱们就开始部署vLLM。到时候我会手把手带你写第一个Deployment YAML文件。
公众号:蓝海资料掘金营,微信 deep3321