☰
Ubuntu 20.04深度学习环境搭建:Anaconda、CUDA、cuDNN与PyTorch完整指南
2026/10/20 6:22:02 网站建设 项目流程

1. 深度学习环境搭建的整体思路与方案选型

1.1 为什么选择这套组合方案

在深度学习项目开发中,环境搭建往往是劝退新手的第一道门槛。Ubuntu 20.04 作为长期支持版本,凭借其稳定性与广泛的社区支持,至今仍是许多开发者和实验室的首选操作系统。而 Anaconda、CUDA、cuDNN、PyTorch 这套组合,基本覆盖了从环境管理到GPU加速的完整链路。

先说说为什么是这四个组件。Anaconda 解决的是 Python 环境隔离和包管理问题,它自带 conda 包管理器,能创建独立的虚拟环境,避免不同项目之间的依赖冲突。CUDA 是 GPU 计算的基础运行时,PyTorch 要调用显卡算力必须依赖它。cuDNN 则是针对深度神经网络的加速库,封装了大量卷积、池化等操作的优化实现,能让训练速度提升数倍。PyTorch 作为深度学习框架,负责模型构建和训练逻辑。

这套方案的核心优势在于:版本可控、环境隔离、GPU加速完整。相比直接用系统 Python 加 pip 安装,conda 环境能让你在同一个系统上维护多个不同版本的 PyTorch 项目,互不干扰。我见过太多人因为版本冲突把系统环境搞崩,最后不得不重装系统,所以从一开始就做好环境隔离非常关键。

1.2 版本兼容性:最容易踩坑的地方

这套组合里最让人头疼的就是版本匹配问题。CUDA 版本、显卡驱动版本、PyTorch 版本、cuDNN 版本,四者之间必须严格对应,否则轻则无法调用GPU,重则直接报错崩溃。

以 Ubuntu 20.04 为例,系统默认的显卡驱动版本决定了你最高能装哪个版本的 CUDA。比如驱动版本是 470 系列,那最高支持 CUDA 11.4;驱动是 515 系列,可以支持到 CUDA 11.7。而 PyTorch 每个版本又会指定它编译时使用的 CUDA 版本,比如 PyTorch 1.12 对应 CUDA 10.2/11.3/11.6,PyTorch 2.0 对应 CUDA 11.7/11.8。

我的建议是:先确定显卡驱动版本,再选 CUDA 版本,然后根据 CUDA 版本去 PyTorch 官网查对应的安装命令。cuDNN 则要和 CUDA 版本匹配,比如 CUDA 11.8 对应 cuDNN 8.7 或 8.9。这个顺序不能乱,否则很容易出现装完 PyTorch 发现torch.cuda.is_available()返回 False 的情况。

提示:不要盲目追求最新版本。深度学习生态里,稳定比新更重要。很多论文复现项目对版本有严格要求,装最新版反而可能跑不通。

1.3 安装顺序与依赖关系

正确的安装顺序应该是:显卡驱动 → Anaconda → CUDA → cuDNN → PyTorch。显卡驱动通常 Ubuntu 自带的“附加驱动”里就能装,或者用命令行安装。Anaconda 独立安装,不影响系统 Python。CUDA 和 cuDNN 是系统级安装,装完后需要配置环境变量。PyTorch 则是在 conda 虚拟环境里安装,通过 conda 或 pip 都可以。

这里有个细节:CUDA 有两种安装方式,一种是 runfile 安装包,一种是 deb 包。runfile 安装时可以取消勾选驱动安装(因为已经装过驱动了),避免驱动冲突。deb 包则更简洁,但有时候会覆盖系统驱动。我个人更推荐 runfile 方式,可控性更强。

2. 核心组件安装与配置实操

2.1 Anaconda 安装与 conda 环境配置

Anaconda 的安装相对简单,从官网下载对应版本的安装脚本,通常是.sh文件。下载完成后,在终端执行:

bash Anaconda3-2023.09-0-Linux-x86_64.sh

安装过程中会询问安装路径,默认是~/anaconda3,建议保持默认。安装完成后需要初始化 conda,执行source ~/.bashrc或者重新打开终端。验证安装是否成功:

conda --version

如果显示版本号就说明安装成功了。接下来创建一个专门的深度学习环境:

