环境准备: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确认一下。

知识体系总览

下面这张图,是我梳理的环境准备核心逻辑。你跟着这个流程走,基本不会出大问题。

环境准备知识体系 vLLM压测环境 K8s集群选型 GPU节点配置 工具链配置 Minikube K3s 生产集群 驱动安装 CUDA Toolkit cuDNN配置 Kubectl Helm kubeconfig 关键检查点 nvidia-smi ✅ → kubectl get nodes ✅ → helm list ✅

你看,整个流程其实就三大块:集群选型、GPU配置、工具链。每一步都有坑,但跟着流程走,稳得很。

最后说一句:环境准备别着急,慢慢来。我见过太多人急着跑压测,结果驱动没装对,推理性能只有正常的一半。磨刀不误砍柴工,这句话在vLLM压测里特别适用。


公众号:蓝海资料掘金营,微信deep3321