Ubuntu 20.04深度学习环境搭建:NVIDIA驱动+CUDA+cuDNN+PyTorch全攻略
1. 深度学习环境搭建的整体思路与方案选型1.1 为什么选择这套组合搞深度学习环境搭建这件事说简单也简单说折腾也真折腾。我前后在不下十台机器上装过这套环境从实验室的塔式工作站到租用的云主机每次都会遇到不一样的问题。Ubuntu 20.04 NVIDIA驱动 Anaconda3 CUDA cuDNN PyTorch 这套组合是目前深度学习入门和中小规模训练最主流的方案没有之一。为什么是 Ubuntu 20.04因为它的内核版本5.4对 NVIDIA 驱动的兼容性经过了大量验证社区资料最全遇到问题基本都能搜到答案。为什么用 Anaconda3 而不是系统自带的 Python因为 conda 能帮你隔离不同项目的环境避免一个项目升级了 numpy 把另一个项目搞崩的尴尬。CUDA 和 cuDNN 是 GPU 加速的底层依赖PyTorch 则是我们最终要用的框架。这套方案解决的核心问题是让你在一台干净的 Ubuntu 机器上从零到一跑通 GPU 版的 PyTorch。适合谁看刚入手深度学习的新手、需要重装环境的开发者、以及被版本兼容性折磨过的老手。我踩过的坑你大概率也会踩所以这篇内容会尽量把每个环节的细节和坑都讲透。1.2 版本兼容性是最大的坑在动手之前你必须先理解一个核心逻辑NVIDIA驱动版本、CUDA版本、cuDNN版本、PyTorch版本这四者之间存在严格的对应关系。不是随便装最新版就能跑通的。我见过太多人上来就pip install torch然后发现torch.cuda.is_available()返回 False折腾半天才发现是驱动版本太老不支持新版 CUDA。所以正确的思路是倒推先确定你要用哪个版本的 PyTorch然后查它依赖哪个 CUDA 版本再查这个 CUDA 版本需要什么驱动最后确定 cuDNN 版本。举个例子如果你要用 PyTorch 2.0它通常需要 CUDA 11.7 或 11.8而 CUDA 11.8 要求 NVIDIA 驱动版本至少 450.80.02Linux。但实际使用中我建议驱动版本尽量新一些因为新驱动向下兼容旧版 CUDA。注意驱动是向下兼容 CUDA 的但 CUDA 不向上兼容驱动。也就是说新驱动能跑旧 CUDA旧驱动跑不了新 CUDA。这是很多人搞混的地方。1.3 安装顺序不能乱这套环境的安装顺序是有讲究的顺序错了会导致各种奇怪的问题。我的建议顺序是先装 NVIDIA 驱动因为 CUDA 依赖它再装 CUDA Toolkit提供编译和运行环境然后装 cuDNN深度神经网络加速库接着装 Anaconda3Python 环境管理最后在 conda 环境里装 PyTorch框架层为什么 Anaconda 放在 CUDA 之后因为 Anaconda 安装时会修改 PATH 环境变量如果先装 Anaconda 再装 CUDA有时候 CUDA 的路径会被 conda 的路径覆盖导致nvcc命令找不到。虽然可以手动修复但不如一开始就按顺序来省事。2. NVIDIA驱动安装的完整实操与避坑2.1 安装前的准备工作在装驱动之前有几件事必须先做否则后面会出大问题。第一禁用 nouveau 驱动。nouveau 是 Ubuntu 自带的开源 NVIDIA 驱动它和官方驱动冲突。不禁用的话装完官方驱动重启会黑屏或者循环登录。禁用方法sudo nano /etc/modprobe.d/blacklist-nouveau.conf在文件里加入blacklist nouveau options nouveau modeset0然后执行sudo update-initramfs -u第二关闭 Secure Boot。如果你的机器开了 Secure Boot安装 NVIDIA 驱动时会要求你签名非常麻烦。进 BIOS 关掉它是最省事的做法。这个坑我在一台品牌工作站上踩过当时不知道装完驱动重启直接进不了系统折腾了好久。第三更新系统并安装编译依赖sudo apt update sudo apt upgrade -y sudo apt install build-essential gcc make linux-headers-$(uname -r) -ylinux-headers这个包特别重要NVIDIA 驱动安装时需要编译内核模块没有对应的头文件会直接失败。2.2 三种驱动安装方式对比装 NVIDIA 驱动有三种主流方式我分别说说它们的优缺点和适用场景。安装方式优点缺点适用场景apt 仓库安装简单自动处理依赖版本可能较旧新手对版本要求不高官方 .run 文件版本可选控制精细需手动禁用 nouveau易出错需要特定版本系统附加驱动图形化操作最省心版本选择少桌面版用户我个人最推荐的是apt 仓库安装因为最稳定出问题也容易回滚。具体操作sudo apt install nvidia-driver-525 -y这里的 525 是驱动版本号你可以用apt search nvidia-driver看看有哪些版本可选。装完之后必须重启sudo reboot重启后用nvidia-smi验证。如果能看到显卡信息和驱动版本说明装好了。2.3 驱动安装失败的排查思路驱动装不上或者装完黑屏是最常见的问题。我整理了几个典型场景和解决方法。场景一nvidia-smi报错 Failed to initialize NVML: Driver/library version mismatch。这通常是因为你更新了驱动但没重启内核里加载的还是旧模块。解决方法就是重启或者手动卸载再加载模块sudo rmmod nvidia sudo modprobe nvidia场景二重启后黑屏或循环登录。八成是 nouveau 没禁用干净或者 Secure Boot 没关。进 recovery 模式重新执行禁用 nouveau 的步骤。场景三安装时报 Unable to find the kernel source tree。这是缺linux-headers执行sudo apt install linux-headers-$(uname -r)补上。实操心得装驱动前先拍个快照或者记下当前状态出问题能快速回滚。我在云主机上装驱动时一定会先做个镜像备份这是血泪教训。3. CUDA与cuDNN的安装配置详解3.1 CUDA Toolkit 的版本选择与安装CUDA 版本的选择前面说了要倒推。假设我们最终要装 PyTorch 2.0它官方推荐 CUDA 11.7 或 11.8。我这里以 CUDA 11.8 为例。去 NVIDIA 官网下载 CUDA 11.8 的 runfile 安装包。为什么用 runfile 而不是 deb因为 runfile 可以让你在安装时取消勾选驱动驱动我们已经装过了避免重复安装导致冲突。下载后执行sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中关键一步是取消勾选 Driver只保留 CUDA Toolkit。其他默认即可。装完后配置环境变量编辑~/.bashrcexport 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 版本信息就说明成功了。3.2 cuDNN 的安装与验证cuDNN 是 NVIDIA 的深度神经网络加速库PyTorch 底层会调用它。下载 cuDNN 需要注册 NVIDIA 开发者账号选对应 CUDA 11.8 的版本一般下载 tar 包。解压后把文件复制到 CUDA 目录tar -xzvf cudnn-linux-x86_64-8.9.0.131_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 ar /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*验证 cuDNN 版本cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 23.3 环境变量配置的细节环境变量这块很多人配了但没生效或者配了导致系统命令冲突。我的经验是PATH里加 CUDA 的 bin是为了能用nvcc编译LD_LIBRARY_PATH里加 CUDA 的 lib64是为了运行时能找到动态库如果你装了多个 CUDA 版本用软链接/usr/local/cuda指向当前使用的版本环境变量里用/usr/local/cuda而不是具体版本号切换起来方便注意LD_LIBRARY_PATH不要随便加系统目录容易和系统库冲突。只加 CUDA 相关的就行。4. Anaconda3与PyTorch环境搭建4.1 Anaconda3 安装与 conda 环境管理Anaconda3 的安装很简单去官网下载 Linux 版的.sh文件然后bash Anaconda3-2023.09-0-Linux-x86_64.sh一路回车最后问你是否conda init选 yes。然后source ~/.bashrc。装完后强烈建议创建一个独立环境不要在 base 环境里装 PyTorchconda create -n pytorch_env python3.10 -y conda activate pytorch_env为什么用 Python 3.10因为 PyTorch 2.0 对 3.10 的支持最好3.11 有些包还没跟上。这是实测经验。4.2 PyTorch 安装的版本匹配PyTorch 安装最忌讳的就是直接pip install torch这样装的是 CPU 版。正确做法是去 PyTorch 官网用它的版本选择器生成安装命令。以 CUDA 11.8 为例命令是pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118注意--index-url参数它指定了 CUDA 11.8 的专用源。不加这个参数装的就是 CPU 版。4.3 验证安装是否成功装完后写个简单的验证脚本import torch print(PyTorch版本:, torch.__version__) print(CUDA是否可用:, torch.cuda.is_available()) print(CUDA版本:, torch.version.cuda) print(GPU数量:, torch.cuda.device_count()) print(GPU名称:, torch.cuda.get_device_name(0))如果torch.cuda.is_available()返回 True恭喜你环境搭好了。如果返回 False往下看排查部分。5. 常见问题排查与独家避坑经验5.1 版本兼容性速查表我把常见的版本对应关系整理成表方便你对照PyTorch版本推荐CUDA最低驱动版本Python版本2.0.x11.7/11.8450.80.023.8-3.112.1.x11.8/12.1450.80.023.8-3.111.13.x11.6/11.7450.80.023.7-3.101.12.x11.3/11.6450.80.023.7-3.105.2 典型问题排查表问题现象可能原因解决方法torch.cuda.is_available() 为 FalsePyTorch装成CPU版用官方命令重装nvidia-smi 报错驱动未加载重启或重装驱动黑屏/循环登录nouveau未禁用进recovery禁用nouveaunvcc找不到PATH未配置配置环境变量显存不足batch size太大减小batch size运行报libcudnn错误cuDNN版本不匹配重装对应版本cuDNN5.3 独家避坑技巧技巧一用 conda 装 CUDA 和 cuDNN。如果你不想折腾系统级的 CUDA可以在 conda 环境里装conda install cudatoolkit11.8 cudnn8.9 -c conda-forge这样 CUDA 只在这个环境里生效不影响系统切换环境也方便。缺点是版本选择少一些。技巧二pip 和 conda 不要混用。同一个环境里要么全用 pip要么全用 conda。混用容易导致依赖冲突这是很多人环境崩掉的根本原因。技巧三记录你的环境。装好之后导出环境配置conda env export environment.yml pip freeze requirements.txt下次重装直接照着来省时省力。技巧四云主机装驱动前先备份。云主机装驱动出问题可能直接连不上先做个快照出问题能快速恢复。技巧五多版本 CUDA 共存。如果你需要多个 CUDA 版本装在不同目录用软链接切换sudo rm /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda这样环境变量里统一用/usr/local/cuda切换版本只改软链接就行。5.4 性能验证与基准测试环境搭好后跑个简单的矩阵运算测试下性能import torch import time device torch.device(cuda if torch.cuda.is_available() else cpu) 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() print(f矩阵乘法耗时: {time.time() - start:.4f}秒)如果 GPU 版比 CPU 版快几十倍说明环境正常。如果差不多那可能还是用的 CPU。我在实际使用中发现这套环境搭好之后最容易被忽略的是驱动和 CUDA 的版本对应。很多人装完能跑但过段时间系统自动更新了内核驱动模块没重新编译就又挂了。所以我的建议是装好之后把自动更新关掉或者至少把内核更新锁定避免半夜系统自己更新把环境搞崩。这个坑我踩过不止一次希望你能避开。

