2、环境准备:K8s集群搭建(Minikube/K3s)、GPU节点配置、NVIDIA驱动与CUDA安装
说实话,很多人在vLLM热加载这条路上翻车,十有八九是环境没搭好。我见过太多人花了两天时间调模型,最后发现是驱动版本不对——那种感觉,嗯,挺崩溃的。
这一章,咱们就把地基打牢。你跟着我的节奏走,保证不踩坑。
2.1 选择你的K8s集群:Minikube还是K3s?
先别急着装。你得想清楚,你的实验环境是什么?
- 本地笔记本或单机开发:选Minikube。它模拟一个完整的K8s集群,调试方便。
- 边缘节点或资源受限的服务器:选K3s。它轻量,启动快,占内存少。
- 生产环境:直接上Kubeadm或云厂商托管集群。但咱们教程主要讲实验,所以重点说前两个。
我个人习惯,在本地开发时用Minikube,因为它自带dashboard,看Pod状态一目了然。但如果你机器只有4G内存,我建议你换K3s——Minikube默认就要2G内存,加上vLLM模型加载,很容易OOM。
2.2 安装Minikube(推荐方案)
咱们直接上命令。我假设你用的是Ubuntu 22.04,其他发行版大同小异。
# 1. 安装Docker(Minikube依赖)
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
# 2. 下载Minikube二进制
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 3. 启动集群(指定驱动为docker)
minikube start --driver=docker --cpus=4 --memory=8192
# 4. 验证
kubectl get nodes
这里有个坑——--cpus和--memory参数一定要给够。vLLM加载模型时,CPU要处理tokenizer,GPU要跑推理,内存不够会直接OOM Kill。我建议至少4核8G。
2.3 安装K3s(轻量备选)
如果你决定用K3s,安装更简单:
curl -sfL https://get.k3s.io | sh -
sudo kubectl get nodes
就两行命令。K3s默认用containerd,不需要额外装Docker。但要注意,K3s默认没有GPU支持,需要手动配置。
我个人觉得,K3s更适合做边缘推理节点。比如你在工厂里部署一个模型,用K3s管理,既轻量又稳定。
2.4 GPU节点配置:核心中的核心
好了,集群起来了。但如果没有GPU,vLLM就是个摆设。接下来咱们配置GPU节点。
先确认你的机器有NVIDIA显卡:
lspci | grep -i nvidia
如果没输出,说明显卡没识别到。检查一下BIOS里是不是禁用了独立显卡。我遇到过一台戴尔工作站,默认用集显,折腾了半天才发现。
2.5 安装NVIDIA驱动
驱动版本很重要。vLLM官方推荐CUDA 12.1以上,所以驱动版本至少要到535。我建议直接用最新的稳定版。
# 1. 添加NVIDIA驱动源
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# 2. 查看可用驱动版本
ubuntu-drivers devices
# 3. 安装推荐版本(一般是nvidia-driver-550)
sudo apt install -y nvidia-driver-550
# 4. 重启
sudo reboot
# 5. 验证
nvidia-smi
看到类似下面的输出,就说明驱动装好了:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVIDIA A100 80GB Off | 00000000:00:04.0 Off | 0 |
| 0% 35C P0 42W / 300W | 0MiB / 81920MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
2.6 安装CUDA Toolkit
驱动装好了,但CUDA工具链还没装。vLLM需要CUDA runtime来编译算子。
# 下载CUDA 12.4(推荐)
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.15_linux.run
sudo sh cuda_12.4.0_550.54.15_linux.run
# 安装时注意:不要勾选Driver(我们已经装过了)
# 只选CUDA Toolkit和CUDA Samples
# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证
nvcc --version
输出应该类似:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Feb_28_21:13:10_PST_2024
Cuda compilation tools, release 12.4, V12.4.99
2.7 安装NVIDIA Container Toolkit
这一步很多人会忘。K8s里的Pod要访问GPU,必须通过NVIDIA Container Toolkit来挂载设备。
# 添加源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
# 配置Docker运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 验证(在容器里跑nvidia-smi)
sudo docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
如果看到GPU信息,说明容器能访问GPU了。这一步过了,K8s那边就顺了。
2.8 在K8s中启用GPU支持
最后一步,让K8s认识GPU。我们需要安装NVIDIA Device Plugin。
# 创建DaemonSet
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.15.0/nvidia-device-plugin.yml
# 验证
kubectl get pods -n kube-system | grep nvidia
kubectl describe node | grep nvidia.com/gpu
如果看到类似nvidia.com/gpu: 1,说明节点上有一个GPU可用。恭喜,环境准备完毕!
kubectl run gpu-test --image=nvidia/cuda:12.4.0-base-ubuntu22.04 -- nvidia-smi如果日志里能看到GPU信息,就稳了。
2.9 本章知识体系总览
下面这张图,帮你理清整个环境准备的逻辑链条:
这张图从左到右,从上到下,就是咱们这一章的全部工作。你按这个顺序来,不会乱。
2.10 验证清单
最后,给你一个自检清单。每完成一项,打个勾:
| 步骤 | 命令 | 预期结果 |
|---|---|---|
| K8s集群运行 | kubectl get nodes |
节点状态为Ready |
| NVIDIA驱动 | nvidia-smi |
显示GPU型号和驱动版本 |
| CUDA Toolkit | nvcc --version |
显示CUDA 12.x |
| 容器GPU访问 | docker run --gpus all nvidia/cuda nvidia-smi |
容器内能识别GPU |
| K8s GPU资源 | kubectl describe node | grep gpu |
显示nvidia.com/gpu: 1 |
全部打勾?好,那咱们的环境就彻底准备好了。下一章,我会带你部署vLLM,并实现模型的热加载。到时候你会发现,前面这些准备工作,每一分钟都值。
公众号:蓝海资料掘金营,微信deep3321