2. 环境准备

环境准备这件事,说难不难,说简单也真能卡住人好几天。我见过太多同学模型都写好了,结果卡在驱动装不上、CUDA版本对不齐这种问题上。说白了,部署环境就像盖楼打地基——地基歪了,后面全白搭。这一章咱们就把地基夯实,从GPU驱动一直搭到Python虚拟环境,每一步我都会把坑指给你看。

环境准备核心层 GPU驱动 + CUDA nvidia-smi 验证 CUDA Toolkit 安装 cuDNN 配置 版本匹配检查 ⚠ 最常见翻车点 Docker 环境 Docker Engine NVIDIA Container Toolkit 镜像拉取与运行 GPU 透传验证 ✅ 推荐生产方案 Python 虚拟环境 conda / venv PyTorch / TF 安装 依赖隔离管理 requirements.txt 🔁 日常开发必备 三层递进:硬件驱动 → 容器化 → 开发环境隔离

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。
⚠️ 我曾经犯过的错: 在已有驱动的情况下直接装CUDA Toolkit,结果把驱动覆盖了,系统直接黑屏。后来我学乖了——装CUDA Toolkit时加 --toolkit 参数,只装工具包,不碰驱动。

2.2 Docker环境搭建

Docker这东西,说白了就是给你的模型部署套个「隔离箱」。不管宿主机上装了什么乱七八糟的库,容器里永远是干净的。我建议所有生产环境都用Docker,省心。

但要注意:Docker默认用不了GPU。你需要装 NVIDIA Container Toolkit。

💡 快速安装Docker + GPU支持:
# 安装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也完全够用。

🔧 conda 创建虚拟环境示例:
# 创建环境并指定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了。

⚠️ 注意: 如果你在Docker容器里用conda,记得先装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 脚本里。跑一遍,绿了就是没问题,红了直接定位。省心。

嗯,环境准备这部分就这些。别觉得琐碎,这一步稳了,后面模型导出、优化、部署才能顺风顺水。下一章咱们开始碰模型导出,到时候你就知道今天搭的环境有多重要了。