第二章:环境准备与基础搭建

好,咱们正式开始动手了。

这一章,说白了就是“把枪擦亮”。你想想看,后面所有的推理服务、API封装,全得跑在GPU上。环境要是没搭好,后面全是坑。我个人习惯是,不管在哪个团队,第一件事先把Docker和NVIDIA容器工具包搞定。这样不管换什么机器,环境都能一键复现。

2.1 Docker环境配置

Docker这东西,现在基本是标配了。我见过不少新手直接在宿主机上装各种库,结果搞出一堆依赖冲突。嗯,用容器隔离,清爽多了。

安装Docker其实很简单,但有几个细节要注意:

  • 版本选择:建议用Docker CE 20.10以上版本。太老的版本对GPU支持不好。
  • 安装方式:我个人推荐用官方脚本一键安装,省事。
# 官方推荐的一键安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 安装完成后,把当前用户加入docker组
sudo usermod -aG docker $USER

# 记得退出重新登录,或者执行
newgrp docker
小提示:安装完后记得执行 docker run hello-world 测试一下。如果报权限问题,八成是忘了加用户组。

我在项目中遇到过一个问题:装好Docker后,发现拉取镜像特别慢。后来配了国内镜像加速器,速度直接起飞。

# 配置Docker镜像加速器(以阿里云为例)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

2.2 NVIDIA容器工具包安装

Docker装好了,但默认情况下容器里是认不出GPU的。这时候就需要NVIDIA容器工具包(nvidia-container-toolkit)出场了。

为什么要装这个?说白了,它让Docker容器能直接调用宿主机的GPU驱动和CUDA库。没有它,你在容器里跑nvidia-smi会报错。

安装步骤也不复杂:

# 添加NVIDIA的仓库
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

# 重启Docker服务
sudo systemctl restart docker
注意:如果你用的是CentOS或RHEL,命令会略有不同。建议去NVIDIA官方文档确认一下。

我曾经踩过一个坑:装完nvidia-container-toolkit后,启动容器时忘了加--gpus all参数,结果容器里还是看不到GPU。嗯,这个参数不能省。

# 验证GPU是否能在容器中使用
docker run --rm --gpus all nvidia/cuda:11.8-base nvidia-smi

如果能看到GPU信息,说明环境通了。如果报错,检查一下Docker版本和nvidia-container-toolkit版本是否匹配。

2.3 TensorRT镜像选择

环境搭好了,接下来选TensorRT镜像。NVIDIA官方提供了很多镜像,怎么选?

我个人建议,根据你的CUDA版本来选。比如你机器上装的是CUDA 11.8,那就选nvidia/cuda:11.8-cudnn8-devel-ubuntu20.04作为基础镜像,然后再在上面装TensorRT。

当然,NVIDIA也提供了直接集成了TensorRT的镜像:

镜像名称 说明 适用场景
nvcr.io/nvidia/tensorrt:22.12-py3 官方TensorRT镜像,包含完整工具链 开发调试、模型转换
nvcr.io/nvidia/tensorrt:22.12-py3-igpu 针对推理优化,体积更小 生产部署
nvcr.io/nvidia/tritonserver:22.12-py3 Triton推理服务器镜像 大规模推理服务

你想想看,如果只是做模型转换和测试,用第一个就够了。如果要上生产,我建议用第二个,体积小、启动快。

重点:镜像版本号(如22.12)对应的是TensorRT的发布年份和月份。建议选最新的稳定版,但别追太新,容易遇到兼容性问题。

2.4 GPU驱动验证

最后一步,验证GPU驱动是否正常工作。这一步看似简单,但很多人会忽略。

先看看宿主机上的驱动:

# 查看驱动版本和GPU信息
nvidia-smi

# 输出示例
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 525.85.05    Driver Version: 525.85.05    CUDA Version: 12.0     |
# |-------------------------------+----------------------+----------------------+
# | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
# | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
# |===============================+======================+======================|
# |   0  Tesla T4            Off  | 00000000:00:1E.0 Off |                    0 |
# | N/A   45C    P0    28W /  70W |      0MiB / 15109MiB |      0%      Default |
# +-------------------------------+----------------------+----------------------+

然后验证容器内是否能正常调用:

# 拉取并运行TensorRT镜像
docker run --rm --gpus all -it nvcr.io/nvidia/tensorrt:22.12-py3

# 在容器内执行
nvidia-smi
# 应该能看到和宿主机一样的GPU信息

# 验证TensorRT是否可用
python3 -c "import tensorrt; print(tensorrt.__version__)"
避坑指南:我曾经遇到过宿主机驱动版本太老,导致容器内TensorRT报错的情况。建议驱动版本不低于525,CUDA版本不低于11.8。

如果一切顺利,你会看到TensorRT的版本号。嗯,到这里环境就基本就绪了。

总结一下这章的核心:Docker装好、nvidia-container-toolkit配上、镜像选对、驱动验证通过。后面咱们就可以开始真正的TensorRT推理服务化实战了。

下一章,我会带你写第一个TensorRT推理服务。准备好了吗?