ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

深度学习环境配置指南:Anaconda、CUDA、cuDNN与PyTorch GPU版本匹配实战

深度学习环境配置指南:Anaconda、CUDA、cuDNN与PyTorch GPU版本匹配实战 先说一个结论新手装深度学习环境最大的阻碍不是软件多而是“版本匹配”这四个字。标题里这套组合——Anaconda、CUDA、cuDNN、PyTorch、Pycharm——单独看都不难装但很多人卡在“装完以后import torch报错”“torch.cuda.is_available()返回False”“Pycharm里跑不了GPU”这些莫名其妙的问题上。这篇博文就是帮你把这一步彻底走通按下面的顺序操作1小时内装完并能跑起GPU版本的PyTorch。适合刚入门深度学习、需要复现论文代码、或者准备跑开源项目的同学也适合被各种安装教程绕晕了打算从零再来一遍的人。整个方案的核心思路是先装Anaconda做环境隔离再确认NVIDIA显卡驱动接着装CUDA Toolkit和cuDNN然后用conda或者pip装PyTorch最后在Pycharm里把解释器指向这个新环境。每一步我都尽量讲清楚“为什么这么做”而不是只丢命令。配置完成后你会在Pycharm里写一个几行的小脚本确认GPU真正可用然后就能开始正常训练模型了。1. 先想明白版本匹配再动手装环境1.1 这些软件到底什么关系很多人第一次接触这套东西脑子里是一团浆糊CUDA是驱动吗cuDNN是驱动吗PyTorch是依赖谁工作的我先把关系捋顺。可以把显卡驱动理解成操作系统和GPU之间的“翻译官”它负责让系统认识这张显卡并调度它的基本能力。CUDA Toolkit是在驱动之上的一层开发工具包它提供编译GPU程序所需的库、头文件和工具。cuDNN则是基于CUDA做的一套深度学习专用加速库专门优化卷积、池化、循环神经网络这类算子的执行效率。PyTorch在安装GPU版本时会内置对CUDA的调用接口运行时它会去找系统里已经装好的CUDA库和驱动然后真正在GPU上算。所以它们的依赖顺序是显卡驱动在最底层CUDA Toolkit在中间cuDNN紧贴CUDAPyTorch在最上层。只要其中任何一层版本对不上就会出现“我明明装了CUDAPyTorch却说不能用”的尴尬情况。1.2 版本匹配的核心原则版本匹配的核心原则只有一条以PyTorch官方支持的CUDA版本来定你的CUDA和cuDNN版本而不是反过来。很多新手一上来就装最新版CUDA结果发现PyTorch官网根本没有对应这个CUDA版本的安装命令又得卸载重装。我推荐的策略是先想清楚你要用哪个PyTorch版本然后去PyTorch官网看它支持哪些CUDA版本再挑其中一个稳定组合来装CUDA和cuDNN。截至我写这篇文章时比较稳的组合有两组组合定位PyTorch版本CUDA ToolkitcuDNN适合场景保守稳定2.1.x11.88.9.x大量老项目、复现论文偏新均衡2.4.x 或 2.5.x12.1 或 12.49.x新模型、新算子不要追求“最新”因为深度学习生态的更新是靠各组件之间互相适配慢慢推进的。你装了最新版CUDA 13.x大概率面临的问题是PyTorch还没有对应的预编译包。最省心的做法就是选择一个已经被验证过大量人跑通的组合比如CUDA 11.8加PyTorch 2.1或者是CUDA 12.1加PyTorch 2.4。1.3 安装顺序怎么设计最省时间我自己装环境踩了不少坑最终沉淀下来的安装顺序是固定的先装Anaconda创建好独立的Python虚拟环境。用nvidia-smi确认显卡驱动正常记下驱动支持的最高CUDA版本。安装CUDA Toolkit版本参考PyTorch需要且不高于驱动支持的上限。下载cuDNN解压后把文件放进CUDA Toolkit的安装目录。在conda环境里安装PyTorch GPU版。配置Pycharm解释器做最终验证。为什么是这个顺序因为Anaconda和显卡驱动之间没有依赖先装可以把Python环境这部分快速定型。CUDA和cuDNN需要在装PyTorch之前就位否则PyTorch装完也检测不到底层库。Pycharm是纯编辑器配置放最后不会影响前面任何东西。时间预算大概是这样Anaconda 10分钟CUDA 15分钟cuDNN 10分钟PyTorch 15分钟Pycharm 10分钟中间如果顺利的话总共也就1小时。当然这个时间是在网络正常、安装包提前下载好的前提下。2. Anaconda安装与虚拟环境创建2.1 Anaconda下载与安装步骤下载Anaconda直接去官网选择Windows版本注意64位系统的安装包。安装过程其实没什么坑但有两点需要特别留意。第一安装路径建议保持默认。很多人喜欢把开发工具装到D盘或者自定义目录这本身没问题但后面Pycharm配置解释器的时候要找路径自定义路径容易找错对新手不友好。第二安装到“Advanced Installation Options”这一步时默认选项是“Add Anaconda3 to my PATH environment variable”这个一般不勾选。原因很简单如果你勾了Anaconda会把Python加入系统全局PATH之后在命令行里敲python可能进入Anaconda环境也可能进入系统原来装的Python搞混了非常麻烦。我们可以用Anaconda自带的“Anaconda Prompt”来操作不用走系统PATH。安装完成后打开Anaconda Prompt输入conda --version能输出版本号比如conda 23.x.x就说明安装成功。同样地在Anaconda Prompt里输入python如果进入的Python版本是3.x且提示里能看到Anaconda相关的字样说明默认base环境没问题。注意这里的操作环境后面每一步我都默认在Anaconda Prompt里执行而不是Windows自带的cmd这样可以避免PATH冲突。2.2 配置国内镜像源下载速度翻倍Anaconda默认的软件源在国外国内下载经常速度感人或者干脆卡死。这一步在国内网络环境下几乎是必须做的把conda源切换成清华源。在Anaconda Prompt里依次执行以下命令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 --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --set show_channel_urls yes配置完之后可以用conda info查看当前源配置看到清华镜像就说明写进去了。你可能会好奇为什么还要加pytorch这个channel因为后面用conda安装PyTorch的时候官方默认把包放在了pytorch channel里提前加好能省很多麻烦。2.3 创建PyTorch专用虚拟环境这一步非常关键可以说是Anaconda最大的价值所在。深度学习项目之间依赖经常打架比如一个项目要TensorFlow旧版另一个要PyTorch新版本如果全装在一个Python环境里三天两头就是兼容性灾难。我习惯的做法是给每个项目或者每个大方向建一个独立的conda环境。创建命令conda create -n pytorch python3.10这里的-n pytorch表示环境名叫pytorch你可以按项目名来起。Python版本为什么推荐3.10因为PyTorch对3.10的支持非常成熟老代码兼容性也好三年前的代码基本都能跑。如果你是偏新的项目3.11也没问题但3.12、3.13这种太新的版本在装某些带C扩展的库时可能会遇到预编译包还没有的情况对新手不友好。创建完成后conda activate pytorch命令行前面会变成(pytorch)开头代表已经进入这个环境。以后每次装PyTorch相关的东西都要先确认环境是激活状态。3. 显卡驱动确认与CUDA Toolkit安装3.1 先跑nvidia-smi确认驱动别急着装CUDA很多教程一上来就让你下载CUDA安装包其实这是不对的。你机器上可能有独显驱动但没装CUDA Toolkit也可能驱动很老了支持不了新版CUDA。先确认基础再往上搭积木。在命令行里输入nvidia-smi能看到一张表格里面有Driver Version和CUDA Version两行信息。注意这里的CUDA Version并不是说你的系统已经装了CUDA Toolkit它只是告诉你说你当前的显卡驱动最高支持到这个CUDA版本。比如显示CUDA Version: 12.4说明你的驱动可以带动CUDA 12.4及以下的任意版本。如果你这台电脑压根没装NVIDIA驱动nvidia-smi会直接报错那就先去NVIDIA官网下载对应型号的驱动安装好再继续。确认驱动正常之后再去装CUDA Toolkit就不会出现“带不动”的情况。3.2 下载并安装CUDA ToolkitCUDA Toolkit要下载哪个版本按照我在第1章里说的原则去看PyTorch官网支持的CUDA版本。比如PyTorch 2.4.x支持CUDA 11.8和12.1PyTorch 2.5.x支持12.4你就选一个不高于nvidia-smi里显示的CUDA版本的数字。下载地址是NVIDIA官网的CUDA Toolkit Archive页面找到对应版本的安装包。安装过程有几个地方要特别小心。安装类型选择“自定义”不要用默认的“精简”。自定义安装里你会看到一堆组件其中有一个叫“Visual Studio Integration”的选项建议直接取消勾选。这一步很关键因为很多人的机器没装Visual Studio就算装了版本也未必匹配这个东西即使装上也基本用不到不勾选还能避免后面的“Visual Studio integration no supported version”报错。接下来一路下一步安装路径可以保持默认比如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8。装完后验证nvcc -V能输出版本信息比如Cuda compilation tools, release 11.8就说明CUDA Toolkit装好了。注意nvcc是CUDA的编译器它才是CUDA Toolkit安装成功的标志跟nvidia-smi里看到的CUDA Version是两回事。3.3 多个CUDA版本怎么共存有人可能遇到过这种情况电脑上已经有CUDA 12.1了但某个老项目必须要CUDA 11.8卸载重装又怕影响其他项目。其实CUDA Toolkit是支持多版本共存的装的时候选择不同路径或者保持默认路径下带版本号的目录就没问题。默认安装路径会带上版本号比如v11.8和v12.1会并存。你的环境变量里PATH指向哪个系统取的就是哪个版本。切换版本时手动改环境变量里的CUDA_PATH和PATH里的对应项就行。对新手来说我不建议折腾多版本先用好一个版本等项目真有需要再研究。3.4 环境变量配置CUDA安装程序一般会自动把两个路径写进环境变量CUDA_PATH指向CUDA安装根目录。PATH里会有C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin。如果后续发现命令行里nvcc命令找不到大概率是环境变量没生效。可以手动去系统环境变量里检查把CUDA_PATH加上并把\bin和\libnvvp目录加入PATH。改完环境变量后需要重新打开命令行窗口才生效。4. cuDNN下载与配置4.1 cuDNN是什么为什么必须装cuDNN全称是NVIDIA CUDA Deep Neural Network library是NVIDIA专门为深度学习写的GPU加速库。PyTorch在GPU上跑卷积神经网络时很多核心算子会调用cuDNN的实现如果不装虽然PyTorch也能跑但速度会明显变慢部分操作甚至会报错。安装cuDNN跟安装普通软件很不一样它本质上不是一个可执行程序而是一堆文件。你要做的事情是把这些文件解压出来然后拷贝到CUDA Toolkit的安装目录里让它被CUDA“看到”。4.2 下载cuDNN并匹配CUDA版本下载cuDNN需要注册一个NVIDIA账号这一步没法跳过。进入cuDNN下载页面之后会看到很多版本每个版本标题上会标明它适配哪个CUDA版本。比如cuDNN 8.9.7 for CUDA 11.x对应的就是CUDA 11.8cuDNN 9.x for CUDA 12.x对应的就是CUDA 12.x。下载时选择Windows版本通常是一个zip压缩包。解压之后你会看到bin、include、lib三个文件夹这就是cuDNN的全部内容。4.3 把cuDNN文件拷贝进CUDA目录打开CUDA Toolkit的安装目录我这里是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8。然后把cuDNN解压出来的内容挨个合并进去把cuDNN里的bin\cudnn64_8.dll复制到CUDA目录的bin\下。把cuDNN里的include\cudnn.h复制到CUDA目录的include\下。把cuDNN里的lib\x64\cudnn.lib复制到CUDA目录的lib\x64\下。如果解压出来的cuDNN版本目录结构里有windows这样的中间目录就先进去再找bin/include/lib。复制完成后可以到CUDA目录的bin下看看有没有cudnn64_8.dll这个文件有就说明拷贝成功了。没有专门的“安装程序”需要运行这一步就算完成了。你可能会觉得这也太简单了但它的确就是这么简单粗暴。cuDNN之所以不做成安装包是因为它依赖CUDA的具体路径直接拷文件是最灵活也是最通用的方式。提示如果你是较新的系统直接把cuDNN的bin目录也加入PATH环境变量会更稳妥不过一般情况下拷到CUDA目录后就不需要额外操作了。5. PyTorch安装与GPU验证5.1 去官网生成安装命令别自己乱拼安装PyTorch之前先确认你当前在conda的pytorch环境里conda activate pytorch然后打开PyTorch官网官网首页会根据你选择的操作系统、包管理器、CUDA版本直接生成对应的安装命令。这里有几个常见误区要提醒一下。第一新手可以优先选pip安装而不是conda安装。conda安装PyTorch时经常要解决依赖冲突等待时间很长pip则相对干净利落。比如PyTorch 2.1.0配CUDA 11.8官网生成的命令是pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118第二命令里的cu118对应CUDA 11.8cu121对应CUDA 12.1cu124对应CUDA 12.4。你自己不要改这个后缀官网生成什么你就用什么除非你确定你知道自己在做什么。如果你在下载PyTorch大小时速度很慢可以用pip的国内镜像源。注意这里说的不是命令行里的index-url而是全局pip配置或者命令里加-i参数指到清华PyPI镜像比如pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple用镜像源下载的PyTorch默认包含CUDA支持没问题的。只不过它不会区分cu118还是cu121而是下载对应你系统的默认版本。所以如果你对版本有精确要求还是建议用官网生成的带--index-url的命令安装。5.2 安装完成后的GPU验证装完包之后最重要的时刻来了——验证PyTorch到底能不能调用GPU。在命令行里继续输入python -c import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))如果输出类似下面的内容说明你的环境配置完全成功2.1.0 True NVIDIA GeForce RTX 3060其中的True就是无数人梦寐以求的结果。我见过很多新手装完一跑第三行的GPU名字没打印出来或者直接报了AssertionError这时候就要进入排错流程了。先把排查思路说一下具体问题放到第7章去展开torch.__version__能正常输出但版本号后面带cpu说明你装成了CPU版跟CUDA没关系。需要卸载重装GPU版。torch.cuda.is_available()返回False首先要确认PyTorch版本是GPU版然后确认CUDA Toolkit和cuDNN是装在正确位置最后确认显卡驱动不是太老。如果你的显卡太老是GTX 7系或更早那基本告别新版CUDA要么换显卡要么找老版本的PyTorch。5.3 为什么要跑这个验证脚本很多教程会在装完PyTorch后直接跳到最后一步让你去Pycharm写代码我觉得这样不妥。命令行里的验证才是最快暴露问题的环节因为这一行脚本把整个链条的最终结果全部呈现了出来。我自己的经验是环境问题越早发现越好修。如果在命令行这一关就发现torch.cuda.is_available()是False那问题一定出在驱动、CUDA、cuDNN或者PyTorch包装错了这几件事上排查范围很明确。如果直接去Pycharm里跑Pycharm本身还可能引入解释器选错之类的新变量问题定位就更麻烦了。6. Pycharm配置Anaconda环境6.1 Pycharm下载与安装要点Pycharm去JetBrains官网下载选择Community版本就够了。专业版多了远程开发、数据库工具这些功能对深度学习初学者来说没必要折腾。个人使用用社区版没有授权问题不要浪费时间找激活方式社区版配合Anaconda的虚拟环境完全能跑所有基础代码。安装过程一直下一步就行。有一点可以注意安装选项里如果让你选是否创建桌面快捷方式、是否关联.py文件按自己喜欢来。这些都不影响后面的环境配置。6.2 在Pycharm里指定conda环境解释器打开Pycharm新建一个项目。进入项目后按CtrlAltS打开设置找到Project: 项目名 - Python Interpreter点右侧的Add Interpreter选择Add Local Interpreter。在弹出来的窗口里左侧选Conda Environment然后选择Existing environment。Pycharm会自动检测到Anaconda的base环境但我们要用的是刚才创建的pytorch环境所以需要在Interpreter下拉框里点旁边的浏览按钮手动找到这个路径如果你Anaconda装在默认路径那么pytorch环境解释器在C:\Users\你的用户名\anaconda3\envs\pytorch\python.exe。如果你装到了D盘就按实际安装路径找。选中这个python.exe之后Pycharm右下角会显示当前解释器的路径确认它指向envs\pytorch目录再点OK。这一步是整个Pycharm配置最容易出错的地方因为一不小心就会选到base环境的python.exe那样你装到pytorch环境里的PyTorch是根本不会生效的。6.3 首次跑GPU验证脚本配置好解释器后在项目里新建一个test_gpu.py文件写几行最简单的代码import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))右键运行如果输出和之前在命令行里看到的一样说明Pycharm和conda环境已经关联成功你以后在这个项目里写的代码都能正常调用GPU了。如果这里报错说找不到torch基本就是解释器选错了回到上一步再检查一遍路径。7. 常见问题与排查技巧实录7.1torch.cuda.is_available()返回False的排查方向这个问题是我在答疑里碰到最多的没有之一。如果你第一次验证就遇到False按这个顺序排查基本能解决检查点具体操作常见结果是否激活了conda环境命令行执行conda env list看当前有没有*号在pytorch上没激活的话安装的包可能进了basePyTorch是不是CPU版命令行执行python -c import torch; print(torch.__version__)版本号有cpu就是装错了显卡驱动是不是最新执行nvidia-smi看驱动的CUDA版本是否不低于你要用的CUDA驱动太老需要去官网更新驱动CUDA Toolkit是否装好执行nvcc -V不是内部或外部命令说明环境变量有问题cuDNN是否拷对了位置检查CUDA目录bin下有没有cudnn64_x.dll拷错或没拷会导致后续运行报错很多情况下问题不是单一原因而是一连串的版本错位。比如你按官网命令装了一个cu118版本的PyTorch但机器上的CUDA Toolkit其实是12.1这也会造成匹配异常。虽然PyTorch官方说它的包是自包含的实际使用中最好还是让CUDA Toolkit版本和PyTorch对应起来省心很多。7.2 安装CUDA报“Visual Studio Integration”错误如果你用默认精简模式安装CUDA旧版CUDA安装器有可能弹出Visual Studio integration no supported version of visual studio was found的警告然后结束安装。解决思路有两种。第一种重新运行安装程序选择自定义模式把Visual Studio Integration这个组件的勾选去掉只保留CUDA核心组件。第二种如果你确实需要这个集成功能那就先安装Visual Studio但要装2019或者2022的相应版本而且版本要能兼容你的CUDA。说实话深度学习新手基本用不上这个集成去掉就完事了。7.3 conda或者pip安装慢、卡住Anaconda源已经换成清华镜像后conda一般不会太慢。pip装PyTorch时如果用官方源大包下载可能很慢。两个办法把默认pip源改成清华源一劳永逸在用户目录下创建pip.ini写[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host pypi.tuna.tsinghua.edu.cn或者安装大包时临时用-i参数指定镜像源。还有一个细节如果你是用官网生成的带--index-url的pip命令安装它会直接从download.pytorch.org下载包这个域名在国内的访问速度不稳定。遇到这种情况我一般先用pip install装CPU版把依赖解决再单独用pip download下载GPU wheel不过这个过程对新手来说偏复杂最简单的办法还是先把镜像源换了再装。7.4 驱动更新后nvidia-smi显示版本不变化有时候你让Windows自动更新了显卡驱动或者手动装了个新版驱动但跑nvidia-smi发现CUDA Version还是老样子。这通常是因为驱动没有真正覆盖安装或者安装后没有重启。遇到这种情况先重启电脑再重新执行nvidia-smi一般就能看到更新后的版本号。7.5 环境变量设置后nvcc还是找不到如果你已经手动在系统环境变量里加了CUDA的bin目录但新开的命令行里nvcc -V还是提示找不到命令首先检查是不是忘了重新打开命令行窗口。还有一个很常见的问题你编辑的是“用户变量”而不是“系统变量”而有些脚本恰好不是从你的用户上下文启动的。为了省事直接把CUDA的bin路径同时加到用户变量和系统变量的PATH里重启终端后肯定能生效。7.6 老项目需要老版本PyTorch怎么办有些论文代码使用的是PyTorch 1.x或者很早期的API这种项目不要强行升到新版本。最好的方式是重新创建一个conda环境比如conda create -n pytorch1 python3.7然后去PyTorch官网的Previous Versions页面找到对应老版本和CUDA版本的安装命令。注意老版PyTorch对Python版本的要求很高Python 3.8以上可能就会装不上。这就是Anaconda虚拟环境的威力项目多了你会发现每个环境里的依赖都干干净净互不干扰。最后再分享一个小技巧我平时新建深度学习项目时会在项目根目录放一个requirements.txt每次激活环境后第一件事就是pip freeze requirements.txt把当前环境的包版本固定下来。过几个月再回来跑这个项目直接pip install -r requirements.txt就能还原出几乎一样的环境。另外Conda环境的名称建议和项目含义对得上不要用我开头举例的pytorch这种通用名。比如要跑一个叫“segformer”的项目环境名就叫segformerPython版本按项目要求来。以后你电脑上可能有五六个conda环境名字起清楚了用Pycharm配解释器时就不会找错。工具链这种东西第一次配通以后后面就顺了。装的时候耐住性子每装完一步就验证一步别一口气全装完再回头看那样出了问题都不知道是哪一步引起的。祝你这1小时一切顺利。
返回列表