conda create -n dl_env python=3.9 conda activate dl_env

这里 Python 版本选择 3.9 是因为它在兼容性和稳定性之间取得了很好的平衡,大部分深度学习库都支持。环境名dl_env可以自定义,但建议用有意义的名字,方便后续管理。

注意:conda 默认的下载源在国外,速度可能很慢。可以配置国内镜像源加速,但要注意镜像源的同步延迟问题。如果追求最新版本,建议还是用官方源。

2.2 CUDA 安装:runfile 方式详解

CUDA 的安装是整个流程中最容易出问题的环节。首先去 NVIDIA 官网下载对应版本的 runfile 安装包。下载前需要确认显卡驱动版本:

nvidia-smi

这个命令会显示驱动版本和最高支持的 CUDA 版本。比如显示CUDA Version: 11.8,那你可以安装 11.8 及以下的 CUDA。

下载 runfile 后,先赋予执行权限:

chmod +x cuda_11.8.0_520.61.05_linux.run

然后执行安装:

sudo sh cuda_11.8.0_520.61.05_linux.run

安装过程中会出现一个选择界面,关键操作是:取消勾选 Driver,因为我们已经装过显卡驱动了。其他选项保持默认即可。安装完成后,需要配置环境变量。编辑~/.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使配置生效。验证 CUDA 是否安装成功:

nvcc -V

如果显示 CUDA 版本信息,说明安装成功。这里有个常见坑:如果之前装过其他版本的 CUDA,/usr/local/cuda这个软链接可能指向旧版本。可以用ls -l /usr/local/cuda查看,如果需要切换版本,重新创建软链接即可。

2.3 cuDNN 安装:文件复制与权限设置

cuDNN 的安装本质上是把库文件和头文件复制到 CUDA 的对应目录。首先去 NVIDIA 官网下载对应 CUDA 版本的 cuDNN。注意需要注册账号才能下载,选择“cuDNN Library for Linux”的 tar 包。

下载完成后解压:

tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz

然后复制文件到 CUDA 目录:

sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*

验证 cuDNN 版本:

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

如果能看到版本号,说明安装成功。cuDNN 的坑相对少一些,主要注意下载的版本要和 CUDA 版本匹配。比如 CUDA 11.8 要下载 cuDNN 8.7 或 8.9 的对应版本,下载页面会有明确标注。

2.4 PyTorch 安装:conda 与 pip 的选择

PyTorch 的安装命令在官网可以自动生成。进入 conda 虚拟环境后,根据你的 CUDA 版本选择对应的命令。比如 CUDA 11.8 的安装命令:

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

或者用 pip:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

conda 和 pip 的区别在于:conda 会同时管理 CUDA 运行时依赖,pip 则依赖系统已安装的 CUDA。我个人的经验是,如果系统 CUDA 装好了,用 pip 更轻量;如果不想折腾系统 CUDA,用 conda 更省心。但 conda 的下载速度有时候很慢,可以配置国内镜像。

安装完成后,验证 PyTorch 是否能调用 GPU:

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

如果is_available()返回 True,并且能打印出显卡型号,说明整个环境搭建成功。

3. 环境验证与性能测试

3.1 基础功能验证清单

环境装完后不能只看is_available()就完事,最好做一轮完整验证。我通常会跑一个简单的矩阵运算,确认 GPU 真的在干活:

import torch import time device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') print(f"Using device: {device}") x = torch.randn(10000, 10000).to(device) y = torch.randn(10000, 10000).to(device) start = time.time() z = torch.matmul(x, y) torch.cuda.synchronize() end = time.time() print(f"Matrix multiplication took {end - start:.4f} seconds")

这段代码会创建一个 10000x10000 的随机矩阵,做矩阵乘法。如果 GPU 正常工作,耗时会明显低于 CPU。你可以对比一下 CPU 版本的耗时,通常 GPU 会快几十倍。

另外还要验证 cuDNN 是否生效。PyTorch 默认会启用 cuDNN 加速,可以通过设置torch.backends.cudnn.enabled = True来确认。如果 cuDNN 没装好,卷积操作会回退到慢速实现,训练速度会大打折扣。

3.2 常见报错与排查思路

