资讯动态

Ubuntu 20.04深度学习环境搭建:NVIDIA驱动+Anaconda3+CUDA+cuDNN+PyTorch完整指南

发布时间:2026/10/16 13:02:23 来源:尧图企业网站定制
1. 深度学习环境搭建的整体思路与方案选型1.1 为什么这套组合至今仍是主流Ubuntu 20.04 虽然是 2020 年发布的 LTS 版本但它的内核版本5.4 系列和软件源稳定性让它在深度学习工作站和服务器领域一直有极高的保有量。NVIDIA 驱动 Anaconda3 CUDA cuDNN PyTorch 这套组合本质上解决的是三个层面的问题硬件驱动层让显卡能被系统正确识别和调用计算加速层CUDA/cuDNN提供 GPU 并行计算和深度神经网络原语框架层PyTorch则是我们真正写模型代码的地方。Anaconda3 在这里扮演的是环境隔离和包管理的角色避免不同项目之间的依赖冲突。很多人第一次装这套环境最容易犯的错误是“版本随便选”。实际上这五个组件之间存在严格的版本对应关系尤其是 CUDA、cuDNN 和 PyTorch 三者之间。选错一个版本轻则 import torch 报错重则驱动崩溃、系统进不了图形界面。所以我在动手之前一定会先确定 PyTorch 的版本然后反推 CUDA 和 cuDNN 的版本最后再确认驱动版本是否满足 CUDA 的最低要求。1.2 版本对应关系的确定方法假设我们要装 PyTorch 2.x 系列比如 2.1 或 2.2官方推荐的 CUDA 版本通常是 11.8 或 12.1。以 CUDA 11.8 为例它要求 NVIDIA 驱动版本不低于 520Linux 下具体是 520.61.05 及以上。cuDNN 则要选与 CUDA 11.8 匹配的 8.7 或 8.9 版本。Anaconda3 用最新的即可它本身不参与 GPU 计算只负责 Python 环境管理。这里有个经验不要盲目追求最新版。比如 CUDA 12.x 虽然新但很多第三方库比如某些版本的 detectron2、apex对它的支持还不完善。CUDA 11.8 是目前兼容性最好的一个版本社区踩坑记录最全遇到问题最容易搜到解决方案。我个人的建议是除非你有明确的理由必须用 CUDA 12否则优先选 11.8。提示确定版本后把驱动版本、CUDA 版本、cuDNN 版本、PyTorch 版本写在一张纸上或记事本里安装过程中随时对照避免装到一半忘了。1.3 安装顺序的逻辑正确的安装顺序是先装 NVIDIA 驱动再装 Anaconda3然后装 CUDA Toolkit接着装 cuDNN最后装 PyTorch。这个顺序不能乱。驱动是基础没有它系统认不出显卡Anaconda3 独立于驱动但要在 CUDA 之前装好因为后面 PyTorch 要通过 conda 或 pip 安装CUDA Toolkit 依赖驱动所以必须在驱动之后cuDNN 是 CUDA 的补充库必须在 CUDA 之后PyTorch 依赖 CUDA 和 cuDNN所以放最后。有些教程会建议用 conda 直接安装 pytorch-cuda 包这样就不需要手动装 CUDA Toolkit 和 cuDNN。这确实是一种省事的方法但它的缺点是灵活性差而且 conda 安装的 CUDA 运行时和系统级的 CUDA Toolkit 可能产生冲突。我倾向于手动装 CUDA Toolkit 和 cuDNN这样环境更透明出问题也更容易排查。2. NVIDIA 驱动安装的完整实操与避坑2.1 安装前的系统准备在装驱动之前有几件事必须做。第一确认你的显卡型号支持当前驱动。用lspci | grep -i nvidia可以查看显卡型号。第二确认系统内核版本用uname -r。第三关闭 Secure Boot否则第三方驱动无法加载。进入 BIOS 关闭 Secure Boot 这一步很多人会忘结果装完驱动重启后黑屏就是因为 Secure Boot 拦截了未签名的驱动模块。第四卸载系统自带的 nouveau 驱动。nouveau 是 Ubuntu 默认的开源 NVIDIA 驱动它和官方驱动冲突。卸载方法是创建一个黑名单文件sudo nano /etc/modprobe.d/blacklist-nouveau.conf写入以下内容blacklist nouveau options nouveau modeset0然后执行sudo update-initramfs -u重启后确认 nouveau 已禁用lsmod | grep nouveau如果没有输出说明禁用成功。2.2 驱动安装的两种方式对比安装 NVIDIA 驱动有两种主流方式一种是直接用 Ubuntu 的“附加驱动”工具图形界面另一种是下载官方 .run 文件手动安装。我强烈推荐第一种尤其是对新手来说。图形界面方式会自动处理内核模块编译和依赖关系出错概率低。手动 .run 方式虽然可控性强但容易因为内核头文件缺失、gcc 版本不匹配等问题失败。用图形界面安装的步骤打开“软件和更新”切换到“附加驱动”标签页系统会自动检测可用的驱动版本。选择一个标记为“recommended”的版本点击“应用更改”等待下载安装完成然后重启。重启后用nvidia-smi验证如果能看到显卡信息和驱动版本说明安装成功。如果图形界面里没有显示可用的驱动可以先执行sudo ubuntu-drivers devices查看推荐的驱动版本然后用sudo ubuntu-drivers autoinstall自动安装推荐驱动。2.3 驱动安装后的验证与常见问题安装完成后nvidia-smi是最重要的验证工具。它的输出包含驱动版本、CUDA 版本注意这里显示的是驱动支持的最高 CUDA 版本不是你安装的 CUDA Toolkit 版本、显卡型号、显存使用情况等。如果nvidia-smi报错“command not found”说明驱动没装好或者 PATH 没包含/usr/bin。如果报错“NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver”通常是内核模块没加载可以尝试sudo modprobe nvidia如果还不行可能需要重新安装驱动。另一个常见问题是重启后进入登录循环输入密码后又回到登录界面。这通常是因为驱动和显示管理器gdm3冲突。解决办法是进入 tty 终端CtrlAltF3卸载驱动改用 lightdm 显示管理器再重新安装驱动。具体操作sudo apt install lightdm sudo dpkg-reconfigure lightdm选择 lightdm 后重启再装驱动。注意如果你用的是笔记本且有 Intel 核显 NVIDIA 独显装完驱动后可能需要配置 PRIME 来选择使用哪块显卡。用prime-select query查看当前模式sudo prime-select nvidia切换到独显。2.4 驱动版本与 CUDA 版本的对应关系这里要特别强调一个容易混淆的点nvidia-smi右上角显示的“CUDA Version”是驱动支持的最高 CUDA 版本而不是你系统里安装的 CUDA Toolkit 版本。比如显示“CUDA Version: 12.2”意味着这个驱动最高可以支持 CUDA 12.2 的运行时但你完全可以安装 CUDA 11.8 的 Toolkit只要驱动版本满足 11.8 的最低要求即可。查看系统实际安装的 CUDA Toolkit 版本用nvcc -V或nvcc --version。驱动版本和 CUDA 版本的对应关系NVIDIA 官方有详细的表格。简单来说驱动版本 520 及以上支持 CUDA 11.8驱动版本 525 及以上支持 CUDA 12.0驱动版本 530 及以上支持 CUDA 12.1。如果你打算装 CUDA 11.8驱动版本至少要是 520。我一般会装比最低要求高几个版本的驱动这样兼容性更好。3. Anaconda3 的安装与环境管理策略3.1 Anaconda3 的下载与安装Anaconda3 的安装相对简单但有几个细节要注意。首先从官方渠道下载 Linux 版的安装脚本文件名类似Anaconda3-2024.02-1-Linux-x86_64.sh。下载后用bash执行安装bash Anaconda3-2024.02-1-Linux-x86_64.sh安装过程中会询问安装路径默认是~/anaconda3。我建议保持默认不要装到/opt或/usr/local因为那样需要 sudo 权限后续 conda 操作可能会遇到权限问题。安装完成后脚本会询问是否执行conda init选择 yes。这一步会在~/.bashrc里添加 conda 的初始化代码让每次打开终端时自动激活 base 环境。如果你不想每次打开终端都自动激活 base 环境base 环境激活后会改变提示符有些人觉得碍眼可以执行conda config --set auto_activate_base false这样终端启动时不会自动进入 base需要时手动conda activate即可。3.2 conda 环境隔离的最佳实践Anaconda3 最大的价值在于环境隔离。我强烈建议不要直接在 base 环境里装 PyTorch 和其他深度学习库。base 环境应该保持干净只放 conda 本身和少量通用工具。为每个项目创建独立的环境比如conda create -n dl_env python3.10 conda activate dl_envPython 版本的选择也有讲究。PyTorch 2.x 通常支持 Python 3.8 到 3.11。我一般选 3.10因为它在兼容性和新特性之间取得了较好的平衡。太老的版本3.7很多新库不支持太新的版本3.12有些库还没跟上。创建环境后建议先升级 pippip install --upgrade pip然后用 pip 安装 PyTorch而不是 conda。原因后面会详细说。3.3 conda 与 pip 的混用原则conda 和 pip 混用是很多环境问题的根源。我的原则是能用 conda 装的用 condaconda 没有的用 pip但两者不要交替安装同一个包。具体到 PyTorch官方推荐用 conda 安装因为 conda 会自动处理 CUDA 和 cuDNN 的依赖。但如果你已经手动装了 CUDA Toolkit 和 cuDNN用 pip 安装 PyTorch 会更直接因为 pip 版的 PyTorch 会自带 CUDA 运行时不依赖系统级的 CUDA。这里有个关键点pip 安装的 PyTorch 自带 CUDA 运行时库它和系统级的 CUDA Toolkit 是独立的。也就是说你系统里装的是 CUDA 11.8但 pip 安装的 PyTorch 可能自带 CUDA 12.1 的运行时。这并不冲突因为 PyTorch 会优先使用自带的运行时。但如果你要编译自定义的 CUDA 扩展比如某些第三方库就需要系统级的 CUDA Toolkit 和 PyTorch 自带的 CUDA 版本一致否则编译会失败。提示查看 PyTorch 使用的 CUDA 版本可以在 Python 里执行import torch; print(torch.version.cuda)。查看系统 CUDA Toolkit 版本用nvcc -V。两者可以不同但编译扩展时最好一致。4. CUDA Toolkit 与 cuDNN 的安装细节4.1 CUDA Toolkit 的安装方式选择CUDA Toolkit 的安装有三种方式runfile、deb 包、conda 安装。我推荐用 runfile 方式因为它最灵活可以自定义安装路径而且不会自动覆盖系统里的其他库。deb 包方式会往/usr/lib和/usr/include里塞很多东西容易和系统库冲突。conda 方式虽然简单但 CUDA Toolkit 会被装在 conda 环境里路径不标准后续编译扩展时可能找不到。用 runfile 安装的步骤从 NVIDIA 官网下载对应版本的 runfile比如cuda_11.8.0_520.61.05_linux.run。下载后先给执行权限chmod x cuda_11.8.0_520.61.05_linux.run然后执行sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中会询问是否安装驱动。如果你已经装好了驱动这里一定要选 no否则会覆盖现有驱动可能导致显示问题。然后选择安装组件我一般只选 CUDA Toolkit不选驱动和示例。安装路径保持默认/usr/local/cuda-11.8。4.2 环境变量的配置安装完成后需要配置环境变量。编辑~/.bashrc添加export PATH/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH然后执行source ~/.bashrc使其生效。验证安装nvcc -V如果输出显示了 CUDA 版本信息说明配置成功。这里有个细节/usr/local/cuda是一个符号链接指向实际安装的 CUDA 版本目录。如果你装了多个 CUDA 版本可以通过修改这个符号链接来切换默认版本。但更推荐的方式是在环境变量里直接写具体版本路径避免混淆。4.3 cuDNN 的安装与验证cuDNN 的安装本质上是把几个头文件和库文件复制到 CUDA 的对应目录。从 NVIDIA 官网下载 cuDNN 的压缩包需要注册账号解压后得到cuda/include和cuda/lib64两个目录。然后执行sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.8/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.8/lib64 sudo chmod ar /usr/local/cuda-11.8/include/cudnn*.h sudo chmod ar /usr/local/cuda-11.8/lib64/libcudnn*验证 cuDNN 版本cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2如果能看到版本号说明安装成功。注意cuDNN 的版本必须和 CUDA 版本严格匹配。比如 CUDA 11.8 要配 cuDNN 8.7 或 8.9不能配 cuDNN 9.x。下载时看清楚文件名里的 cuda11 或 cuda12 标识。4.4 多版本 CUDA 共存的管理有时候你需要在同一台机器上装多个 CUDA 版本比如一个项目用 11.8另一个用 12.1。这时候可以用 update-alternatives 来管理sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.8 100 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.1 50然后通过sudo update-alternatives --config cuda来切换。但更简单的方式是直接在~/.bashrc里改 PATH或者用 conda 环境变量来隔离。我一般用后者因为不同项目本来就在不同的 conda 环境里在环境激活脚本里设置对应的 CUDA 路径即可。5. PyTorch 安装与 GPU 验证5.1 PyTorch 安装命令的生成PyTorch 官网有一个安装命令生成器选择你的环境Linux、pip、Python、CUDA 版本它会给出对应的命令。比如 CUDA 11.8 的 pip 安装命令是pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118注意这里的--index-url参数它指定了 PyTorch 的官方 wheel 源。如果不加这个参数pip 会从 PyPI 下载 CPU 版本的 PyTorch装完后torch.cuda.is_available()会返回 False。5.2 验证 GPU 是否可用安装完成后进入 Python 验证import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()返回 True说明 GPU 可用。如果返回 False按以下顺序排查第一确认驱动正常nvidia-smi能输出信息第二确认安装的是 GPU 版 PyTorchtorch.version.cuda应该返回 CUDA 版本号而不是 None第三确认 CUDA 运行时库能被找到ldd检查 torch 的共享库依赖。5.3 常见安装失败原因与解决一个很常见的问题是 pip 安装时下载速度极慢或超时。这是因为 PyTorch 的 wheel 文件很大几个 GB从官方源下载可能不稳定。解决办法是使用国内镜像源比如清华源或阿里源。但要注意镜像源可能不是最新的有些新版本的 PyTorch 在镜像源里还没有。我的做法是先用官方源试如果太慢再换镜像源。另一个问题是 conda 和 pip 混装导致的版本冲突。比如先用 conda 装了 pytorch又用 pip 装了 torchvision结果两者版本不匹配。解决办法是卸载所有相关包重新用同一种方式安装。卸载命令pip uninstall torch torchvision torchaudio conda remove pytorch torchvision torchaudio然后重新安装。提示安装完成后建议跑一个简单的 GPU 计算测试比如a torch.randn(1000, 1000).cuda(); b torch.randn(1000, 1000).cuda(); c a b; print(c.sum())。如果这行代码能正常执行并输出结果说明 GPU 计算链路完全打通。6. 常见问题排查与实操经验汇总6.1 驱动相关问题的速查表问题现象可能原因解决方法nvidia-smi 命令找不到驱动未安装或 PATH 问题重新安装驱动检查 /usr/bin 是否在 PATHnvidia-smi 报错无法通信内核模块未加载sudo modprobe nvidia或重装驱动重启后黑屏Secure Boot 未关闭进 BIOS 关闭 Secure Boot登录循环驱动与显示管理器冲突换用 lightdm重装驱动分辨率异常驱动未正确识别显示器重装驱动或手动配置 xorg.conf6.2 CUDA 与 cuDNN 问题的排查思路CUDA 相关的问题通常表现为编译时报错“找不到 cuda.h”或“找不到 libcudart.so”。前者是头文件路径问题检查/usr/local/cuda/include是否在编译器的搜索路径里。后者是库路径问题检查LD_LIBRARY_PATH是否包含/usr/local/cuda/lib64。cuDNN 的问题通常表现为运行时报错“libcudnn.so.X: cannot open shared object file”。这通常是 cuDNN 库文件没有正确复制到 CUDA 的 lib64 目录或者版本不匹配。检查/usr/local/cuda/lib64下是否有libcudnn.so及相关文件以及符号链接是否正确。6.3 PyTorch 问题的排查思路PyTorch 最常见的问题是torch.cuda.is_available()返回 False。排查步骤第一python -c import torch; print(torch.version.cuda)如果输出 None说明装的是 CPU 版第二nvidia-smi确认驱动正常第三python -c import torch; print(torch.cuda.device_count())如果输出 0说明 PyTorch 检测不到 GPU。另一个问题是显存不足OOM。这通常不是安装问题而是模型或 batch size 太大。解决办法是减小 batch size或者用torch.cuda.empty_cache()清理缓存。如果显存被其他进程占用用nvidia-smi查看占用进程必要时 kill 掉。6.4 我踩过的几个坑第一个坑装完驱动后没有重启就直接装 CUDA结果 CUDA 安装程序检测不到驱动安装失败。一定要重启后再装 CUDA。第二个坑用 conda 装了 PyTorch又用 pip 装了 torchvision结果版本不匹配import 时报错。后来统一用 pip 安装问题解决。第三个坑cuDNN 下载了最新版但和 CUDA 版本不匹配运行时报错。后来仔细看了文件名里的 cuda11 标识换了对应版本。第四个坑在 conda 环境里装了 CUDA Toolkit但编译扩展时找不到 nvcc。原因是 conda 装的 CUDA 路径不在 PATH 里。后来改用系统级 CUDA Toolkit问题解决。提示每次装完一个新组件都立即验证。不要等全部装完再一起验证否则出了问题很难定位是哪个环节的错。7. 环境固化与迁移的实用技巧7.1 导出环境配置环境装好后建议导出配置以便复现。conda 环境导出conda env export environment.yml但这个文件会包含本地路径和具体版本号跨机器复现时可能不兼容。更通用的做法是只导出显式安装的包conda env export --from-history environment.ymlpip 环境导出pip freeze requirements.txt7.2 用 Docker 固化环境如果需要在多台机器上部署相同的环境Docker 是最可靠的方案。基于nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04镜像写一个 Dockerfile把 Anaconda3 和 PyTorch 的安装步骤固化进去。这样每次部署都是完全一致的环境不会出现“在我机器上能跑”的问题。7.3 环境备份与恢复对于物理机可以用timeshift做系统快照装环境前先打一个快照装坏了直接回滚。对于 conda 环境可以定期用conda pack打包迁移到其他机器时解压即可。这些方法比重新装一遍环境要省时得多。我个人在实际操作中的体会是这套环境的安装难点不在于步骤多而在于版本匹配和细节处理。把版本对应关系搞清楚把每个组件的验证做到位基本不会出大问题。最怕的是跳步骤、不验证、凭感觉选版本那样装出来的环境迟早会出问题。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