资讯动态

Win10+Ubuntu双系统+miniconda+CUDA深度学习环境配置全攻略

发布时间:2026/10/16 22:10:38 来源:尧图企业网站定制
1. 为什么这套组合至今仍是深度学习开发的主流选择搞深度学习开发的人绕不开一个经典问题到底用什么环境。有人用纯Windows有人用纯Linux还有人用云服务器。我前后折腾过好几套方案最后发现Win10Ubuntu双系统minicondaCUDA这个组合在很长一段时间里都是最稳妥、最灵活的选择。原因很简单Windows负责日常办公、文档、娱乐Ubuntu负责跑训练、编译底层库、管理GPU驱动两边互不干扰各司其职。你可能会问现在WSL2不是挺方便的吗确实WSL2在易用性上进步很大但一旦涉及到GPU直通、驱动版本匹配、多卡训练、底层CUDA库编译这些场景原生Ubuntu的稳定性和性能还是更胜一筹。尤其是当你需要长时间跑训练任务、需要精确控制显卡驱动版本、需要用到某些只支持Linux的库时双系统的优势就体现出来了。这套方案适合谁适合有一台带NVIDIA显卡的台式机或笔记本、需要做深度学习训练或推理、同时又不愿意完全放弃Windows生态的开发者。不管你是刚入门的新手还是已经跑过几个项目的老手这套环境配置的思路都值得参考。接下来我会把整个流程拆开从分区、装系统、配驱动、装miniconda、配CUDA一直到踩坑排查全部讲清楚。2. 装系统之前的准备工作分区方案与启动模式的选择2.1 磁盘分区到底怎么分才合理分区这件事很多人一开始不在意装到一半发现空间不够或者分区表乱了后悔都来不及。我的建议是如果你是一块大容量固态硬盘比如1TB或2TB直接给Ubuntu分出一块独立的空间不要和Windows共用分区。具体分多少取决于你的训练数据量和模型规模。一般来说给Ubuntu至少留200GB如果要做大规模图像训练或者需要存大量数据集建议留500GB以上。分区的时候有个细节容易被忽略Windows的快速启动和BitLocker加密。如果你开了BitLocker装Ubuntu之前一定要先解密或者暂停加密否则安装程序可能识别不到硬盘。快速启动也要在BIOS里关掉不然Ubuntu可能无法正常挂载Windows分区。具体操作步骤在Windows下按WinX选择“磁盘管理”找到你要压缩的分区右键选择“压缩卷”输入你要分出去的空间大小单位是MB比如200GB就输入204800。压缩完成后会出现一块“未分配”空间不要格式化留着给Ubuntu安装程序用。重启进入BIOS确认启动模式是UEFI现在新机器基本都是UEFI关闭Secure Boot有些显卡驱动在Secure Boot下会出问题关闭快速启动。注意如果你的机器是双硬盘一块NVMe装Windows一块SATA装Ubuntu那更简单直接把整块第二硬盘留给Ubuntu就行不用压缩分区。2.2 制作启动盘与安装介质的挑选启动盘制作工具我用过好几个最后长期用的是Rufus。原因很简单速度快、兼容性好、支持UEFI和Legacy两种模式。Ubuntu镜像建议选LTS版本比如20.04或者22.04这两个版本长期支持社区资料多遇到问题容易搜到答案。制作启动盘的时候分区类型选GPT目标系统选UEFI文件系统用FAT32。如果你用的是32GB以上的U盘Rufus会提示你格式化为NTFS这时候不用管继续用FAT32就行Ubuntu镜像里的文件不会超过4GB。安装的时候有个关键选择“安装类型”页面一定要选“其他选项”不要选“与Windows共存”。选“其他选项”才能手动指定分区把Ubuntu装到你之前留出的那块未分配空间里。具体分区方案EFI系统分区如果你Windows已经有一个EFI分区了直接复用不用新建。如果没有新建一个512MB的EFI分区。交换空间swap如果你的内存大于等于32GB可以不分swap或者只分8GB意思一下。如果内存小于32GB建议分和内存等大的swap比如16GB内存就分16GB swap。根分区/剩下的空间全给根分区文件系统选ext4。安装完成后重启你会看到GRUB引导菜单默认会进入Ubuntu也可以选择进入Windows。如果默认进了Windows而不是Ubuntu说明启动顺序不对进BIOS调一下就行。3. 显卡驱动与CUDA的版本匹配逻辑3.1 为什么不能随便装最新驱动很多人装完Ubuntu第一件事就是apt upgrade然后随便装个最新显卡驱动结果发现CUDA跑不起来或者PyTorch识别不到GPU。这个问题的根源在于显卡驱动版本、CUDA版本、深度学习框架版本三者之间有一个严格的对应关系。简单来说显卡驱动是底层它决定了你最高能支持到哪个CUDA版本。比如驱动版本470系列最高支持CUDA 11.4驱动版本515系列最高支持CUDA 11.7。而PyTorch、TensorFlow这些框架在编译时又绑定了特定的CUDA版本。如果你装的CUDA版本高于框架支持的版本框架就用不了GPU。所以正确的顺序是先确定你要用什么框架的什么版本然后查这个框架支持哪个CUDA版本再查这个CUDA版本需要哪个最低驱动版本最后装对应的驱动。3.2 驱动安装的两种方式与选择建议Ubuntu下装NVIDIA驱动有两种主流方式一种是系统自带的“附加驱动”工具一种是手动下载.run文件安装。我两种都用过最后推荐用系统自带的附加驱动工具原因是简单、不容易出错、升级内核后不容易掉驱动。具体操作打开“软件和更新”切换到“附加驱动”标签页。系统会自动检测可用的驱动版本一般会列出好几个从470到525都有。选择一个和你CUDA版本匹配的驱动点击“应用更改”等待安装完成重启。如果你需要特定版本的驱动附加驱动里没有那就只能手动安装。手动安装的步骤稍微麻烦一点# 先禁用nouveau驱动 sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo update-initramfs -u # 重启后进入命令行模式CtrlAltF3关闭图形界面 sudo systemctl stop gdm # 给.run文件加执行权限并安装 chmod x NVIDIA-Linux-x86_64-xxx.xx.run sudo ./NVIDIA-Linux-x86_64-xxx.xx.run安装过程中会问你几个问题比如是否安装32位兼容库、是否更新X配置一般选“是”就行。安装完成后nvidia-smi能正常输出就说明驱动装好了。提示手动安装驱动后每次系统内核升级都可能导致驱动失效需要重新安装。所以如果你不是特别需要某个特定版本优先用附加驱动。3.3 CUDA Toolkit与cuDNN的安装细节CUDA Toolkit的安装方式也有几种runfile、deb包、conda安装。我推荐用conda安装CUDA Toolkit原因是隔离性好不会污染系统环境而且切换版本方便。比如你要用PyTorch 1.12它需要CUDA 11.3你直接conda install cudatoolkit11.3就行不用去NVIDIA官网下载几个GB的安装包。但有些场景下conda安装的CUDA不全比如你需要用nvcc编译自定义算子那就得装完整的CUDA Toolkit。这时候建议用runfile方式安装安装时取消勾选驱动因为你已经装过驱动了只装CUDA Toolkit本身。cuDNN的安装更简单去NVIDIA官网下载对应CUDA版本的cuDNN压缩包解压后把文件复制到CUDA安装目录就行tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz sudo cp cuda/include/* /usr/local/cuda-11.3/include/ sudo cp cuda/lib64/* /usr/local/cuda-11.3/lib64/ sudo chmod ar /usr/local/cuda-11.3/include/cudnn*.h sudo chmod ar /usr/local/cuda-11.3/lib64/libcudnn*最后配置环境变量在~/.bashrc里加上export PATH/usr/local/cuda-11.3/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda-11.3/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc用nvcc -V验证一下版本。4. miniconda的环境隔离与包管理策略4.1 为什么选miniconda而不是anacondaanaconda和miniconda的区别就一个anaconda预装了几百个包miniconda只装了conda和python。我强烈建议用miniconda原因是anaconda预装的包很多你根本用不到而且会拖慢conda的解析速度。miniconda干净、轻量你需要什么就装什么环境更可控。安装miniconda很简单去官网下载对应版本的安装脚本然后bash Miniconda3-latest-Linux-x86_64.sh # 一路回车最后问你是否初始化conda选yes source ~/.bashrc安装完成后你的终端提示符前面会出现(base)表示当前在base环境。不建议在base环境里装任何东西base环境只用来管理其他环境。4.2 环境创建与CUDA版本绑定的实操创建一个新环境的命令是conda create -n myenv python3.8 conda activate myenv这里有个关键点python版本的选择要和你的框架版本匹配。比如PyTorch 1.12支持python 3.7到3.10TensorFlow 2.10支持python 3.7到3.10。如果你不确定就选3.8这个版本兼容性最好。创建环境后装PyTorch的时候一定要去官网查对应的安装命令。比如你要装PyTorch 1.12 CUDA 11.3命令是conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -c pytorch注意这里的cudatoolkit11.3是conda自己管理的CUDA运行时和你系统里装的CUDA Toolkit是两回事。conda装的cudatoolkit只在这个环境里生效不会影响其他环境。这就是conda环境隔离的好处你可以在一个环境里用CUDA 11.3另一个环境里用CUDA 11.7互不干扰。4.3 环境导出与迁移的实用技巧当你配好一个环境后最好把环境导出成yml文件方便以后复现或者迁移到其他机器conda env export environment.yml但这个命令导出的yml文件里包含了所有依赖的精确版本有时候换一台机器就装不上了。更实用的做法是手动写一个精简版的ymlname: myenv channels: - pytorch - defaults dependencies: - python3.8 - pytorch1.12.1 - torchvision0.13.1 - cudatoolkit11.3 - numpy - pandas - matplotlib这样只指定主要包的版本其他依赖让conda自己解析兼容性更好。注意conda环境多了之后磁盘占用会很大。定期用conda clean -a清理缓存删除不用的环境用conda env remove -n envname。5. 从零跑通一个GPU训练Demo的验证流程5.1 验证驱动、CUDA、框架三层是否打通环境配好后不要急着跑大项目先跑一个最小验证脚本确认驱动、CUDA、框架三层都通了。这个脚本我每次配新环境都会跑一遍import torch print(PyTorch version:, torch.__version__) print(CUDA available:, torch.cuda.is_available()) print(CUDA version:, torch.version.cuda) print(GPU count:, torch.cuda.device_count()) print(GPU name:, torch.cuda.get_device_name(0)) # 跑一个简单的矩阵运算 x torch.randn(1000, 1000).cuda() y torch.randn(1000, 1000).cuda() z torch.mm(x, y) print(Matrix multiplication on GPU succeeded, result shape:, z.shape)如果torch.cuda.is_available()返回True说明驱动和CUDA都正常。如果返回False大概率是驱动版本和CUDA版本不匹配或者conda环境里的cudatoolkit版本不对。5.2 常见报错的排查链路报错一CUDA driver version is insufficient for CUDA runtime version这个报错的意思是驱动版本太低不支持当前CUDA运行时。解决办法是升级驱动或者降级CUDA版本。查一下当前驱动支持的CUDA版本nvidia-smi右上角会显示CUDA Version: xx.x这个就是驱动支持的最高CUDA版本。报错二ImportError: libcudart.so.11.0: cannot open shared object file这个报错说明系统找不到CUDA运行时库。原因可能是环境变量没配好或者conda环境里的cudatoolkit没装。检查LD_LIBRARY_PATH是否包含了CUDA的lib64目录或者直接conda install cudatoolkit11.3。报错三RuntimeError: CUDA out of memory这个不是环境配置问题是显存不够。解决办法是减小batch size或者用torch.cuda.empty_cache()清理缓存。如果显存实在太小可以考虑用梯度累积或者混合精度训练。5.3 多环境切换时的注意事项当你同时有多个conda环境时切换环境后一定要确认当前环境用的是哪个CUDA版本。因为不同环境可能装了不同版本的cudatoolkit切换后torch.version.cuda会变。如果你在环境A里跑得好好的切到环境B就报CUDA错误大概率就是版本不匹配。另外nvidia-smi显示的CUDA版本是驱动支持的版本不是当前环境实际使用的版本。实际使用的版本要看torch.version.cuda或者nvcc -V。6. 双系统日常使用中的几个实用经验6.1 时间不同步问题的根治方法双系统最烦人的问题之一就是时间不同步Windows用的是本地时间Ubuntu默认用的是UTC时间来回切换会导致时间差8小时。解决办法有两种方法一让Ubuntu也用本地时间timedatectl set-local-rtc 1 --adjust-system-clock方法二让Windows也用UTC时间需要改注册表稍微麻烦一点。我一般用方法一简单直接。6.2 磁盘挂载与文件互访的正确姿势Ubuntu默认可以读取Windows的NTFS分区但写入NTFS分区有时候会出问题。如果你需要在两个系统之间传文件建议用一个独立的exFAT分区两个系统都能读写而且不会出权限问题。挂载Windows分区的时候如果遇到“无法挂载Windows未正常关机”的提示说明Windows的快速启动没关。进Windows在“电源选项”里关闭“快速启动”然后完全关机不是重启再进Ubuntu就能正常挂载了。6.3 系统备份与恢复的省心方案配好环境后强烈建议用Timeshift做一个系统快照。Timeshift类似Windows的系统还原但更强大可以定时自动备份也可以手动创建快照。万一哪天把系统搞崩了几分钟就能恢复到之前的状态。安装Timeshiftsudo apt install timeshift配置的时候选择RSYNC模式备份位置选一个空间足够的磁盘。建议在装完驱动和CUDA之后立刻做一个快照这样以后折腾坏了可以直接回滚不用重装系统。提示Timeshift默认不备份用户主目录所以你的代码和数据还是要自己用git或者rsync备份。系统快照只恢复系统文件和配置不恢复个人文件。6.4 显卡驱动升级后的常见问题处理有时候Ubuntu自动更新会升级内核升级后显卡驱动可能失效表现为分辨率变低、nvidia-smi报错。这时候不用慌重启进入GRUB菜单选择旧版本内核启动然后重新安装驱动就行。如果旧内核也进不去可以在GRUB菜单里选择“Advanced options”然后选“Recovery mode”在恢复模式里修复驱动。实在不行就用Live USB启动chroot进去修复。我个人经验是在跑重要训练任务之前不要随便升级内核和驱动。等任务跑完了再统一升级升级后立刻验证GPU是否正常有问题马上回滚。7. 关于这套环境配置的个人体会这套Win10Ubuntu双系统minicondaCUDA的组合我从几年前开始用中间换过几次硬件也重装过好几次系统每次都是按照上面这个流程走。最深的体会是环境配置这件事慢就是快。不要图省事跳过版本匹配的检查不要随便装最新驱动不要把所有东西都装在base环境里。前期多花半小时确认版本后期能省下好几个小时的排查时间。另外养成记录的习惯。每次配好一个环境把驱动版本、CUDA版本、框架版本、conda环境名记在一个文档里。下次再配类似环境的时候直接照着抄不用重新查。我现在有一个自己的“环境配置清单”每次新机器到手照着清单走一遍基本不会出问题。最后分享一个小技巧如果你经常需要在不同机器之间同步环境可以用conda的--clone功能或者直接把整个conda环境目录打包拷贝过去。不过要注意跨机器拷贝环境时CUDA相关的库可能不兼容最好还是用yml文件重新创建。

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

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

免费获取报价 →
↑