环境准备:K8s集群搭建与GPU节点配置
说实话,做vLLM推理性能压测,最让人头疼的往往不是模型本身,而是环境准备。我见过太多人卡在这一步——集群没搭好,驱动没装对,折腾两天连个推理请求都发不出去。今天咱们就把这块硬骨头啃下来。
核心要点:环境准备决定了后续所有压测工作的成败。GPU节点配置不当,推理性能直接腰斩。
K8s集群选型:Minikube vs K3s vs 生产集群
先说说集群选型。你可能会问:「我就做个压测,随便搭个集群不行吗?」嗯,还真不行。不同的场景,选型差别很大。
| 方案 | 适用场景 | GPU支持 | 资源开销 | 我的建议 |
|---|---|---|---|---|
| Minikube | 本地开发、单机测试 | 有限(需额外配置) | 低 | 适合快速验证,但不推荐用于压测 |
| K3s | 边缘计算、资源受限环境 | 支持(需手动安装驱动) | 极低 | 轻量级,适合学习和小规模压测 |
| 生产集群(Kubeadm/KOps) | 正式压测、生产环境 | 原生支持 | 较高 | 推荐用于vLLM压测,功能完整 |
我个人习惯用K3s做快速原型验证,但真正做vLLM压测时,还是老老实实搭生产集群。为什么?因为GPU资源调度、设备插件管理这些,K3s虽然能用,但坑不少。我在项目中遇到过K3s下nvidia-device-plugin死活认不出GPU的情况,折腾了大半天才发现是cgroup驱动版本不匹配。
GPU节点配置与NVIDIA驱动安装
这一步是重中之重。vLLM推理依赖GPU,驱动装不好,后面全是白搭。
1. 确认GPU型号与驱动兼容性
先看看你手里是什么卡。A100、V100、T4,驱动版本要求都不一样。我建议直接用NVIDIA官方推荐的驱动版本,别图新。
# 查看GPU信息
lspci | grep -i nvidia
# 查看推荐驱动版本
nvidia-smi # 如果已经装了驱动
注意:驱动版本与CUDA版本必须匹配。vLLM目前推荐CUDA 11.8或12.1,驱动版本建议≥525.60.13。
2. 安装NVIDIA驱动
我推荐用官方runfile安装,虽然麻烦点,但可控性高。用包管理器安装有时会踩坑——我曾经在Ubuntu 22.04上用apt装驱动,结果内核模块加载失败,黑屏了两次。
# 禁用nouveau开源驱动
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u
reboot
# 安装驱动
chmod +x NVIDIA-Linux-x86_64-525.105.17.run
./NVIDIA-Linux-x86_64-525.105.17.run --no-opengl-files
# 验证安装
nvidia-smi
3. 安装CUDA Toolkit与cuDNN
驱动装好了,CUDA也不能少。vLLM在推理时要用到CUDA核心库,cuDNN对Transformer算子有优化。
# 安装CUDA 12.1
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sh cuda_12.1.0_530.30.02_linux.run
# 配置环境变量
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
小技巧:装完CUDA后,记得跑一下deviceQuery示例程序,确认GPU能被CUDA正确识别。我每次装完都会跑一遍,省得后面排查问题。
Helm与Kubectl工具链配置
工具链这块,说白了就是让你能跟K8s集群顺畅沟通。Helm是包管理,Kubectl是命令行工具,缺一不可。
1. 安装Kubectl
# 下载最新版kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 赋予执行权限并移动到PATH
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证
kubectl version --client
2. 安装Helm
Helm这东西,刚开始我觉得「不就是个包管理器嘛」,后来发现它管理复杂应用太方便了。vLLM的部署用Helm chart,一键搞定。
# 使用官方脚本安装
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
# 验证
helm version
3. 配置集群访问
集群搭好了,工具装好了,怎么连?kubeconfig文件是关键。
# 查看当前集群信息
kubectl cluster-info
# 配置kubeconfig(以K3s为例)
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 测试连接
kubectl get nodes
避坑指南:我曾经在配置kubeconfig时,忘了设置正确的上下文,结果kubectl一直连到minikube的集群上,折腾了半天才发现。建议每次切换集群后,用kubectl config current-context确认一下。
知识体系总览
下面这张图,是我梳理的环境准备核心逻辑。你跟着这个流程走,基本不会出大问题。
你看,整个流程其实就三大块:集群选型、GPU配置、工具链。每一步都有坑,但跟着流程走,稳得很。
最后说一句:环境准备别着急,慢慢来。我见过太多人急着跑压测,结果驱动没装对,推理性能只有正常的一半。磨刀不误砍柴工,这句话在vLLM压测里特别适用。
公众号:蓝海资料掘金营,微信deep3321