在深度学习领域,GPU加速已成为模型训练的标准配置。对于使用Ubuntu系统的开发者而言,正确安装CUDA和CUDNN是搭建高效开发环境的第一步。本文将详细介绍在Ubuntu 18.04系统上安装CUDA 10.2和CUDNN 7.6.5的全过程,特别针对安装过程中可能遇到的图形界面管理问题提供解决方案。
在开始安装之前,我们需要确保系统满足基本要求并完成必要的准备工作。Ubuntu 18.04作为长期支持版本(LTS),提供了稳定的基础环境,特别适合深度学习开发。
首先确认系统内核版本和显卡驱动状态:
bash复制uname -r # 查看内核版本
nvidia-smi # 检查NVIDIA驱动状态
典型的nvidia-smi输出会显示类似以下信息:
code复制+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce RTX 208... Off | 00000000:01:00.0 Off | N/A |
| 27% 36C P8 9W / 250W | 108MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
关键检查点:
提示:如果尚未安装NVIDIA驱动,可通过
ubuntu-drivers devices查看推荐驱动版本,然后使用sudo apt install nvidia-driver-440安装。
CUDA Toolkit提供了多种安装方式,我们推荐使用runfile(local)方式,因为它提供了更多自定义选项。访问NVIDIA开发者网站下载CUDA 10.2的runfile安装包:
bash复制wget https://developer.download.nvidia.com/compute/cuda/10.2/Prod/local_installers/cuda_10.2.89_440.33.01_linux.run
安装CUDA时可能需要临时关闭图形界面,以下是三种处理方案:
方案一:完全关闭图形界面(推荐用于服务器环境)
bash复制sudo systemctl stop gdm3 # 或lightdm,取决于你的显示管理器
sudo systemctl disable gdm3 # 永久禁用(仅限无头服务器)
方案二:临时关闭图形界面(适合大多数桌面用户)
bash复制sudo service gdm3 stop # 临时停止服务
# 安装完成后使用以下命令恢复:
sudo service gdm3 start
方案三:使用--override参数跳过检查(风险较高)
bash复制sudo sh cuda_10.2.89_440.33.01_linux.run --override
重要:如果选择关闭图形界面,请记住通过Ctrl+Alt+F1切换到终端界面进行操作,安装完成后可通过Ctrl+Alt+F7返回图形界面(具体功能键可能因系统而异)。
执行安装命令:
bash复制sudo sh cuda_10.2.89_440.33.01_linux.run
安装过程中需要注意以下选项:
安装完成后,需要设置环境变量。编辑~/.bashrc文件:
bash复制nano ~/.bashrc
在文件末尾添加以下内容:
bash复制# CUDA 10.2配置
export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-10.2
使配置立即生效:
bash复制source ~/.bashrc
验证安装:
bash复制nvcc --version
成功安装后应显示类似信息:
code复制nvcc: NVIDIA (R) Cuda compiler
release 10.2, V10.2.89
访问NVIDIA CUDNN下载页面(需要注册开发者账号),选择"Download cuDNN v7.6.5 (November 5th, 2019), for CUDA 10.2"下的"cuDNN Library for Linux"。
下载完成后验证文件完整性:
bash复制md5sum cudnn-10.2-linux-x64-v7.6.5.32.tgz
正确MD5值应为:a31d7b7f710ba8a1616bcc6b824acbc2
解压并安装CUDNN:
bash复制tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-10.2/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64/
sudo chmod a+r /usr/local/cuda-10.2/include/cudnn.h
sudo chmod a+r /usr/local/cuda-10.2/lib64/libcudnn*
检查CUDNN版本:
bash复制cat /usr/local/cuda-10.2/include/cudnn.h | grep CUDNN_MAJOR -A 2
正确输出应显示:
code复制#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
创建简单的CUDA测试程序test.cu:
cpp复制#include <stdio.h>
#include <cuda_runtime.h>
int main() {
int deviceCount;
cudaGetDeviceCount(&deviceCount);
for (int i = 0; i < deviceCount; ++i) {
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, i);
printf("Device %d: %s\n", i, prop.name);
}
return 0;
}
编译并运行:
bash复制nvcc test.cu -o test
./test
安装PyTorch测试环境:
bash复制conda create -n pytorch-test python=3.7
conda activate pytorch-test
conda install pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.2 -c pytorch
运行GPU测试脚本:
python复制import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA device count: {torch.cuda.device_count()}")
print(f"Current device: {torch.cuda.current_device()}")
print(f"Device name: {torch.cuda.get_device_name(0)}")
问题1:图形界面无法恢复
解决方案:
bash复制sudo systemctl restart gdm3 # 或lightdm
问题2:CUDA版本冲突
如果系统中有多个CUDA版本,可以使用alternatives管理:
bash复制sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-10.2 100
sudo update-alternatives --config cuda
问题3:权限问题
确保用户对CUDA目录有访问权限:
bash复制sudo chmod -R a+r /usr/local/cuda-10.2
问题4:CUDNN验证失败
重新安装CUDNN并检查文件权限:
bash复制sudo cp cuda/include/cudnn* /usr/local/cuda-10.2/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.2/lib64/
sudo ldconfig
启用NVIDIA持久化模式可以减少驱动加载时间:
bash复制sudo nvidia-smi -pm 1
在~/.bashrc中添加以下优化参数:
bash复制# CUDA性能优化
export CUDA_CACHE_PATH=$HOME/.nv/ComputeCache
export CUDA_AUTO_BOOST=0
当需要同时维护多个CUDA版本时,推荐使用环境模块管理:
bash复制sudo apt install environment-modules
mkdir -p $HOME/modules/cuda
为每个CUDA版本创建模块文件,例如$HOME/modules/cuda/10.2:
code复制#%Module1.0
prepend-path PATH /usr/local/cuda-10.2/bin
prepend-path LD_LIBRARY_PATH /usr/local/cuda-10.2/lib64
setenv CUDA_HOME /usr/local/cuda-10.2
加载特定版本:
bash复制module use $HOME/modules
module load cuda/10.2
安装NVIDIA系统管理界面:
bash复制sudo apt install nvidia-smi
常用监控命令:
bash复制watch -n 1 nvidia-smi # 实时监控GPU状态
nvprof ./your_cuda_app # 性能分析
cuda-gdb ./your_cuda_app # CUDA调试器
在实际项目部署中,我们发现CUDA 10.2与CUDNN 7.6.5的组合在稳定性方面表现优异,特别是对于需要长期运行的训练任务。相比更新的版本,这套配置虽然可能缺少某些最新特性,但对于大多数传统深度学习模型来说已经足够,且社区支持成熟,遇到问题更容易找到解决方案。