2、环境准备:GPU驱动、CUDA、Docker环境搭建与验证

说实话,做TensorRT-LLM和vLLM的对比,最怕的不是模型调优,而是环境没搭好。我见过太多同学卡在第一步——驱动版本不对,CUDA和PyTorch打架,Docker镜像拉下来跑不起来。嗯,这节课我们就一次性把这些坑填平。

2.1 硬件与软件版本选型

先说说我的个人习惯。我一般会先确认GPU型号,再决定驱动和CUDA版本。你想想看,如果你拿一张A100去配CUDA 11.0,那很多新特性就用不了。反过来,一张T4硬上CUDA 12.x,驱动可能都不支持。

下面这张表是我在项目中常用的组合,你可以直接参考:

GPU型号 推荐驱动版本 推荐CUDA版本 适用场景
A100 / H100 ≥ 525.60.13 12.1 / 12.2 TensorRT-LLM 0.7+
V100 / T4 ≥ 470.57.02 11.8 vLLM 0.3+
RTX 4090 ≥ 535.129.03 12.1 本地开发测试
注意:驱动版本向下兼容,但CUDA版本必须与驱动支持的CUDA Toolkit版本匹配。我曾经在A100上装了CUDA 12.2,但驱动是520的,结果nvcc编译通过,运行时直接报"CUDA driver version is insufficient"。折腾了两小时才发现是驱动没升级。

2.2 GPU驱动安装与验证

驱动安装其实很简单,但有几个细节要注意。我个人习惯用NVIDIA官方runfile安装,不用系统包管理器。为什么?因为apt或yum安装的驱动版本往往滞后,而且容易和内核模块冲突。

具体步骤:

  1. 先卸载旧驱动:sudo apt purge nvidia-*(Ubuntu)或 sudo yum remove nvidia-*(CentOS)
  2. 禁用nouveau开源驱动:在 /etc/modprobe.d/blacklist-nouveau.conf 中添加 blacklist nouveau
  3. 重启进入文本模式(Ctrl+Alt+F2),安装runfile
  4. 验证:nvidia-smi

验证输出应该类似这样:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03   Driver Version: 535.129.03   CUDA Version: 12.2     |
|-------------------------------+----------------------+----------------------+
| 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-SXM4-80GB  On | 00000000:00:04.0 Off |                    0 |
| N/A   32°C    P0    N/A / 400W |      0MiB / 81920MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
小技巧:如果 nvidia-smi 显示CUDA Version为"N/A",别慌。这通常意味着驱动安装没问题,只是CUDA Toolkit还没装。驱动和CUDA Toolkit是两回事,驱动负责底层通信,Toolkit提供编译器和库。

2.3 CUDA Toolkit安装

CUDA Toolkit的安装,我建议用runfile方式,而不是deb包。runfile可以自定义安装路径,方便多版本共存。我在项目中经常同时保留CUDA 11.8和12.1,通过修改 PATHLD_LIBRARY_PATH 切换。

安装命令:

wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run --toolkit --silent --override

安装完成后,配置环境变量:

echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证:

nvcc --version
# 输出应显示 Cuda compilation tools, release 12.1, V12.1.105
核心要点:驱动版本决定了你能用哪个CUDA版本。比如驱动535支持CUDA 12.x,但驱动470最高只支持CUDA 11.8。选型时先查驱动,再定CUDA。

2.4 Docker环境搭建

Docker是避免环境冲突的最佳方式。我个人强烈建议用NVIDIA Container Toolkit,而不是自己手动挂载GPU设备。为什么?因为Container Toolkit会自动处理驱动版本、CUDA库映射、MIG分区等复杂问题。

安装步骤:

  1. 安装Docker Engine(略,参考官方文档)
  2. 安装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-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

验证Docker GPU支持:

docker run --rm --gpus all nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi

如果输出和宿主机上的 nvidia-smi 一致,说明环境搭建成功。

避坑指南:我曾经在Docker里跑TensorRT-LLM,发现显存占用异常高。排查了半天,发现是Docker默认没有设置 --shm-size,导致共享内存不足,模型加载时反复分配释放。建议加上 --shm-size=32g 参数。

2.5 环境验证:跑一个简单的TensorRT-LLM示例

环境搭好了,我们来验证一下。拉取TensorRT-LLM的Docker镜像:

docker pull nvidia/cuda:12.1.0-devel-ubuntu22.04
docker run -it --gpus all --shm-size=32g nvidia/cuda:12.1.0-devel-ubuntu22.04 /bin/bash

在容器内安装TensorRT-LLM(以0.7.0为例):

pip install tensorrt_llm==0.7.0
python -c "import tensorrt_llm; print(tensorrt_llm.__version__)"

如果输出 0.7.0,说明环境没问题。

2.6 知识体系总览

下面这张图总结了本章的核心逻辑,你可以对照着检查自己的环境:

环境准备核心流程 GPU硬件 A100 / H100 / V100 / T4 GPU驱动 ≥ 525 / ≥ 470 / ≥ 535 CUDA Toolkit 11.8 / 12.1 / 12.2 Docker + Container Toolkit --gpus all --shm-size=32g 验证:nvidia-smi + nvcc 驱动 → CUDA → Docker → 验证,每一步都依赖上一步

说白了,环境准备就是一层叠一层。驱动是地基,CUDA是框架,Docker是隔离层。哪一层出问题,上层都跑不起来。我建议你按照这个顺序一步步来,别跳步。

我的经验:如果你用的是云服务器(比如AWS、阿里云),可以直接用他们提供的GPU优化镜像,驱动和CUDA都预装好了。但要注意,这些镜像的CUDA版本可能比较旧,跑TensorRT-LLM 0.7+可能需要升级。我上次在阿里云上就踩了这个坑,镜像自带CUDA 11.4,但TensorRT-LLM要求11.8,最后只能自己重装。

好了,环境准备就到这里。记住,这一步花的时间越多,后面跑模型就越顺畅。别急着跳进模型部署,先把地基打牢。

专注资料整理