相关新闻

YOLOv10【第九章:模型导出、部署与加速篇·第9节】NCNN 部署 YOLOv10:算子兼容与后处理适配!

YOLOv10【第九章:模型导出、部署与加速篇·第9节】NCNN 部署 YOLOv10:算子兼容与后处理适配!

🏆 本文收录于 《YOLOv10实战:从入门到深度优化》 专栏。 该专栏系统复现并深度梳理全网主流 YOLOv10 改进方法与工程实战案例,覆盖分类、目标检测、实例分割、多目标追踪、关键点检测、旋转目标检测等多个方向,坚持 持续更新 + 深度解析 + 工程验证。 专栏将围绕 YOLOv10…

2026/10/16 7:38:11 阅读更多 →
STM32 HAL库内部Flash操作与固件大小读取方法详解

STM32 HAL库内部Flash操作与固件大小读取方法详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:43 阅读更多 →
基于MP2642GR-Z与PIC18F8520的两串电池主动均衡系统设计

基于MP2642GR-Z与PIC18F8520的两串电池主动均衡系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:38:11 阅读更多 →

最新新闻

储能电池被动均衡方案:MP2642GR-Z与PIC18F86J11实战

储能电池被动均衡方案:MP2642GR-Z与PIC18F86J11实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:52:47 阅读更多 →
从 Copilot 到 Agent:2026 年智能编程工具梯队分级报告与最全榜单(TaoToken 统一 Key 接入篇)

从 Copilot 到 Agent:2026 年智能编程工具梯队分级报告与最全榜单(TaoToken 统一 Key 接入篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:52:47 阅读更多 →
基于MP2642GR-Z与STM32F217ZG的两串电池主动均衡方案设计与实现

基于MP2642GR-Z与STM32F217ZG的两串电池主动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:52:47 阅读更多 →
4412开发板Uboot启动流程详解:从复位向量到内核加载

4412开发板Uboot启动流程详解:从复位向量到内核加载

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:52:47 阅读更多 →
Scrapyd实战:从本地爬虫到远程部署与集中调度

Scrapyd实战:从本地爬虫到远程部署与集中调度

1. 为什么需要Scrapyd:本地跑通只是第一步如果你也是写了几年爬虫、但每次“上线”都靠手动登录服务器敲命令行的人,那你大概率经历过这种尴尬:本地scrapy crawl article_spider跑得好好的,一到服务器上就得用nohup ... &挂后…

2026/10/17 9:52:47 阅读更多 →
能量项链问题精讲:区间DP入门与破环成链的完整推导

能量项链问题精讲:区间DP入门与破环成链的完整推导

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 9:51:47 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →