Ubuntu 24.04深度学习环境搭建:CUDA、驱动与PyTorch全流程 简介这份PDF文档面向需要在Windows 11上搭建Ubuntu 24.04双系统的开发者与深度学习初学者重点解决系统安装后Nvidia驱动、CUDA、cuDNN及Python开发环境配置繁琐、易踩坑的问题。内容覆盖Ubuntu 24.04安装、Nvidia驱动部署、CUDA与cuDNN配置、Anaconda安装、虚拟环境创建以及VS Code和PyCharm专业版的环境搭建并附有新手参考链接与快速安装路径兼顾零基础与有经验读者。资源包共1个PDF文件大小约1.74MB便于离线查阅与按步骤对照操作。目前已有17630人学习下载说明该流程经过较多读者验证。读者可据此获得一套从系统到深度学习工具链的完整配置思路减少驱动版本不匹配、环境变量遗漏等常见问题快速完成开发环境搭建。1. 从 Windows 11 到 Ubuntu 24.04一套能跑通 CUDA 的深度学习环境搭建路线如果你刚在 Windows 11 上腾出一块空闲分区准备装 Ubuntu 24.04 做深度学习大概率会在某个环节卡住要么装完系统 WiFi 直接消失要么nvidia-smi报错要么 CUDA 装完nvcc -V找不到命令。这套流程我在几台机器上反复走过从 Rufus 做启动盘到 PyTorch 认出 GPU中间踩过的坑基本都集中在驱动版本匹配、Secure Boot 拦截和源配置这三处。本文按 Ubuntu 24.04 Nvidia 驱动 CUDA cuDNN Anaconda VS Code/PyCharm 的顺序拆一遍每一步给出可复现的命令和参数说明适合已经装过一两次系统、想快速把环境跑起来的同学。新手建议先看一遍再动手老手可以直接跳到驱动和 CUDA 版本匹配那节。2. 装 Ubuntu 24.04 与 Windows 11 共存分区、启动盘和 BIOS 三个关键点2.1 分区规划与启动盘制作Windows 11 下腾空间我一般用系统自带的磁盘管理压缩卷留出至少 100GB 给 Ubuntu。注意 Windows 的快速启动和 BitLocker 要先关掉否则安装程序可能看不到硬盘。启动盘用 Rufus 写入 Ubuntu 24.04 的 ISO分区类型选 GPT目标系统选 UEFI文件系统保持 FAT32。如果 ISO 超过 4GB 且 Rufus 提示需要 NTFS直接选它推荐的方案即可Ubuntu 24.04 的安装器已经能识别。# 在 Windows 上确认分区状态管理员 PowerShell Get-Disk Get-Partition -DiskNumber 0 # 关闭快速启动管理员 CMD powercfg /h off # 查看 BitLocker 状态如已启用先暂停保护 manage-bde -statusGet-Disk用来确认磁盘编号和分区表类型必须是 GPT 才能走 UEFI 启动。powercfg /h off关掉休眠文件避免 Windows 占用分区导致 Ubuntu 安装器无法调整。manage-bde -status检查加密状态如果显示 Protection On先在控制面板暂停 BitLocker装完 Ubuntu 再恢复否则安装程序读不到分区。2.2 BIOS 设置与安装引导重启按 F2 或 F12 进 BIOS确认三件事Secure Boot 先关掉装完驱动再开SATA 模式设为 AHCI启动顺序把 U 盘排第一。进入 Ubuntu 安装界面后分区那一步选「其他选项」手动分我一般这样切挂载点大小类型说明/boot/efi512MBEFI 系统分区和 Windows 共用已有的 EFI 分区不要格式化/60GBext4根分区/home剩余空间ext4用户数据swap内存大小swap休眠用内存大于 32GB 可省略安装过程中有一个选项叫「安装第三方图形驱动」这里不要勾。原因很简单安装器自带的 Nvidia 驱动版本往往偏旧装完再手动换版本会残留配置后面nvidia-smi报错很难排查。先用开源驱动把系统跑起来进桌面后再处理显卡驱动。2.3 首次启动后的基础配置装完重启先换国内源再更新否则 apt 拉包能等到怀疑人生。Ubuntu 24.04 的源配置文件在/etc/apt/sources.list.d/ubuntu.sources格式和 22.04 的sources.list不一样别照抄旧教程。# 备份原配置 sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak # 编辑源替换为国内镜像以清华源为例 sudo nano /etc/apt/sources.list.d/ubuntu.sources # 更新索引并升级 sudo apt update sudo apt upgrade -y # 安装编译工具和内核头文件后面装驱动要用 sudo apt install -y build-essential linux-headers-$(uname -r) dkmsubuntu.sources是 deb822 格式把URIs字段改成镜像地址即可不要动Suites和Components。linux-headers-$(uname -r)必须和当前内核版本严格对应DKMS 编译 Nvidia 内核模块时依赖它缺了会直接编译失败。dkms负责在内核升级后自动重编驱动模块不装的话每次内核更新显卡驱动都会掉。3. Nvidia 驱动安装版本匹配、Secure Boot 签名与 WiFi 消失的排查3.1 驱动版本选择与安装方式对比Nvidia 驱动有三条安装路径Ubuntu 软件与更新里的附加驱动、apt 源里的nvidia-driver-xxx、官网 runfile。我优先推荐前两种runfile 容易和系统包管理冲突。Ubuntu 24.04 的附加驱动里通常能看到 535、550、555 几个版本选哪个取决于你要装的 CUDA 版本。驱动版本支持的最高 CUDA适用场景53512.2稳定PyTorch 2.1 官方推荐55012.4较新支持 40 系卡55512.5最新部分新卡需要先用ubuntu-drivers devices看推荐版本再决定装哪个。如果显卡是 40 系驱动别低于 550否则 CUDA 12.4 以上跑不起来。# 查看显卡型号和推荐驱动 ubuntu-drivers devices # 查看 apt 源里可用的驱动版本 apt search nvidia-driver | grep -E ^nvidia-driver-[0-9] # 安装指定版本以 535 为例 sudo apt install -y nvidia-driver-535 # 重启 sudo rebootubuntu-drivers devices会输出recommended标记但推荐版本不一定适合你的 CUDA 需求要结合上表判断。apt install nvidia-driver-535会自动处理依赖和 DKMS 编译比 runfile 干净。装完必须重启驱动模块才会加载。3.2 Secure Boot 与驱动签名如果 BIOS 里 Secure Boot 是开着的Nvidia 内核模块没签名就加载不了表现是nvidia-smi报NVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver。两个选择关掉 Secure Boot或者给模块签名。我一般装系统阶段先关环境跑通后再开并配 MOK 签名。# 检查 Secure Boot 状态 mokutil --sb-state # 如果显示 enabled查看模块是否加载 lsmod | grep nvidia # 查看内核日志里的签名错误 sudo dmesg | grep -i module verification failedmokutil --sb-state输出SecureBoot enabled就说明签名是必须的。lsmod | grep nvidia没有任何输出基本可以确认模块没加载。dmesg里如果有module verification failed: signature and/or required key missing就是签名问题要么关 Secure Boot要么走mokutil --import导入密钥。3.3 WiFi 消失与驱动冲突处理装完 Nvidia 驱动后 WiFi 图标不见了这个坑我遇到过两次。原因是驱动安装过程重新编译了内核模块某些无线网卡的iwlwifi模块被覆盖或版本错位。先看dmesg里无线网卡有没有报错再决定是重装内核模块还是回退驱动。# 查看无线网卡状态 lspci | grep -i network rfkill list # 查看内核日志中的无线相关错误 sudo dmesg | grep -i iwlwifi # 重装内核模块以 iwlwifi 为例 sudo apt install --reinstall linux-modules-extra-$(uname -r) sudo modprobe -r iwlwifi sudo modprobe iwlwifilspci确认网卡型号rfkill list看是不是被软屏蔽。dmesg | grep iwlwifi如果出现firmware not found或Microcode SW error重装linux-modules-extra通常能解决。modprobe -r卸载再modprobe加载不用重启就能验证。如果还不行用sudo apt install --reinstall nvidia-driver-535回退驱动版本有时候是驱动和内核版本不兼容导致的连锁反应。4. CUDA 与 cuDNN 安装runfile 参数、环境变量和验证脚本4.1 CUDA 版本选择与 runfile 安装CUDA 版本必须和驱动匹配驱动 535 最高支持 CUDA 12.2装 12.3 以上会报CUDA driver version is insufficient。去官网 archive 页面选对应版本安装方式选 runfile不要选 debdeb 会连带升级驱动容易把已经配好的驱动搞乱。# 下载 CUDA 12.2 runfile wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run # 赋予执行权限 chmod x cuda_12.2.0_535.54.03_linux.run # 运行安装关键参数不装驱动 sudo sh cuda_12.2.0_535.54.03_linux.run --toolkit --silent --override --no-opengl-libs--toolkit只装 CUDA 工具链不碰驱动。--silent静默安装省去交互。--override跳过编译器版本检查Ubuntu 24.04 的 GCC 版本较新不加这个可能被拦。--no-opengl-libs不装 OpenGL 库避免和系统已有的 Mesa 冲突。安装完成后 CUDA 默认在/usr/local/cuda-12.2。4.2 环境变量配置与 nvcc 验证环境变量写进~/.bashrc注意 PATH 和 LD_LIBRARY_PATH 的写法用${VAR::${VAR}}这种形式可以避免重复追加。# 编辑 bashrc nano ~/.bashrc # 在文件末尾添加 export PATH/usr/local/cuda-12.2/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH::${LD_LIBRARY_PATH}} # 生效 source ~/.bashrc # 验证 nvcc -V${PATH::${PATH}}的意思是如果 PATH 已定义就在前面加冒号再拼接避免出现::这种空路径。nvcc -V输出 CUDA 版本号就说明工具链就位。如果提示command not found先echo $PATH看路径有没有生效再检查~/.bashrc是不是写到了错误的位置。4.3 cuDNN 安装与 bandwidthTest 验证cuDNN 从 8.x 开始用本地 deb 包安装下载对应 CUDA 版本的包安装后把 keyring 拷到系统目录再 apt 安装。# 安装本地 deb 包 sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.6.50_1.0-1_amd64.deb # 拷贝 keyring sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.6.50/cudnn-local-5E60450C-keyring.gpg /usr/share/keyrings/ # 更新并安装 sudo apt update sudo apt install -y libcudnn8 libcudnn8-dev libcudnn8-samples # 验证 cd /usr/local/cuda-12.2/extras/demo_suite/ ./bandwidthTest ./deviceQuerydpkg -i安装的是仓库配置包不是 cuDNN 本体装完必须apt update再装libcudnn8。bandwidthTest输出Result PASS说明 CUDA 和 cuDNN 的通信正常。deviceQuery会列出显卡型号、显存、计算能力Result PASS表示设备查询通过。如果bandwidthTest报CUDA error: no CUDA-capable device is detected回到驱动那步检查nvidia-smi是否正常。5. Anaconda、虚拟环境与 IDE 配置从 conda 命令到 PyTorch 认卡5.1 Anaconda 安装与 conda 基础命令Anaconda 安装包从官方 archive 拉选 Linux x86_64 版本。安装时注意最后一步问是否conda init选 yes否则每次要手动 source。# 下载并安装 wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh bash Anaconda3-2024.02-1-Linux-x86_64.sh # 安装完成后生效 source ~/.bashrc # 验证 conda --version conda info --envsconda init会往~/.bashrc写一段初始化脚本把 conda 的 base 环境加到 PATH。conda info --envs列出所有环境带*的是当前激活的。如果conda命令找不到手动执行~/anaconda3/bin/conda init bash再 source。5.2 创建虚拟环境与 PyTorch 安装虚拟环境隔离依赖避免不同项目的 CUDA 版本打架。PyTorch 安装用官方 index指定 cu121 版本。# 创建环境 conda create --name pytorch python3.10 -y # 激活 conda activate pytorch # 安装 PyTorchCUDA 12.1 版本 pip install torch2.1.0 torchvision0.16.0 torchaudio2.1.0 --index-url https://download.pytorch.org/whl/cu121 # 验证 GPU python -c import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())--index-url指向 PyTorch 官方 wheel 源cu121 对应 CUDA 12.1和前面装的 CUDA 12.2 兼容。torch.cuda.is_available()输出True说明 PyTorch 认到了 GPU。如果输出False先确认nvidia-smi正常再检查 PyTorch 版本和 CUDA 版本是否匹配。5.3 VS Code 与 Jupyter 配置VS Code 用 deb 包安装装完在扩展市场搜 Python 和 Jupyter。Jupyter 需要把虚拟环境注册成 kernel否则 notebook 里选不到。# 安装 VS Code sudo dpkg -i code_1.75.0-1675266613_amd64.deb # 安装 Jupyter 并注册 kernel conda activate pytorch pip install ipykernel ipython python -m ipykernel install --user --name pytorch --display-name Python (pytorch) # 启动 Jupyter jupyter notebookipykernel install把当前虚拟环境注册到 Jupyter 的 kernel 列表--name是内部标识--display-name是 notebook 里显示的名字。VS Code 里按CtrlShiftP输入Python: Select Interpreter选pytorch环境的 python 路径。PyCharm 专业版在 Ubuntu Software 里直接搜安装配置解释器时指向~/anaconda3/envs/pytorch/bin/python。6. 避坑与排查驱动、CUDA、conda 三类高频翻车记录6.1 nvidia-smi 报错「couldnt communicate with the NVIDIA driver」现象装完驱动重启终端输入nvidia-smi提示无法和驱动通信。原因通常是 Secure Boot 拦截了未签名的内核模块或者 DKMS 编译失败。解决先mokutil --sb-state确认 Secure Boot 状态开着就进 BIOS 关掉再dkms status看 nvidia 模块状态如果显示build: failed执行sudo dkms autoinstall重编缺头文件就补装linux-headers-$(uname -r)。6.2 nvcc -V 找不到命令现象CUDA 装完nvcc -V提示 command not found。原因一般是环境变量没写对或者写进了错误的 shell 配置文件。解决echo $PATH看有没有/usr/local/cuda-12.2/bin没有就检查~/.bashrc里的 export 语句确认没有拼写错误然后source ~/.bashrc。如果用的是 zsh要写到~/.zshrc。6.3 PyTorch 的 cuda.is_available() 返回 False现象nvidia-smi正常nvcc -V正常但 PyTorch 认不到 GPU。原因通常是 PyTorch 装成了 CPU 版本或者 CUDA 版本和 PyTorch 编译版本不匹配。解决pip list | grep torch看版本号如果带cpu后缀就是装错了卸载重装时加--index-url https://download.pytorch.org/whl/cu121。另外确认torch.version.cuda输出的版本和系统 CUDA 主版本一致。6.4 conda 创建环境时 Solving environment 卡住现象conda create卡在 Solving environment 几分钟不动。原因是 conda 默认源在国外元数据拉取慢。解决换国内源或者用mamba替代 conda。换源命令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 yes6.5 装完驱动 WiFi 图标消失现象Nvidia 驱动装完重启WiFi 图标不见了rfkill list显示无线被 hard block。原因是驱动安装过程重编内核模块iwlwifi固件加载失败。解决sudo apt install --reinstall linux-modules-extra-$(uname -r)重装内核模块再sudo modprobe -r iwlwifi sudo modprobe iwlwifi重新加载。如果还不行sudo apt install --reinstall nvidia-driver-535回退驱动版本重启后再试。7. 版本锁定与快照让这套环境半年后还能一键还原环境搭好只是开始真正省心的是把它固化下来。我现在的习惯是装完所有东西后做两件事导出 conda 环境清单用 Timeshift 给系统盘打快照。conda 清单记录 Python 包版本Timeshift 记录系统级配置两者配合基本能覆盖 90% 的还原场景。# 导出 conda 环境 conda activate pytorch conda env export pytorch_env.yaml # 恢复时用 conda env create -f pytorch_env.yaml # 安装 Timeshift sudo apt install -y timeshift # 命令行创建快照需要先配置好快照存储位置 sudo timeshift --create --comments cuda-env-ready --tags Dconda env export会把所有包和版本号写进 yaml包括 pip 安装的包。恢复时conda env create -f按清单重建版本完全一致。Timeshift 的--tags D表示按需快照--comments写备注方便识别。快照存到独立分区或外置硬盘别放系统盘否则系统挂了快照也一起没。还有一个细节Nvidia 驱动和 CUDA 的版本组合建议记在备忘录里。我遇到过驱动自动更新后 CUDA 跑不起来的情况apt-mark hold可以锁定驱动版本不被升级# 锁定驱动版本 sudo apt-mark hold nvidia-driver-535 # 查看锁定状态 apt-mark showhold # 需要升级时解锁 sudo apt-mark unhold nvidia-driver-535apt-mark hold让 apt 在upgrade时跳过指定包避免驱动被意外升级导致 CUDA 不兼容。apt-mark showhold列出所有锁定的包定期检查一下别锁了忘了。从那以后我每次装完环境都先apt-mark hold驱动再导出 conda 清单最后打一个 Timeshift 快照三件事做完才敢开始跑训练。希望帮到你。本文还有配套的精品资源点击获取