即使按照步骤操作,也难免遇到各种报错。我整理了几个最典型的问题和解决方法:

报错信息可能原因解决方法
CUDA out of memory显存不足减小 batch size,或清理其他占用显存的进程
torch.cuda.is_available() returns FalseCUDA 或驱动不匹配检查驱动版本、CUDA 版本、PyTorch 版本是否对应
libcudnn.so not foundcuDNN 路径未配置检查 LD_LIBRARY_PATH 是否包含 CUDA lib64 目录
nvcc: command not foundCUDA 环境变量未生效重新 source ~/.bashrc 或检查 PATH 配置
undefined symbol版本冲突卸载重装,确保所有组件版本匹配

排查时有个技巧:先用nvidia-smi确认驱动正常,再用nvcc -V确认 CUDA 正常,最后用 Python 验证 PyTorch。逐层排查,定位问题会快很多。

提示:如果遇到CUDA out of memory,可以在代码开头加torch.cuda.empty_cache()清理缓存。但这只是缓解,根本解决还是要调整模型或 batch size。

3.3 多版本 CUDA 共存管理

实际开发中,你可能需要同时维护多个项目,它们依赖不同版本的 CUDA。这时候可以用软链接切换:

sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda

需要切换版本时,重新创建软链接即可。但要注意,PyTorch 在安装时已经编译绑定了特定的 CUDA 版本,切换系统 CUDA 软链接不会改变 PyTorch 使用的版本。所以更稳妥的做法是:每个项目用独立的 conda 环境,安装对应版本的 PyTorch,让 conda 自己管理 CUDA 运行时依赖。

4. 实操心得与避坑指南

4.1 安装过程中的关键注意事项

第一,显卡驱动不要随便升级。Ubuntu 的自动更新有时候会升级显卡驱动,导致 CUDA 无法使用。建议把显卡驱动锁定版本,或者关闭自动更新。我遇到过好几次系统更新后nvidia-smi报错的情况,最后都是重装驱动解决的。

第二,安装 CUDA 时务必取消驱动勾选。runfile 安装界面里,Driver 那一项默认是勾选的,如果你已经装了驱动,一定要取消,否则会覆盖现有驱动,可能导致图形界面无法进入。

第三,环境变量配置要写对路径。CUDA 的路径是/usr/local/cuda-11.8这种带版本号的,不要写成/usr/local/cuda,因为软链接可能指向其他版本。写死版本号更稳妥。

第四,conda 环境要激活后再装 PyTorch。很多人忘了激活环境,结果装到了 base 环境里,导致环境混乱。养成习惯:每次操作前先conda activate dl_env。

4.2 提升开发效率的实用技巧

装好环境后,可以做一些优化让开发更顺手。比如配置 pip 国内源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

这样安装 Python 包会快很多。conda 也可以配置镜像源,但要注意有些镜像同步不及时,可能找不到最新版本的包。

另外,建议把常用的环境激活命令做成别名,写到~/.bashrc里:

alias activate_dl='conda activate dl_env'

这样每次只需输入activate_dl就能激活环境,省去敲长命令的麻烦。

还有一个技巧:用conda env export > environment.yml导出环境配置,换机器时用conda env create -f environment.yml一键复现。这在团队协作或换服务器时特别有用,能避免重新踩一遍版本坑。

4.3 长期维护与环境清理

深度学习环境用久了,conda 环境会越来越臃肿,各种缓存和旧包占用大量空间。定期清理很有必要:

conda clean --all

这个命令会清理无用的包缓存和索引缓存。另外,不再使用的虚拟环境要及时删除:

conda remove -n old_env --all

如果发现磁盘空间不足,还要检查~/.cache/pip和~/.conda/pkgs目录,这两个地方往往是空间大户。

最后说一个我踩过的坑:不要在生产环境里随意conda update --all。这个命令会升级所有包,很可能导致版本冲突,把原本能跑的环境搞崩。如果确实需要升级某个包,单独升级那一个就好,升级前最好先导出环境配置备份。

整个环境搭建流程走下来,顺利的话一两个小时能搞定,不顺利的话可能折腾一整天。但只要把版本对应关系搞清楚,按顺序操作,大部分问题都能避免。这套环境一旦搭好,后续开发就顺畅多了,值得花时间认真配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询