
去年秋天我把主力开发机从 Windows 双系统彻底换成 Linux Mint起因很简单跑 PyTorch 训练时Windows 下 DataLoader 的 worker 老是卡死显存回收也不干净折腾了一天没定位到问题重装到 Mint 之后同样的代码一次跑通。从那之后我就把 Mint 当成了深度学习开发机的默认底座——它基于 Ubuntu LTS驱动和 CUDA 生态的兼容性几乎照抄 Ubuntu但又没有 Ubuntu 近两年强推 Snap 带来的那些糟心事。这篇就把我在 Mint 上从装系统、装 NVIDIA 驱动、装 CUDA 和 cuDNN到配 Anaconda 虚拟环境、装 PyCharm 并接上 conda 解释器的完整流程写清楚。不管你是刚拿到新机器的新手还是从 Ubuntu 迁过来的老手都能照着走一遍少踩几个我踩过的坑。1. 为什么深度学习开发机我选 Linux Mint1.1 Mint 与 Ubuntu 的实际差异在哪很多人第一反应是深度学习不都用 Ubuntu 吗这话没错但 Mint 是直接基于 Ubuntu LTS 构建的软件源、内核、驱动仓库这一层几乎完全共用。你在 Ubuntu 上查到的每一条 NVIDIA 驱动安装教程、每一条 CUDA 环境变量写法在 Mint 上基本可以原样照搬不需要重新学一套。真正的差别在桌面层。Mint 用的是 Cinnamon / MATE / XFCE 这一套传统桌面窗口管理、文件管理器、任务栏逻辑更接近老式 Windows 的使用习惯对从 Windows 迁过来的人友好得多。而 Ubuntu 从 22.04 开始把 Firefox 等一批软件改成 Snap 包Snap 的启动速度、沙箱权限和挂载行为在开发机上经常制造麻烦比如某些 IDE 读不到 Snap 版本的解释器路径。Mint 默认仍然走 apt 和 deb这一点对需要精细控制环境的开发场景是加分项。另一个被低估的点是更新策略。Mint 的更新管理器把更新分成了安全更新内核更新软件更新几档你可以只打安全补丁而不动内核和驱动。GPU 开发机最怕的就是某次无意识的内核升级把 DKMS 编译好的 NVIDIA 模块顶掉开机直接掉进黑屏或者 640x480 分辨率。Mint 给了你手动拦住这类更新的机会这个设计我很买账。提示Mint 21.x 对应 Ubuntu 22.04内核基线 5.15Mint 22.x 对应 Ubuntu 24.04内核基线 6.8。选哪个取决于你的显卡代次下文会展开。1.2 版本选择与硬件匹配别一上来就装最新选 Mint 版本这事网上教程大多只说装最新版但这在 GPU 开发机上不一定对。核心判断依据是你的显卡需要多新的内核和驱动。以 40 系显卡为例RTX 4060 Ti、4070 这些卡需要 NVIDIA 驱动 525 以上而 Mint 21.x 自带的驱动管理器里默认就能拉到 535 甚至 550 的驱动配合 5.15 内核是能正常工作的。也就是说老一点的 Mint 版本并不必然带不动新卡关键看驱动版本而不是系统版本号。反过来讲如果你手上是刚上市不久的新卡内核太老可能出现驱动编译失败或者识别不到设备的情况这时候直接上 Mint 22.x 更省事。我的建议是新硬件选新系统老硬件选成熟的老系统别为了版本新去冒驱动不兼容的风险。还有一点要提醒Mint 的 Cinnamon 版本对显存有一定占用桌面特效全开会吃掉几百 MB 显存。虽然对大显存卡无所谓但如果你是 8G 显存跑大 batch建议装 MATE 或者干脆关掉特效能多挤出一点训练空间。1.3 装系统之前必须先想清楚的三件事第一件事是分区。很多人装完才发现根分区给了 30G结果 CUDA 加 cuDNN 加一堆 conda 环境一下就撑爆了。CUDA Toolkit 完整安装大概 6 到 8 GcuDNN 压缩包解压后也有几个 G再加上 conda 每个虚拟环境动辄 3 到 5 G根分区至少留 100G 起步我一般给 150G。第二件事是数据盘。深度学习项目最占空间的不是代码是数据集和模型权重。强烈建议单独挂一块盘或者单独分一个 /data 分区装完系统直接挂载上去以后重装系统数据不受影响。我自己吃过重装系统顺手格式化整个盘、丢掉两百多 G 数据集的亏血的教训。第三件事是备份。装系统意味着分区表要动不管你是双系统还是全盘覆盖先把现有重要数据拷到移动硬盘或者另一台机器上。这一步花十分钟能省掉后面可能几天的后悔。2. Mint 系统安装与分区驱动实操2.1 安装介质制作与固件设置准备工作很标准一个 8G 以上的 U 盘去 Mint 官网下载 ISO 镜像然后用启动盘写入工具把它写进去。Linux 下可以用 dd 命令Windows 下用常见的镜像写入工具都行注意要选写入镜像模式而不是简单地把 ISO 文件复制进 U 盘后者是做不成启动盘的。写完盘之后校验一下文件完整性。这一步经常被跳过但它能帮你避开后面最恶心的那种装到一半报 I/O 错误的问题。校验方法很简单把 ISO 的官方校验值和下载后算出来的值对一下sha256sum linuxmint-21.3-cinnamon-64bit.iso如果用的是较新的机器进 BIOS 之前注意先关掉 Secure Boot或者至少在安装完 NVIDIA 驱动后再打开。原因在于 NVIDIA 的闭源内核模块默认没有签名Secure Boot 开启状态下 DKMS 编译出来的模块无法加载表现就是装完驱动反而进不了图形界面。可以在安装阶段先关掉等驱动装稳了再考虑开回去并配置签名。至于 BIOS 里的启动模式现在基本都是 UEFI 了。如果你打算和 Windows 共存务必保持和 Windows 一致的启动模式都是 UEFI 或者都是 Legacy混用会导致其中一个系统启动项丢失。2.2 分区方案给深度学习场景留足空间进入安装程序后选择其他选项手动分区这是我推荐的分区方案挂载点建议大小作用说明EFI 分区512M - 1GUEFI 启动必需和 Windows 共用即可/ 根分区150G 以上系统、驱动、CUDA、conda 主环境/swap内存的 1 倍或 32G 封顶内存吃紧时的缓冲也用于休眠/home 或 /data剩余全部数据集、模型、代码仓库关于 swap有种说法是内存 64G 以上就不需要 swap 了。实践里我不完全认同。虽然训练时确实很少真正用到 swap但某些数据处理库在申请大块虚拟内存时如果没有 swap 会直接抛内存错误。给个 32G 的 swap 分区成本很低能省掉一类莫名其妙的报错。如果你的机器内存特别大128G 以上也可以不单独分 swap改用 swapfile装完系统后手动建一个管理更灵活sudo fallocate -l 32G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile然后把它写进 /etc/fstab 让开机自动挂载这一步别忘了否则重启就没了。2.3 装完系统后的第一轮配置装完重启进桌面先别急着装 CUDA把基础环境理顺。第一件事是换软件源打开更新管理器在源设置里找一个国内镜像下载速度会快很多。Mint 自带的镜像列表里通常就有几个速度不错的点一下测速选最快的那个就行。第二件事是系统更新。这时候会把内核和其他基础包更新到最新重启一次让新内核生效。关键来了在装 NVIDIA 驱动之前完成所有内核更新。因为 DKMS 是针对当前内核编译模块的如果你先装驱动再更新内核很可能因为新内核的源码还没到位导致模块编译失败重启后就没有图形界面了。第三件事是装编译工具链和内核头文件。CUDA 安装脚本里的驱动编译、DKMS 模块编译都依赖它们sudo apt update sudo apt install build-essential dkms linux-headers-$(uname -r) pkg-config libglvnd-dev这几个包看着不起眼但缺了任何一个后面某一步就会以非常隐晦的方式失败。特别是linux-headers-$(uname -r)一定要用uname -r动态取当前内核版本手动填版本号很容易填错。2.4 驱动安装驱动管理器与命令行两条路Mint 最大的便利之一就是内置了驱动管理器。打开菜单搜索驱动管理器它会自动扫描可用的 NVIDIA 驱动版本你选一个推荐的通常标着 recommended点应用剩下的它会自己处理包括禁用开源 nouveau 驱动、安装闭源模块、更新 initramfs。这条路适合绝大多数人尤其是刚接触 Linux 的朋友。但有几个细节要注意安装过程中会有几十秒到一两分钟的黑屏或者进度条停顿这是正常的别以为死机了就强制重启。装完必须重启重启后如果分辨率正常、任务栏正常说明驱动装上了。如果你需要指定某个特定版本的驱动比如某个框架明确要求 535 而不是 550那就得走命令行sudo apt install nvidia-driver-535装完同样要重启。验证驱动是否生效用这条命令nvidia-smi输出的表格里能看到驱动版本号、CUDA 版本号注意这个 CUDA Version 是驱动支持的最高 CUDA 运行时版本不是你已经装的 CUDA 版本这两个概念新手最容易搞混以及 GPU 的显存占用情况。注意如果 nvidia-smi 报 command not found 或者提示无法与驱动通信先确认真的重启过再检查 Secure Boot 是不是还开着最后看dkms status里 nvidia 模块的状态是不是 installed。顺便说一个虚拟机里的特殊情况。有人喜欢在 VirtualBox 里装 Mint 练手装完发现分辨率卡在 1024x768装了增强功能也不生效。这通常是 vbox 内核模块没编译成功检查一下/sbin/vboxadd和lsmod | grep vbox多半是缺少对应内核的头文件。补上linux-headers和build-essential后重装一次增强功能包就好了。当然虚拟机里是没法直通 GPU 跑 CUDA 的练系统操作可以做深度学习别指望。3. GPU 环境搭建CUDA 与 cuDNN 的版本对齐3.1 版本对应关系是最容易翻车的地方这部分我想单独强调因为十个人装 CUDA 有八个卡在版本不匹配上。装 CUDA 和 cuDNN 之前必须先确定三件事的版本显卡驱动版本、CUDA 版本、你要用的深度学习框架要求的版本。关键原则是从框架倒推而不是从最新版倒推。很多人看到 CUDA 出了 12.8、12.9 就一路装最新结果发现 PyTorch 官方 wheel 只编到了某个版本只能从源码编译那是一条不归路。正确顺序是先确定你要用哪个版本的 PyTorch 或 TensorFlow去官网看清楚它对应的 CUDA 版本再回来装对应的 CUDA Toolkit。常见版本的对应关系我整理成表省得你去翻文档CUDA 版本最低驱动版本常见搭配框架11.8520.61.05PyTorch 2.0 - 2.412.1530.30.02PyTorch 2.1 - 2.412.4550.54.14PyTorch 2.4 - 2.612.6560.28.03较新的框架版本12.8570 系列最新框架以 RTX 4060 Ti 为例它属于 Ada 架构驱动层面支持 CUDA 11.8 到最新版本都没问题实际选哪个完全看你框架需求。我一般推荐 12.1 或 12.4生态最成熟绝大多数教程和预编译包都覆盖到了。cuDNN 的版本跟着 CUDA 走官方下载页会标明for CUDA 12.x这样的字样。还有个隐藏细节cuDNN 8.x 和 9.x 的目录结构和头文件名有变化9.x 把版本信息集中到了cudnn_version.h里查看版本号的命令因此不一样后面验证环节我会具体写。3.2 CUDA Toolkit 的两种安装方式怎么选官方给的方式主要有两种deb 包和 runfile。我的建议是优先用 runfile理由有三个。第一deb 包会往 apt 源里塞一堆 NVIDIA 自己的仓库配置以后每次apt upgrade都可能顺手把驱动和 CUDA 一起升级升级完环境变了、代码跑不了了排查半天才发现是自动更新搞的鬼。runfile 是独立安装在 /usr/local 下的和系统包管理解耦装完之后除非你主动动它否则不会自己变。第二deb 包默认会把驱动也一起装上而你已经有驱动了容易冲突。runfile 安装时可以手动取消勾选驱动那一项只装 Toolkit。第三runfile 支持指定安装路径多版本共存时更清爽。下载的时候要注意选对架构。运行uname -m确认绝大多数是 x86_64。然后去 NVIDIA 的 CUDA 归档页找对应版本的 runfile注意页面上的Archive of Previous CUDA Releases入口别只在首页找最新版。下载完先校验这一步真的别省md5sum cuda_12.1.0_530.30.02_linux.run和官网给的校验值比对一致再往下走。3.3 runfile 安装的完整流程与参数解读安装前必须先把图形界面停掉否则安装脚本可能会尝试加载内核模块失败sudo systemctl isolate multi-user.target如果这一步之后你想回到图形界面是sudo systemctl isolate graphical.target。执行安装sudo sh cuda_12.1.0_530.30.02_linux.run进入文本界面后第一个选项是接受协议键盘上下键移动回车确认。接下来是组件选择界面这里是关键Driver如果你已经装好驱动且 nvidia-smi 正常取消勾选。如果没装过驱动可以勾上让安装器帮你装。CUDA Toolkit必须勾。CUDA Samples可以不勾除非你要跑官方示例验证。CUDA Demo Suite一般不勾。选完之后开始安装最后它会输出一段摘要告诉你装了哪些组件、哪些没装、以及需要配置的环境变量。如果驱动那一项显示 Not Selected说明你之前已经装过驱动这是正常的。安装完成重启图形界面然后配置环境变量。编辑~/.bashrc追加两行export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH第一行让终端能找到 nvcc 编译器第二行让程序运行时能找到 CUDA 的动态库。这两行不写你会发现 nvcc 能用但程序跑起来报找不到 libcudart.so。改完执行source ~/.bashrc然后验证nvcc -V正常会输出编译器版本注意这个版本和 nvidia-smi 里显示的 CUDA Version 可能不一样这是正常的前者是你装的编译工具版本后者是驱动支持上限。3.4 cuDNN 的安装与版本验证cuDNN 现在是压缩包形式下载下来解压之后把文件复制到 CUDA 目录即可。假设你下载的是 for CUDA 12.x 的 tar 包tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive sudo cp include/cudnn*.h /usr/local/cuda/include sudo cp lib/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h sudo chmod ar /usr/local/cuda/lib64/libcudnn*那个chmod ar很容易被忽略。如果不加可能出现普通用户跑程序时权限不足读不到库文件的问题表现形式是 cannot open shared object file然后你会以为库没装上反复重装。其实只是权限问题。验证版本cuDNN 8.x 用cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2cuDNN 9.x 的头文件路径和宏名有调整通常在cudnn_version.h里同样能找到CUDNN_MAJOR、CUDNN_MINOR、CUDNN_PATCHLEVEL三个宏对照着看就知道版本号了。最后做一次端到端验证直接用 Python 试python -c import torch; print(torch.cuda.is_available()); print(torch.version.cuda)如果第一个输出 True、第二个输出你安装的 CUDA 版本号那这套环境就算通了。3.5 多版本 CUDA 共存与切换做项目时经常会遇到一个仓库要 CUDA 11.8、另一个要 12.1 的情况。硬装两个版本并不冲突因为 runfile 安装时你可以指定路径sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --toolkitpath/usr/local/cuda-11.8 --silent装完之后 /usr/local 下会有 cuda-11.8 和 cuda-12.1 两个目录而 /usr/local/cuda 只是个软链接指向其中一个。切换方式有两种一种是改软链接全局生效sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda另一种是不动系统层面在 conda 虚拟环境里用conda install cudatoolkit11.8装环境专属的运行时让每个环境用自己的。这种方式更干净但要注意 conda 里的 cudatoolkit 只包含运行时库不包含 nvcc 编译器如果你需要编译自定义 CUDA 算子还得靠系统级的完整 Toolkit。我的习惯是系统层面只维护一个主力 CUDA 版本其它版本全部通过 conda 环境隔离。这样/usr/local/cuda永远指向稳定版本环境变量也不用天天改。4. Anaconda 安装与环境管理4.1 下载安装与镜像源配置Anaconda 官网的下载速度在国内实在感人直接用清华的镜像站下载安装包是最省事的。找到对应版本下载最新的 Linux x86_64 安装脚本文件通常是个 .sh。下载完给执行权限并运行chmod x Anaconda3-2024.02-1-Linux-x86_64.sh ./Anaconda3-2024.02-1-Linux-x86_64.sh一路回车到了问安装路径的地方默认是~/anaconda3。如果你根分区空间紧张可以改成挂载的数据盘路径比如/data/anaconda3这样不占根分区。后面问是否执行 conda init 的时候一定要选 yes它会自动把 conda 的初始化脚本写进 .bashrc。装完重开一个终端如果命令行前面出现了(base)说明生效了。然后立刻配镜像源否则后面装包会慢到怀疑人生conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes如果要用 PyTorch还得加一条 pytorch 的镜像通道具体地址在镜像站页面上能找到。配置完用conda config --show channels检查一下顺序。提示如果你不想每次开终端都自动激活 base 环境有时候确实烦会干扰系统的 python执行conda config --set auto_activate_base false需要时再手动conda activate。4.2 创建虚拟环境与安装框架给每个项目建独立环境是我强烈建议的习惯。环境之间互相隔离一个装崩了删掉重建不影响其它项目。conda create -n dl python3.10 conda activate dlPython 版本选 3.10 或 3.11 目前兼容性最好3.12 有些包还没跟上。装 PyTorch 的时候推荐去官网的安装命令生成器上选好版本组合它会给你一条完整命令。比如 CUDA 12.1 配 PyTorchpip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121这里用 pip 而不是 conda 装 PyTorch是我实测下来的经验。conda 装 PyTorch 有时候会连带重装一套 cudatoolkit和你系统的 CUDA 版本对不上反而制造麻烦。pip 装的 wheel 已经打包好了对应的 CUDA 运行时和系统 CUDA 是解耦的。装完验证python -c import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())三个值分别是框架版本、编译时用的 CUDA 版本、以及能不能用 GPU。4.3 conda 环境里的 CUDA 和系统 CUDA 是什么关系这个困惑几乎每个新手都会有我专门说一下。系统级的 CUDA/usr/local/cuda包含三部分驱动接口、运行时库、以及 nvcc 编译器。conda 环境里的 cudatoolkit 或者 pip 装进来的 nvidia-* 包只包含运行时库不包含 nvcc。实际运行时PyTorch 加载的是自己打包进来的运行时库它通过驱动提供的接口和 GPU 通信。所以只要你的驱动版本足够新能支撑起框架需要的 CUDA 版本即使系统里装的是 CUDA 11.8你也能在 conda 环境里跑 CUDA 12.1 编译的 PyTorch。反过来说如果你的代码里有自定义 CUDA 算子需要现场编译那就得依赖系统级的 nvcc这时候版本必须匹配。这种情况下建议用nvcc --version确认版本必要时通过环境变量临时切换。理解了这个关系你就不会再纠结我到底该装哪个 CUDA——跑现成框架看驱动够不够新编译自定义算子看 nvcc 版本对不对。5. PyCharm 安装与解释器配置5.1 社区版还是专业版怎么选PyCharm 分社区版和专业版。社区版免费支持纯 Python 开发、调试、虚拟环境管理做深度学习训练脚本完全够用。专业版多出来的是 Web 框架支持、数据库工具、远程开发、以及对科学计算模式的一些增强。对于主要在本地跑训练、写脚本、调模型的人社区版真的够。如果你需要连远程服务器开发、或者用 Docker 做环境隔离专业版的远程开发功能会省不少事。学生和教师可以申请免费的教育授权这是官方渠道别去网上找那些来路不明的永久激活文件轻则被杀软报毒重则环境被植入东西得不偿失。5.2 安装与创建桌面快捷方式官网下载 tar.gz 包解压到 /opt 或者你的家目录sudo tar -xzf pycharm-community-2024.1.tar.gz -C /opt进到 bin 目录运行启动脚本cd /opt/pycharm-community-2024.1/bin ./pycharm.sh第一次启动会走一遍初始设置问你要不要导入配置、选主题、选键盘映射。主题随意键盘映射如果你习惯了其它 IDE 可以选对应方案。每次敲路径启动太麻烦建个桌面项。在~/.local/share/applications/下新建pycharm.desktop[Desktop Entry] Version1.0 TypeApplication NamePyCharm Icon/opt/pycharm-community-2024.1/bin/pycharm.png Exec/opt/pycharm-community-2024.1/bin/pycharm.sh CommentPython IDE CategoriesDevelopment;IDE; Terminalfalse StartupWMClassjetbrains-pycharm-ce保存后就能在应用菜单里搜到 PyCharm 了。如果图标不显示执行一下update-desktop-database ~/.local/share/applications。5.3 把 conda 环境接进 PyCharm这是最关键的一步。打开项目后进设置找到 Python 解释器配置项点添加解释器选 Conda Environment然后指定 conda 可执行文件路径通常是~/anaconda3/bin/conda。PyCharm 会自动扫描出你建的所有 conda 环境选中要用的那个即可。有个常见卡点如果你在 PyCharm 里找不到 conda 的路径或者它扫描不到环境多数是因为 PyCharm 是通过桌面图标启动的没有继承终端里的环境变量。解决办法是在 .desktop 文件里显式指定 PATH或者干脆从终端用./pycharm.sh启动这样能继承当前 shell 的所有变量。配置好之后在 PyCharm 底部的终端里执行which python如果输出的是~/anaconda3/envs/你的环境名/bin/python说明接对了。至于装包我更喜欢在 PyCharm 的终端里用 pip 或者 conda 命令装比图形化的包管理界面可控。比如pip install pandas装完 PyCharm 会自动索引新包补全和跳转立刻就能用。如果它没反应右键项目目录选同步一下或者重启 IDE。5.4 几个提升效率的设置中文界面这块社区版从较新版本开始支持官方中文语言包在插件市场搜 Chinese 就能装上不需要手动改配置文件。字体和显示方面如果你用高分辨率显示器去设置里把界面缩放调一下代码字号也调大长时间看代码眼睛舒服很多。代码补全和类型检查PyTorch 这类库的类型标注不完整PyCharm 可能会标一堆黄线。可以在设置里把对应的检查项关掉或者调低级别不然满屏警告影响心情。调试技巧方面训练脚本里加断点用 PyCharm 的变量查看器看 tensor 的 shape 和值比 print 高效得多。不过要注意在 DataLoader 的 worker 里打断点可能会因为多进程而失效这种情况改成 num_workers0 调试调通了再改回来。6. 踩过的坑与常见问题排查6.1 安装包损坏导致的诡异报错有个报错我必须单独拎出来讲因为它看起来特别吓人但原因特别简单gzip: stdin: invalid compressed>file cuda_12.1.0_530.30.02_linux.run如果输出说这是个 HTML document那就说明你下到的其实是服务器的错误页面比如 404 页面被存下来了。这种情况在一些下载工具里很常见因为它不检查响应内容就直接存盘。第二个原因是用错了工具。有些 .run 文件本身是个自解压的 shell 脚本里面嵌了压缩数据如果你用tar或者unzip去处理它自然会报格式错误。正确做法是sh xxx.run或者先chmod x再执行。第三个原因是磁盘空间不足写到一半写不进去了。安装 CUDA 前用df -h看一眼根分区剩余空间至少留 20G 比较稳妥。排查顺序我建议是先md5sum校验对不上就重下重下建议用命令行工具并确认没有中间环节截断校验通过还报错就检查处理方式对不对都没问题就检查磁盘空间。6.2 问题速查表我把这一路遇到的高频问题整理成表方便对照现象可能原因处理方式nvidia-smi 找不到命令驱动未安装或未重启装驱动后重启检查 dkms statusnvidia-smi 报通信失败Secure Boot 拦截模块BIOS 关闭 Secure Boot 或配置模块签名nvcc 找不到命令PATH 未配置在 .bashrc 加 /usr/local/cuda/bin程序报找不到 libcudart.soLD_LIBRARY_PATH 缺失追加 /usr/local/cuda/lib64程序报找不到 libcudnn.so权限不足或路径不对chmod ar 后确认文件在 lib64 下torch.cuda.is_available 为 False框架与驱动版本不匹配打印 torch.version.cuda 对比驱动支持版本编译自定义算子报缺编译器未装 build-essentialapt 安装工具链和内核头文件装包时报 gcc 相关错误缺编译依赖装 build-essential 和 python-dev更新后突然进不了桌面内核升级顶掉驱动模块用旧内核启动重装驱动表里最后一条我要多说两句因为它是很多人用着好好的突然就崩了的元凶。Mint 的更新管理器默认可能会勾选内核更新某次你点了全部更新重启后新内核加载了但 DKMS 还没为这个新内核编译好 NVIDIA 模块于是就掉进了没有图形界面的状态。解决办法是在 GRUB 菜单里选Advanced options用上一个内核版本启动进系统后重新安装一次驱动等 DKMS 为新内核编译完成再重启。预防措施就是前面说的在更新管理器里把内核更新单独控制不要无脑全选。6.3 一些实操心得关于顺序我总结下来最省事的路径是装系统 → 全量更新并重启 → 装编译工具链 → 装驱动并重启 → 装 CUDA取消驱动选项→ 装 cuDNN → 装 Anaconda → 建环境装框架 → 装 PyCharm 并接解释器。每一步都验证一次不要一路装到底再统一检查出了问题很难定位是哪一步引入的。关于空间养成定期清理的习惯。conda 的包缓存很占地方用conda clean -a清一下能回收好几个 G。CUDA 的历史版本如果不用了就删掉/usr/local 下堆着好几个版本除了占空间没别的好处。关于记录每次装完一套环境把关键版本号记在一个文本文件里放在项目根目录。包括系统版本、内核版本、驱动版本、CUDA、cuDNN、Python、框架版本。几个月后你回来复现实验这个文件能救命。关于备份conda 环境虽然可以重建但配好的环境导出一份 yml 成本很低conda env export environment.yml以后重建直接conda env create -f environment.yml。不过要注意导出的文件里可能包含本地路径信息迁移到别的机器前检查一下。最后说个我自己的体会环境搭建这件事第一次做花一整天很正常第二次半小时第三次就变成条件反射了。真正的价值不在于省时间而在于出问题时你知道该从哪一层排查——是驱动层、运行时层、还是框架层。把这几个层次理清楚比记住具体命令重要得多。还有个小技巧如果你手头有多台机器要配一样的环境可以考虑把整个流程写成一个 shell 脚本把版本号做成变量放在开头。这样新机器上跑一遍脚本就能装好比手动一步步来靠谱得多。脚本里每一步加个回显出问题一眼就能看出卡在哪。我现在给新机器装机就是这么一个脚本走完剩下的时间都留给真正重要的模型调优。