第二章:环境准备与基础搭建
好,咱们正式开始动手了。
这一章,说白了就是“把枪擦亮”。你想想看,后面所有的推理服务、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
我曾经踩过一个坑:装完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推理服务器镜像 | 大规模推理服务 |
你想想看,如果只是做模型转换和测试,用第一个就够了。如果要上生产,我建议用第二个,体积小、启动快。
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的版本号。嗯,到这里环境就基本就绪了。
总结一下这章的核心:Docker装好、nvidia-container-toolkit配上、镜像选对、驱动验证通过。后面咱们就可以开始真正的TensorRT推理服务化实战了。
下一章,我会带你写第一个TensorRT推理服务。准备好了吗?