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以后环境搞崩了直接恢复比重新配一遍省几个小时。这个习惯我坚持了好几年救了我无数次。

相关新闻

IEEE 802.3以太网标准详解:从MAC层到PHY层的技术原理与工程实践

IEEE 802.3以太网标准详解:从MAC层到PHY层的技术原理与工程实践

简介:IEEE 802.3-2022 以太网标准官方文档,面向网络工程师、协议研发人员及高校通信专业师生,用于查阅以太网从 1 Mb/s 至 400 Gb/s 的 MAC 规范、物理层接口与管理信息库定义。资源包内含 1 个 PDF 文件,压缩包约 93.77MB&#x…

2026/10/16 21:33:50 阅读更多 →
IPv6校园网升级方案:从IPv4过渡到IPv6的完整落地路径

IPv6校园网升级方案:从IPv4过渡到IPv6的完整落地路径

简介:这份《基于IPv6校园网络升级方案》是一篇针对高校老校区网络改造的毕业设计论文,面向网络工程专业学生、校园网管理员及IPv6技术学习者。文档以IPv4地址短缺为切入点,系统阐述IPv6的产生背景、128位地址结构与技术特点,并重点…

2026/10/18 4:36:26 阅读更多 →
Neo4j数据库备份与恢复实操:从环境确认到验证演练

Neo4j数据库备份与恢复实操:从环境确认到验证演练

前两天有同事来问我一件事:他们组里有个系统,底层用的图数据库是另一位同事搭的,现在那位同事已经调到别的项目组了,这个库还在正式环境里跑着。最近要做架构调整,需要先把数据完整备份出来,结果他翻了半天…

2026/10/18 3:45:03 阅读更多 →

最新新闻

园区网实训报告全流程:从VLAN规划到NAT配置

园区网实训报告全流程:从VLAN规划到NAT配置

每年实训季我都会收到一堆让人头大的报告,拓扑图贴得挺漂亮,配置命令密密麻麻占了好几页,但你随便挑一句问“为什么网关要放在核心交换机上”,对方多半答不上来。实训报告既然叫“报告”,它就不是配置命令的粘贴板。它…

2026/10/18 4:38:32 阅读更多 →
RTP.NET实战指南:从实时传输协议到C#音视频开发示例

RTP.NET实战指南:从实时传输协议到C#音视频开发示例

简介:RTP.NET是一款基于.NET框架实现的RTP实时传输库,面向需要处理音视频、VoIP及流媒体等实时数据的C#开发者。库内封装了RTPSession会话管理、参与者标识、数据包化、负载类型识别、事件驱动API与丢包恢复等关键机制,能够显著降低基于RTP构…

2026/10/18 4:38:32 阅读更多 →
CSC联培推荐信写作规范:科研叙事、证据链与可验证性

CSC联培推荐信写作规范:科研叙事、证据链与可验证性

简介:本资源是一份专为申请国家留学基金委(CSC)联合培养博士研究生项目的高校导师定制的推荐信模板,面向国内高校硕博导师、研究生院管理人员及拟申报CSC联培项目的博士生本人。模板严格对标CSC校内评审要求,完整覆盖被…

2026/10/18 4:38:32 阅读更多 →
TIPC入门实战:从零跑通Linux集群消息收发

TIPC入门实战:从零跑通Linux集群消息收发

写这篇的时候,我刚从一个集群调测现场回来,趁着热乎劲把TIPC入门阶段该知道的东西整理出来。这个系列做到第六篇,前几篇要么在讲原理,要么在讲内核实现,不少读者反馈说看得懂但上手还是懵。所以这篇定位很明确&#xf…

2026/10/18 4:38:32 阅读更多 →
重读RFC 793:TCP协议底层行为与状态机实现精要

重读RFC 793:TCP协议底层行为与状态机实现精要

1. 为什么今天还要亲手翻RFC 793?不是有现成译文吗?“RFC 793翻译(TCP的主体内容)”——看到这个标题,很多刚接触网络协议的人第一反应是:网上早就有中文版了,GitHub上搜一搜、CSDN点开就看&…

2026/10/18 4:38:32 阅读更多 →
图像相似度匹配实战:从特征向量到向量检索的完整方案

图像相似度匹配实战:从特征向量到向量检索的完整方案

我第一次被图像相似度匹配这个技术按在地上摩擦,是在一个UI自动化测试项目里。当时需求很简单:把待测页面截图和历史基线截图丢给程序,告诉我这两个页面是不是同一个页面。我第一反应是直接逐像素对比,结果被动态文案、加载动画、…

2026/10/18 4:37:32 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →