第2章:环境搭建——NVIDIA驱动安装、CUDA Toolkit配置、cuDNN安装、Docker容器化环境准备

说实话,多卡通信这件事,很多人一上来就急着调代码、测带宽。但我见过太多人卡在环境上——驱动版本不对,CUDA和PyTorch不匹配,cuDNN少了个文件,折腾两天才发现是基础没打好。所以这一章,咱们老老实实把地基夯实。

我个人习惯是:先装驱动,再配CUDA Toolkit,然后装cuDNN,最后用Docker把环境固化下来。这套流程走一遍,后面30章你都会感谢现在的自己。

核心原则:版本匹配是第一要务。NVIDIA驱动、CUDA Toolkit、cuDNN、PyTorch/TensorFlow,这四个东西的版本必须对齐。少一个版本号不对,就可能跑不起来。

2.1 NVIDIA驱动安装

驱动是底层中的底层。没有它,GPU就是一块废铁。我遇到过有人用Ubuntu自带的nouveau开源驱动跑深度学习,结果显存死活认不全——嗯,那肯定不行。

第一步:检查当前显卡型号

lspci | grep -i nvidia

你会看到类似这样的输出:

01:00.0 VGA compatible controller: NVIDIA Corporation GA102 [GeForce RTX 3080] (rev a1)

第二步:卸载旧驱动(如果有)

sudo apt-get purge nvidia*

第三步:添加NVIDIA官方源并安装

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-535

这里我推荐535版本,稳定且兼容性好。当然,你可以去NVIDIA官网查最新推荐版本。

小技巧:装完驱动后,用 nvidia-smi 验证。如果能看到GPU列表和驱动版本,说明驱动装好了。我曾经有一次装完驱动忘了重启,nvidia-smi报错——别犯这种低级错误。

2.2 CUDA Toolkit配置

驱动装好了,接下来是CUDA Toolkit。说白了,CUDA是NVIDIA给开发者用的并行计算平台。没有它,你没法在GPU上跑自定义的核函数。

版本选择:我个人建议用CUDA 11.8或12.1。这两个版本兼容性最广,PyTorch、TensorFlow都支持得很好。

安装步骤:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

安装时注意:不要勾选Driver,因为我们已经装过了。只选CUDA Toolkit和CUDA Samples。

配置环境变量:

export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

把这两行加到 ~/.bashrc 里,然后 source ~/.bashrc。

注意:如果你有多张GPU,且型号不同(比如A100和V100混插),CUDA版本必须兼容所有显卡的架构。我踩过这个坑——V100支持CUDA 11,但A100需要11.8以上。最后统一用12.1才搞定。

2.3 cuDNN安装

cuDNN是NVIDIA针对深度神经网络优化的库。它加速了卷积、池化、归一化等操作。没有它,训练速度会慢一个数量级。

下载:去NVIDIA官网注册账号,下载对应CUDA版本的cuDNN。我一般下载 cuDNN Library for Linux (x86_64) 那个tar包。

安装:

tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

验证:

cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

如果能看到版本号,说明装好了。

避坑指南:我曾经直接把cuDNN文件复制到系统目录,结果权限不对,程序运行时提示找不到libcudnn.so。记得用 chmod a+r 给所有用户读权限。

2.4 Docker容器化环境准备

环境搭好了,但问题来了——换一台机器怎么办?重装一遍?太麻烦了。Docker就是解决这个问题的。你把环境打包成镜像,到哪都能跑。

安装Docker:

sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

安装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-container-toolkit
sudo systemctl restart docker

拉取官方镜像:

docker pull nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

这个镜像包含了CUDA 11.8和cuDNN 8,开箱即用。

运行容器并挂载GPU:

docker run --gpus all -it --rm nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 nvidia-smi

如果能看到GPU信息,说明Docker环境配好了。

为什么用Docker?你想想看,多卡通信实验经常要换CUDA版本、换PyTorch版本。用Docker,你只需要切换镜像标签就行,不用重装系统。我团队里现在所有实验都在Docker里跑,省心多了。

2.5 知识体系总览

下面这张图帮你理清整个环境搭建的脉络:

多卡通信环境搭建知识体系 目标:多卡通信可运行环境 NVIDIA驱动 底层硬件驱动 CUDA Toolkit 并行计算平台 cuDNN 深度学习加速库 Docker容器 环境打包固化 关键操作 • 卸载nouveau • 安装nvidia-driver 关键操作 • 下载.run安装包 • 配置环境变量 关键操作 • 复制头文件和库 • 设置权限 关键操作 • 安装Docker • 拉取镜像运行 验证:nvidia-smi + 跑一个demo

2.6 验证环境是否可用

所有东西装完后,跑一个简单的PyTorch程序验证一下:

import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))

如果输出 True、4(假设你有4张卡)、NVIDIA A100,那恭喜你,环境搭好了。

最后一句:环境搭建是枯燥的,但也是最重要的。我见过太多人因为驱动版本不对,debug了三天才发现是CUDA和PyTorch不匹配。所以,别急,一步步来。后面咱们就开始真正的多卡通信实战了。

想要更多资料,联系可可