第二章:环境准备与工具链搭建
说实话,环境配置这事儿,看着简单,坑是真不少。我见过太多人卡在第一步——装驱动装到黑屏,或者CUDA版本对不上,折腾一整天。这一章,我把这些年踩过的坑、总结的经验,一次性给你讲清楚。
2.1 NVIDIA驱动安装:别小看这一步
驱动是GPU和系统之间的翻译官。装不好,后面全白搭。
我个人习惯:用官方.run文件手动安装,而不是系统包管理器自动装。为什么?因为apt或yum源里的驱动版本往往滞后,而且容易和内核版本打架。
禁用nouveau的步骤:
# 创建配置文件
sudo bash -c "echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
# 更新内核并重启
sudo update-initramfs -u
sudo reboot
重启后,确认nouveau已禁用:
lsmod | grep nouveau # 无输出则成功
然后安装驱动。我推荐用NVIDIA官网的.run文件:
# 给执行权限
chmod +x NVIDIA-Linux-x86_64-*.run
# 安装(注意加 --no-opengl-files 避免和桌面冲突)
sudo ./NVIDIA-Linux-x86_64-*.run --no-opengl-files
装完验证:
nvidia-smi
看到GPU列表和驱动版本,就说明成了。嗯,这里要注意:驱动版本和CUDA版本有对应关系,别装太新的驱动,除非你确定CUDA支持。
2.2 CUDA Toolkit配置:版本匹配是门学问
CUDA Toolkit是GPU编程的核心。说白了,它就是个编译器+运行时库,让你能用C++写GPU代码。
我建议:不要装最新版,装次新版。最新版往往有兼容性问题,社区支持也少。比如现在CUDA 12.x稳定了,就选12.x,别追13.x。
下载地址:NVIDIA官网的CUDA Archive页面。选对操作系统和架构。
安装方式我推荐runfile(本地安装):
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
安装时注意:不要勾选Driver,因为我们已经装过了。只选Toolkit和Documentation。
装完后配置环境变量:
# 在 ~/.bashrc 或 ~/.zshrc 中添加
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
验证:
nvcc --version
看到版本号就对了。你想想看,这一步要是错了,后面编译任何GPU代码都会报“找不到cuda.h”。
2.3 cuDNN库集成:深度学习加速器
cuDNN是NVIDIA针对深度学习优化的底层库。它封装了卷积、池化、归一化等操作,比你自己手写快得多。
安装cuDNN需要NVIDIA开发者账号。下载对应CUDA版本的cuDNN包。我一般用tar包方式:
# 解压
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz
# 复制到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64
# 设置权限
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.1/lib64/libcudnn*
验证cuDNN版本:
cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
2.4 Docker镜像构建:一次配置,到处运行
Docker是环境管理的终极方案。说白了,就是把你的开发环境打包成一个镜像,换台机器也能直接跑。
我推荐用NVIDIA官方提供的CUDA镜像作为基础:
# 拉取官方镜像
docker pull nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 运行容器
docker run --gpus all -it --rm \
-v /path/to/your/code:/workspace \
nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
如果你需要自定义环境,写个Dockerfile:
FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 安装Python和常用工具
RUN apt-get update && apt-get install -y \
python3 python3-pip python3-venv \
git vim wget curl \
&& rm -rf /var/lib/apt/lists/*
# 设置工作目录
WORKDIR /workspace
# 安装PyTorch(GPU版)
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
CMD ["/bin/bash"]
构建镜像:
docker build -t my-cuda-env:latest .
我个人习惯:每个项目一个Docker镜像,互不干扰。这样即使搞坏了环境,删掉容器重建就行,不影响宿主机。
2.5 Python虚拟环境管理:conda vs pip
Python的包管理是个老大难。我见过有人把系统Python搞崩,重装系统的。所以,虚拟环境是必须的。
我建议:深度学习项目用conda,轻量项目用pip+venv。
2.5.1 Conda方式
Conda的好处是能管理非Python依赖,比如cudatoolkit。但注意,conda的cudatoolkit和系统CUDA是两回事,别搞混。
# 创建环境
conda create -n myenv python=3.10
# 激活环境
conda activate myenv
# 安装PyTorch(conda会自动匹配CUDA版本)
conda install pytorch torchvision torchaudio cudatoolkit=12.1 -c pytorch -c nvidia
2.5.2 Pip+venv方式
如果你用Docker,其实pip就够了。轻量、快速。
# 创建虚拟环境
python3 -m venv myenv
# 激活
source myenv/bin/activate
# 安装依赖
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
2.6 知识体系总览
下面这张图,把整个环境搭建的脉络串起来了。你照着这个顺序来,基本不会出错。
2.7 避坑总结
最后,我把这些年遇到最多的坑列出来,你遇到类似问题可以快速定位:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| nvidia-smi报错 | 驱动未安装或nouveau冲突 | 禁用nouveau,重装驱动 |
| nvcc找不到 | 环境变量未配置 | 检查PATH和LD_LIBRARY_PATH |
| 编译报cuda.h缺失 | CUDA Toolkit未安装或路径不对 | 确认/usr/local/cuda存在 |
| 运行时cuDNN报错 | cuDNN版本与CUDA不匹配 | 严格对照版本表重新安装 |
| Docker内无法使用GPU | 未安装nvidia-docker2 | 安装nvidia-container-toolkit |
| conda环境torch无法用GPU | conda安装的cudatoolkit与系统驱动不匹配 | 用pip安装torch,或升级驱动 |
好了,环境搭好,后面就可以真正开始写GPU代码了。记住:环境是地基,地基不稳,楼盖得再高也得塌。