资讯动态

Ubuntu深度学习环境搭建:显卡驱动、CUDA、cuDNN、PyTorch与Anaconda完整指南

发布时间:2026/10/16 10:39:57 来源:尧图企业网站定制
1. 为什么这套环境值得单独写一篇完整流程深度学习环境搭建这件事看起来只是几条命令的事但真正动手做过的人都知道从裸机到能跑通torch.cuda.is_available()返回True中间能踩的坑足够写满两页纸。我前后在不下十台机器上重复过这套流程有工作站、有租用的云主机、也有自己攒的台式机每次都会遇到不一样的问题。这篇内容就是把这十几次安装经验里最稳定的路径、最容易翻车的地方、以及那些官方文档不会告诉你的细节完整地梳理一遍。这套组合的核心价值在于显卡驱动负责让系统认识硬件CUDA 负责让计算任务能调度到显卡cuDNN 负责加速深度学习的核心算子PyTorch 则是最终写模型用的框架而 Anaconda 负责把这些东西隔离在独立环境里互不打架。五者环环相扣任何一环版本对不上轻则报错重则系统进不去图形界面。所以这不是简单的装五个软件而是一次需要严格对齐版本的系统工程。适合读这篇的人有三类第一类是刚拿到带独显的机器、准备入门深度学习的新手第二类是之前装过但被版本冲突折磨过、想搞清楚原理的老手第三类是需要批量部署多台机器、想要一份可复现清单的运维或实验室管理员。不管你属于哪一类下面的内容都会从为什么这么做讲到具体怎么敲尽量让你一次装成而不是反复重装系统。我先把整体思路讲清楚驱动和 CUDA 的版本必须匹配CUDA 和 cuDNN 的版本必须匹配cuDNN 和 PyTorch 的版本必须匹配而 Anaconda 负责把 PyTorch 这一层隔离起来。理解了这条链后面所有的选择就都有了依据而不是照着某篇教程无脑复制命令。2. 装之前必须想清楚的版本对齐逻辑2.1 驱动版本决定了 CUDA 的上限很多人一上来就问我该装哪个版本的 CUDA这个问题其实问反了。正确的顺序是先看你的显卡型号支持到哪个驱动再看这个驱动最高支持到哪个 CUDA 版本。NVIDIA 的驱动有一个CUDA Version字段它表示这个驱动能支持的最高 CUDA 运行时版本你装的 CUDA Toolkit 版本不能超过它。查看方式很简单装完驱动后运行nvidia-smi输出右上角会有一行CUDA Version: 12.x之类的字样。注意这个数字不是你系统里装的 CUDA 版本而是这个驱动能支持的最高CUDA 版本。你可以装比它低的版本但不能装比它高的。这一点是新手最容易误解的地方很多人看到这里显示 12.4就以为自己已经装好 CUDA 12.4 了其实并没有。2.2 CUDA、cuDNN、PyTorch 三者的版本三角这三者的关系可以用一句话概括PyTorch 官方预编译包只针对特定的 CUDA 版本构建而每个 CUDA 版本又只对应特定的 cuDNN 版本。所以最省事的做法是反着来——先去 PyTorch 官网看它当前支持哪些 CUDA 版本选定一个再倒推 cuDNN 和 CUDA。举个例子如果 PyTorch 官方给出的是cu118、cu121、cu124这几个选项那你就从这三个里挑一个。挑的原则是优先选和你驱动兼容的、且相对较新的版本。比如你的驱动支持到 12.4那就选cu124如果驱动只支持到 12.1那就选cu121。下面这张表是我整理的常见组合对照可以作为参考PyTorch 版本推荐 CUDA对应 cuDNN最低驱动要求2.0.x11.88.7.x5202.1.x11.8 / 12.18.9.x5302.2.x11.8 / 12.18.9.x5352.3.x11.8 / 12.18.9.x5452.4.x11.8 / 12.1 / 12.49.x550提示这张表是经验总结实际以 PyTorch 官网和 NVIDIA 官方文档为准。版本迭代很快装之前一定去官网核对一次。2.3 为什么一定要用 Anaconda 做隔离有人会问既然系统里已经装了 CUDA为什么还要用 conda 再装一遍答案是conda 装的 PyTorch 会自带一份运行时所需的 CUDA 库它和系统级的 CUDA Toolkit 是两回事。系统级的 CUDA 主要给编译自定义算子、跑nvcc用而 conda 环境里的 CUDA 运行时是给 PyTorch 直接调用的。这样做的好处是你可以在同一台机器上开多个 conda 环境一个用 CUDA 11.8一个用 CUDA 12.1互不干扰。如果全部依赖系统级 CUDA切换版本就得重装系统级组件非常痛苦。所以 Anaconda 在这里不是可选项而是强烈推荐的做法。3. 显卡驱动的安装与那个最坑的坑3.1 先禁用开源驱动 nouveauUbuntu 默认会加载一个叫nouveau的开源显卡驱动它会和 NVIDIA 官方驱动冲突。所以第一步是把它拉黑。操作如下sudo nano /etc/modprobe.d/blacklist-nouveau.conf写入以下内容blacklist nouveau options nouveau modeset0保存后执行sudo update-initramfs -u然后重启。重启后运行lsmod | grep nouveau如果没有输出说明禁用成功。这一步没做干净后面装驱动时会报模块正在使用之类的错误非常难排查。3.2 用 apt 装驱动还是用官方 runfile这是第一个需要做选择的地方。我的建议是优先用 Ubuntu 的附加驱动工具或 apt 源安装而不是去 NVIDIA 官网下.run文件。原因有三点第一apt 装的驱动会和系统内核模块管理机制配合得更好内核升级后不容易失效第二卸载干净apt remove一条命令搞定第三.run文件安装时需要关闭图形界面在服务器上操作还好在带桌面的机器上很容易把 X 服务搞崩。具体操作ubuntu-drivers devices这条命令会列出你显卡推荐的驱动版本。然后sudo apt install nvidia-driver-550版本号按上一步推荐的来。装完重启运行nvidia-smi如果能看到显卡信息和驱动版本就成功了。3.3 装完驱动进不去桌面的排查思路这是最经典的坑装完驱动重启卡在登录界面或者黑屏。原因通常是驱动版本和内核不匹配或者Secure Boot 没关。排查顺序是这样的先在启动时进入 GRUB 菜单选Advanced options进一个旧内核或者 recovery 模式能进命令行就行。然后检查dmesg | grep -i nvidia看有没有报错。如果是 Secure Boot 的问题进 BIOS 把它关掉即可。如果是内核模块没编译成功运行sudo apt install --reinstall nvidia-dkms-550dkms这个包的作用是在内核更新时自动重新编译驱动模块装驱动时一定要带上它能省掉后面很多麻烦。注意如果你用的是租用的云主机通常服务商已经装好了驱动这一步可以跳过直接nvidia-smi验证即可。不要重复安装否则可能把已有的驱动搞坏。4. CUDA Toolkit 的安装与路径配置4.1 选 deb 包还是 runfileCUDA Toolkit 的安装方式主要有两种deb 网络安装包和 runfile 本地安装包。我的经验是如果你只是为了让 PyTorch 能跑其实可以不装系统级 CUDA因为 conda 环境里会自带。但如果你需要编译自定义 CUDA 算子、或者用nvcc编译代码那就必须装系统级的。装的话推荐用 runfile 方式因为它不会污染 apt 源卸载也干净sudo /usr/local/cuda-X.X/bin/uninstall_cuda_X.X.pl。下载时注意选择runfile (local)并且在安装选项里取消勾选 Driver因为驱动我们已经单独装过了重复装会冲突。安装命令sudo sh cuda_12.1.0_530.30.02_linux.run在交互界面里把 Driver 那一项的勾去掉只保留 CUDA Toolkit。4.2 环境变量到底该写哪几个装完 CUDA 后需要把路径加到环境变量里。编辑~/.bashrcexport PATH/usr/local/cuda-12.1/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH这里有两个细节值得说。第一不要用/usr/local/cuda这个软链接直接写具体版本号因为软链接会随着你装新版本而改变导致环境变量指向混乱。第二LD_LIBRARY_PATH这一项在有些教程里说不用加但如果你要编译自定义算子不加会找不到库。加了之后记得source ~/.bashrc生效。验证nvcc -V能输出版本信息就说明配置成功。4.3 多版本 CUDA 共存的切换方法如果你机器上装了多个 CUDA 版本可以通过软链接切换sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda但更推荐的做法是在 conda 环境里用环境变量覆盖这样切换环境时自动切换 CUDA不用动系统软链接。具体就是在激活环境后设置CUDA_HOME后面讲 conda 时会提到。5. cuDNN 的放置与验证5.1 下载对应版本并解压cuDNN 需要注册账号才能下载选版本时严格对应你装的 CUDA 版本。下载下来通常是一个 tar 包解压后是cuda目录里面有include和lib64。5.2 拷贝到 CUDA 目录的正确姿势sudo cp cuda/include/cudnn*.h /usr/local/cuda-12.1/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-12.1/lib64 sudo chmod ar /usr/local/cuda-12.1/include/cudnn*.h sudo chmod ar /usr/local/cuda-12.1/lib64/libcudnn*这里有个容易忽略的点权限。如果不加chmod ar普通用户运行时可能读不到这些库报权限错误。另外拷贝时用cudnn*通配符因为 cuDNN 8 之后文件被拆成了多个手动一个个拷容易漏。验证cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2能看到版本号就说明放对了。5.3 为什么 conda 环境里还要再装一次前面说过conda 装的 PyTorch 会自带 CUDA 和 cuDNN 运行时。所以系统级的 cuDNN 主要是给编译场景用的。如果你只是跑 PyTorch其实系统级 cuDNN 装不装都行。但装了没坏处而且能避免一些奇怪的链接错误。我的习惯是系统级装一份作为兜底conda 环境里让 PyTorch 自带一份作为实际使用两者互不干扰。6. Anaconda 与 PyTorch 环境的落地6.1 安装 Anaconda 与初始化下载 Anaconda 的 Linux 安装脚本执行bash Anaconda3-2024.02-1-Linux-x86_64.sh一路回车最后问是否conda init时选 yes。然后source ~/.bashrc命令行前面会出现(base)字样。这里有个小建议把 base 环境的自动激活关掉因为 base 环境最好保持干净不要往里装东西。执行conda config --set auto_activate_base false6.2 创建独立环境并安装 PyTorchconda create -n dl python3.10 conda activate dl然后去 PyTorch 官网复制对应的安装命令比如pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121注意这里用的是 pip 而不是 conda。原因是pip 源的 PyTorch 更新更及时且 wheel 包体积更小、安装更快。conda 源有时候版本滞后而且解析依赖很慢。这是我踩过几次坑之后的固定选择。6.3 验证是否真的用上了显卡装完后运行一段验证代码import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果第二行输出True第三行输出你的显卡型号就大功告成了。如果输出False往下看排查部分。7. 装完跑不起来时的排查链路7.1torch.cuda.is_available()返回 False 的四种可能这是最高频的问题按可能性从高到低排查第一种驱动没装好或版本太低。回到nvidia-smi确认能正常输出。如果这条命令都报错那问题在驱动层跟 PyTorch 无关。第二种PyTorch 装成了 CPU 版本。运行pip list | grep torch看版本号后面有没有cu121之类的后缀。如果没有说明装的是 CPU 版卸载重装。第三种CUDA 版本和 PyTorch 不匹配。比如你装的是cu121的 PyTorch但系统驱动只支持到 11.8就会失败。这种情况要么升级驱动要么换 PyTorch 版本。第四种环境变量污染。有时候系统里残留的LD_LIBRARY_PATH指向了错误的 CUDA 库导致 PyTorch 加载了不兼容的版本。可以在 Python 里运行import os; print(os.environ.get(LD_LIBRARY_PATH))检查。7.2 报libcudnn.so找不到怎么办这个错误通常出现在你手动编译了依赖 cuDNN 的代码时。解决方法是确认/usr/local/cuda-12.1/lib64在LD_LIBRARY_PATH里并且该目录下确实有libcudnn.so文件。如果文件在但还报错运行sudo ldconfig刷新动态链接库缓存。7.3 显存被占满但进程已退出有时候训练脚本崩了但显存没释放nvidia-smi显示还有进程占着。这时候用sudo fuser -v /dev/nvidia*找到占用进程的 PID然后kill -9掉。如果杀不掉说明是僵尸进程只能重启。这也是为什么我建议每个实验都在独立的 conda 环境里跑出问题时直接删环境重建比修系统级依赖快得多。8. 我反复安装十几次后沉淀下来的几条经验第一条版本对齐永远比安装速度重要。我见过太多人为了图快随便找了个教程就照着敲结果版本对不上折腾一整天。花十分钟去官网核对版本号能省下几个小时。第二条驱动用 apt 装CUDA 用 runfile 装PyTorch 用 pip 装。这是我试过最稳的组合。apt 管驱动能自动处理内核更新runfile 管 CUDA 能干净卸载pip 管 PyTorch 能拿到最新版本。第三条每装完一层就验证一次。装完驱动跑nvidia-smi装完 CUDA 跑nvcc -V装完 PyTorch 跑torch.cuda.is_available()。不要等全部装完再一起验证那样出了问题根本不知道是哪一层的锅。第四条把整个流程写成脚本。我现在有一份自己的setup.sh里面按顺序写好所有命令新机器上跑一遍就行。但脚本里要留好版本号变量方便随时改。这样下次再装十分钟搞定不用重新回忆每一步。第五条善用 conda 的环境导出。环境配好后运行conda env export environment.yml下次直接conda env create -f environment.yml就能复现。不过要注意导出的文件里会包含本地路径跨机器用时需要手动清理一下。最后分享一个我最近才用上的小技巧如果你不确定某个 CUDA 版本和 PyTorch 版本是否兼容可以在一个临时 conda 环境里先装一遍试试验证通过再正式装到主环境。这样试错成本极低删掉临时环境就行不会污染你正在用的环境。这个习惯帮我避免了好几次把主环境搞崩的惨剧。

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

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

免费获取报价 →
↑