第2章 环境准备:GPU驱动与CUDA安装、Docker环境搭建、Python虚拟环境配置
环境准备这件事,说难不难,说简单也真能卡住人好几天。我见过太多同学模型都写好了,结果卡在驱动装不上、CUDA版本对不齐这种问题上。说白了,部署环境就像盖楼打地基——地基歪了,后面全白搭。这一章咱们就把地基夯实,从GPU驱动一直搭到Python虚拟环境,每一步我都会把坑指给你看。
2.1 GPU驱动与CUDA安装
先聊驱动。很多人一上来就装最新版驱动,觉得越新越好。其实不是这样。我踩过最大的坑就是——驱动版本和CUDA版本不匹配,导致nvidia-smi能看见卡,但PyTorch死活调不动GPU。
我个人习惯是:先确定你要用的CUDA版本,再反推驱动版本。比如你要用CUDA 11.8,那驱动版本至少得是520以上。NVIDIA官方有个兼容性表格,我建议你直接去查。
# 查看驱动版本和CUDA驱动API版本
nvidia-smi
# 查看CUDA Toolkit版本(如果已安装)
nvcc --version
注意:nvidia-smi 显示的是驱动支持的CUDA版本,nvcc 才是你实际安装的Toolkit版本。这两个可以不一样,但驱动版本必须 ≥ Toolkit版本。
安装步骤其实不复杂,但有几个细节我提醒你:
- 驱动安装:去NVIDIA官网下载对应型号的驱动,或者用
apt/yum装。我个人推荐用runfile安装,干净可控。 - CUDA Toolkit:同样建议用runfile,别用deb包——deb包容易把系统库搞乱。我之前在Ubuntu 20.04上被deb包坑过一次,系统桌面都起不来了。
- cuDNN:下载后解压,把文件拷贝到CUDA目录就行。记得加
LD_LIBRARY_PATH。
--toolkit 参数,只装工具包,不碰驱动。
2.2 Docker环境搭建
Docker这东西,说白了就是给你的模型部署套个「隔离箱」。不管宿主机上装了什么乱七八糟的库,容器里永远是干净的。我建议所有生产环境都用Docker,省心。
但要注意:Docker默认用不了GPU。你需要装 NVIDIA Container Toolkit。
# 安装Docker(Ubuntu为例)
sudo apt update
sudo apt install docker.io
# 安装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 update
sudo apt install nvidia-docker2
# 重启Docker
sudo systemctl restart docker
# 验证GPU是否透传
sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi
你想想看,一行命令就能拉起一个带GPU的容器,多爽。而且镜像可以版本管理,团队里每个人拉同一个镜像,环境完全一致——再也不会出现「我机器上能跑,你机器上跑不了」的尴尬。
我个人习惯是:把常用的CUDA + PyTorch环境做成基础镜像,推送到私有仓库。每次新项目直接 docker pull,省去重复安装的麻烦。
2.3 Python虚拟环境配置
虚拟环境这东西,我建议每个项目都建一个。别偷懒。你想想,项目A需要PyTorch 1.13,项目B需要PyTorch 2.0,没有虚拟环境的话,你只能二选一。
常用的工具就两个:conda 和 venv。我个人偏向conda,因为它不光管Python包,还能管CUDA Toolkit、cuDNN这些系统库。但如果你喜欢轻量级,venv也完全够用。
# 创建环境并指定Python版本
conda create -n deploy_env python=3.10
# 激活环境
conda activate deploy_env
# 安装PyTorch(以CUDA 11.8为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 验证GPU是否可用
python -c "import torch; print(torch.cuda.is_available())"
这里有个小技巧:安装PyTorch时,别用conda install,用pip install指定index-url。为什么?因为conda的PyTorch频道有时候更新慢,而且容易和系统CUDA库冲突。我踩过这个坑,后来就一直用pip了。
wget和ca-certificates,不然Miniconda都下不下来。别问我怎么知道的……有一次我在一个精简镜像里折腾了半小时。
2.4 环境验证清单
环境搭好之后,别急着往下走。花两分钟跑一遍验证,能省下后面排查问题的大把时间。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| GPU驱动 | nvidia-smi |
显示GPU型号、驱动版本、CUDA版本 |
| CUDA Toolkit | nvcc --version |
显示CUDA编译版本 |
| Docker GPU | docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi |
容器内正常显示GPU信息 |
| PyTorch GPU | python -c "import torch; print(torch.cuda.is_available())" |
输出 True |
check_env.sh 脚本里。跑一遍,绿了就是没问题,红了直接定位。省心。
嗯,环境准备这部分就这些。别觉得琐碎,这一步稳了,后面模型导出、优化、部署才能顺风顺水。下一章咱们开始碰模型导出,到时候你就知道今天搭的环境有多重要了。