Win10+Ubuntu双系统深度学习环境配置:miniconda、CUDA与cuDNN完整指南
1. 为什么这套组合至今仍是深度学习开发的主流选择搞深度学习开发的人绕不开一个现实问题Windows的图形界面用着舒服但很多训练框架、编译工具链在Linux下才跑得顺畅。于是“Win10Ubuntu双系统”这个方案从几年前一直流行到现在不是没有道理的。它让你在一台机器上同时拥有两个世界——白天用Windows写文档、开会、摸鱼晚上重启进Ubuntu跑训练、调环境、压榨显卡。但真正让新手头疼的往往不是装系统本身而是装完之后那一堆环境配置miniconda怎么装、CUDA怎么选版本、cuDNN怎么对应、环境变量怎么配、为什么nvidia-smi能跑但torch.cuda.is_available()返回False。这些问题每一个都能卡住人半天甚至几天。这篇文章面向的是刚拿到带NVIDIA显卡的机器、准备搭建深度学习开发环境的人。不管你之前有没有Linux基础只要跟着走能把这套环境从零配到可用。我会把每个步骤背后的“为什么”讲清楚把踩过的坑提前标出来让你少走弯路。核心关键词就这几个Win10Ubuntu双系统、miniconda、CUDA、环境配置全文围绕它们展开。2. 装系统前的整体规划与关键决策2.1 双系统的分区方案怎么定装双系统第一步不是做启动盘而是想清楚磁盘怎么分。很多人一上来就动手结果要么Ubuntu空间不够用要么把Windows的数据盘误删了。我的建议是先搞清楚你机器上有几块硬盘。如果是单硬盘比如一块512G或1T的NVMe你需要从Windows的磁盘管理里压缩出一块未分配空间给Ubuntu。具体操作右键“此电脑”→“管理”→“磁盘管理”→选中C盘或其他有富余空间的分区→“压缩卷”。压缩出来的空间不要格式化保持“未分配”状态Ubuntu安装程序会自动识别。空间分配上我一般这样建议用途建议大小说明EFI引导分区512MB如果Windows已有EFI分区Ubuntu会复用不用新建交换空间swap16-32GB内存32G以上可以少给甚至不给但保险起见给16G根分区 /100-150GB系统和软件都装这里conda环境也默认在这家目录 /home剩余全部数据集、代码、模型权重都放这重装系统不丢如果是双硬盘比如一块SSD装Windows一块SSD或HDD装Ubuntu那就更简单了——直接把第二块盘整个给Ubuntu分区方案同上但不用动Windows的盘。注意压缩卷之前一定要备份重要数据。虽然正常操作不会丢数据但磁盘操作有风险养成备份习惯。2.2 启动盘制作与BIOS设置要点启动盘制作工具用Rufus或者balenaEtcher都行Ubuntu镜像去官网下LTS版本比如22.04或24.04。这里有个细节Rufus写入时选择GPT分区方案UEFI目标系统因为现在的机器基本都是UEFI启动选MBRBIOS会出问题。BIOS设置里需要关注几个选项Secure Boot建议先关闭。虽然Ubuntu支持Secure Boot但后续装NVIDIA驱动时可能因为签名问题导致驱动加载失败关掉省事。SATA模式确认是AHCI而不是RAID。有些品牌机默认RAIDUbuntu安装程序认不到硬盘。启动顺序把U盘调到第一位装完系统后改回硬盘优先。这些设置因主板品牌而异但关键词就这几个进BIOS后找对应的菜单即可。2.3 为什么选miniconda而不是anacondaAnaconda自带几百个包装完几个G很多你根本用不到。Miniconda只包含conda和Python干净轻量需要什么自己装。对于深度学习环境来说我们本来就要手动装PyTorch或TensorFlowanaconda预装的那些科学计算包反而可能造成版本冲突。另一个原因是conda环境隔离做得比pipvenv更彻底。CUDA toolkit、cuDNN这些非Python的二进制依赖conda也能管理而venv只管Python包。这意味着你可以在不同conda环境里用不同版本的CUDA互不干扰——这对需要复现不同论文代码的人来说太重要了。3. Ubuntu系统安装与基础配置实操3.1 安装过程的关键选择从U盘启动后选择“Install Ubuntu”。语言选英语就行中文路径后续可能带来编码问题。键盘布局默认English (US)。到了“Installation type”这一步选“Something else”手动分区。这就是前面规划好的分区方案落地的时候找到你压缩出来的“free space”点“”新建分区EFI分区如果已有Windows的EFI分区通常几百MB类型是efi不用动它Ubuntu会自动把引导写进去。如果没有新建一个512MB的EFI分区swap分区大小填1638416G类型选“swap area”根分区挂载点选“/”大小填100000约100G类型ext4home分区挂载点选“/home”剩余全部空间类型ext4“Device for boot loader installation”选Windows EFI分区所在的那块硬盘通常是/dev/nvme0n1或/dev/sda不要选具体分区。安装完成后重启应该能看到GRUB菜单让你选进Ubuntu还是Windows。如果直接进了Windows没看到GRUB说明引导没写对需要进BIOS调整启动顺序把“ubuntu”调到Windows Boot Manager前面。3.2 换国内源与基础工具安装装完系统第一件事是换源不然apt安装慢得让人崩溃。打开“Software Updates”在“Ubuntu Software”标签页的“Download from”里选“Other”然后选一个国内的镜像站。或者直接编辑/etc/apt/sources.list把里面的archive.ubuntu.com和security.ubuntu.com替换成国内镜像地址。换完源执行sudo apt update sudo apt upgrade -y然后装一些基础工具sudo apt install -y build-essential git wget curl vim htop net-toolsbuild-essential包含gcc、g、make后面装NVIDIA驱动和编译某些Python包时需要。git和wget不用多说htop看系统资源net-tools提供ifconfig等命令。3.3 禁用nouveau驱动Nouveau是Ubuntu自带的NVIDIA开源驱动它和官方驱动冲突装CUDA之前必须禁用。操作如下sudo vim /etc/modprobe.d/blacklist-nouveau.conf写入blacklist nouveau options nouveau modeset0然后执行sudo update-initramfs -u sudo reboot重启后验证是否禁用成功lsmod | grep nouveau如果没有任何输出说明禁用成功。这一步不做的话后面装NVIDIA驱动会报“nouveau正在使用”的错误。4. NVIDIA驱动与CUDA工具链配置4.1 驱动版本与CUDA版本的对应关系这是最容易出错的地方。很多人以为装最新驱动就万事大吉结果发现PyTorch要求的CUDA版本和驱动不匹配。核心规则是驱动版本决定了你最高能跑哪个CUDA版本但CUDA版本可以向下兼容。举个例子驱动版本535支持CUDA 12.2那么你可以跑CUDA 12.2、12.1、12.0、11.8等但不能跑CUDA 12.3。所以策略是先确定你要用的深度学习框架需要哪个CUDA版本然后反推需要的驱动版本。截至我写这篇文章时PyTorch 2.x稳定支持CUDA 11.8和12.1TensorFlow 2.15支持CUDA 12.2。如果你没有特殊需求CUDA 11.8是兼容性最好的选择因为很多老代码和老版本框架都基于它。查看驱动支持的最高CUDA版本nvidia-smi右上角会显示“CUDA Version: 12.2”之类的信息这就是当前驱动支持的最高版本。4.2 驱动安装的两种方式及选择方式一apt安装sudo apt install nvidia-driver-535简单但版本可能不是最新的而且有时候会连带装一堆依赖。方式二官方runfile安装去NVIDIA官网下载对应显卡的驱动runfile然后sudo sh NVIDIA-Linux-x86_64-535.xx.xx.run这种方式可控性强但需要手动处理一些依赖和签名问题。我一般推荐apt方式省事。装完重启执行nvidia-smi如果能看到显卡信息表格说明驱动装好了。注意如果nvidia-smi报“Failed to initialize NVML: Driver/library version mismatch”说明驱动版本和内核模块不匹配重启一般能解决。如果重启还不行可能需要重新安装驱动。4.3 CUDA Toolkit安装与环境变量配置去NVIDIA官网下载CUDA Toolkit。选择runfile(local)方式因为可以自定义安装路径不污染系统目录。下载后执行sudo sh cuda_11.8.0_520.61.05_linux.run安装过程中取消勾选Driver因为已经装过了保留CUDA Toolkit安装路径默认/usr/local/cuda-11.8装完后配置环境变量编辑~/.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版本信息说明配置成功。4.4 cuDNN的安装细节cuDNN是NVIDIA的深度神经网络加速库PyTorch和TensorFlow都依赖它。下载需要注册NVIDIA开发者账号选对应CUDA版本的cuDNN。下载下来是个tar包解压后把文件复制到CUDA目录tar -xzvf cudnn-linux-x86_64-8.9.x.x_cuda11-archive.tar.xz sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include sudo cp 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 2提示cuDNN版本必须和CUDA版本严格对应。CUDA 11.8要用cuDNN 8.9.x for CUDA 11.x下错了会导致框架加载失败。5. Miniconda环境搭建与深度学习框架安装5.1 Miniconda安装与初始化去清华镜像站下载Miniconda安装脚本比官网快得多。下载后bash Miniconda3-latest-Linux-x86_64.sh一路回车最后问是否初始化conda时选yes。然后source ~/.bashrc conda --version配置conda国内源编辑~/.condarcchannels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud这样conda安装包也会走国内源。5.2 创建独立的深度学习环境不要用base环境跑代码养成好习惯conda create -n dl python3.10 conda activate dlPython版本选3.10兼容性最好。3.11和3.12有些包还没适配。然后装PyTorch。去PyTorch官网找到对应CUDA 11.8的命令pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118注意这里用pip而不是conda因为pip的PyTorch包自带CUDA运行时不需要系统CUDA也能跑。但系统CUDA仍然需要因为某些自定义算子编译时会用到。5.3 验证环境是否配置成功这是最关键的一步。进入Pythonimport torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果torch.cuda.is_available()返回True恭喜你环境配好了。如果返回False按下面的排查表逐项检查。现象可能原因解决方法nvidia-smi正常但torch.cuda.is_available()为FalsePyTorch装的是CPU版本重新用cu118的index-url安装nvidia-smi报错驱动没装好或nouveau没禁用检查驱动安装和nouveau状态torch.cuda.is_available()为False且无报错CUDA版本和PyTorch不匹配确认PyTorch版本对应的CUDA版本报libcudart.so找不到环境变量没配好检查LD_LIBRARY_PATH6. 常见问题排查与避坑经验6.1 双系统引导丢失的修复Windows更新有时会覆盖GRUB引导导致开机直接进Windows。修复方法用Ubuntu启动盘进入Live模式然后sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair选“Recommended repair”它会自动重建GRUB。或者手动sudo mount /dev/nvme0n1p2 /mnt # 根分区 sudo mount /dev/nvme0n1p1 /mnt/boot/efi # EFI分区 sudo grub-install --root-directory/mnt /dev/nvme0n1 sudo update-grub6.2 显卡驱动冲突导致的黑屏装完NVIDIA驱动重启后黑屏通常是因为驱动和内核不兼容或者nouveau没禁干净。解决方法开机时在GRUB菜单选“Advanced options”进恢复模式然后卸载驱动sudo apt purge nvidia-* sudo apt autoremove重启后重新按正确步骤安装。6.3 conda环境与系统CUDA的版本冲突有时候系统CUDA是11.8但conda环境里装了个cudatoolkit 12.1导致编译时报错。这是因为conda的cudatoolkit会覆盖系统CUDA的库路径。解决办法要么统一版本要么在conda环境里也装对应版本的cudatoolkitconda install cudatoolkit11.8这样conda环境内的CUDA版本和系统一致不会冲突。6.4 磁盘空间不足的清理策略深度学习开发很容易把磁盘塞满——conda环境、pip缓存、数据集、模型权重。定期清理conda clean --all # 清理conda缓存 pip cache purge # 清理pip缓存数据集和模型权重放/home分区不要放根分区。如果根分区满了可以用du -sh /*逐层排查大文件。7. 日常使用中的效率技巧7.1 用alias简化常用命令在~/.bashrc里加几个aliasalias actconda activate alias deactconda deactivate alias nvnvidia-smi alias clsclear这样每次激活环境不用打全称看显卡状态就敲nv。7.2 环境导出与迁移配好的环境要导出成yml文件方便在其他机器复现conda env export environment.yml在新机器上conda env create -f environment.yml但注意yml里会包含本地路径和pip安装的包跨平台时可能需要手动调整。7.3 多版本CUDA共存的管理如果你需要同时用CUDA 11.8和12.1可以都装在/usr/local/下然后用软链接切换sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda环境变量里用/usr/local/cuda切换时只改软链接不用改环境变量。7.4 监控GPU使用情况训练时用watch -n 1 nvidia-smi实时看显卡利用率、显存占用、温度。如果显存快满了减小batch size如果GPU利用率低可能是数据加载成了瓶颈增加num_workers。我在实际使用中发现这套环境配好之后最容易被忽略的是磁盘I/O。数据集放在机械硬盘上GPU利用率可能只有30%不到换成SSD后直接拉满。所以如果条件允许数据集和代码都放SSD模型checkpoint可以放机械盘。最后再分享一个小技巧装完系统后做一个完整的系统备份用Timeshift或者dd以后环境搞崩了直接恢复比重新配一遍省几个小时。这个习惯我坚持了好几年救了我无数次。