ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

CUDA与cuDNN安装配置详解:版本匹配与常见报错排查

CUDA与cuDNN安装配置详解:版本匹配与常见报错排查 1. CUDA和cuDNN到底是什么为什么装完还是不能用先说一个我见过无数次的场景费了半天劲驱动装了CUDA Toolkit装了cuDNN文件也拷贝到目录里了结果回到PyCharm跑一行torch.cuda.is_available()返回False。于是开始怀疑人生怀疑是不是安装包下错了甚至怀疑显卡是不是坏的。有类似经历的人不在少数。输入法里敲cuda available: false、cudnn cannot be c能搜出一整页的求助帖。实际上这个现象背后不全是安装步骤的问题更多时候是对CUDA和cuDNN之间的关系理解不到位。先把两个概念理清楚。CUDACompute Unified Device Architecture是NVIDIA提供的并行计算平台和编程模型。你可以把它理解成显卡的“操作系统接口层”。有了CUDA程序才能指挥GPU里的几千个计算核心去干活。CUDA Toolkit则是开发套件里面包含编译器nvcc、运行时库、调试工具等。装CUDA Toolkit等于在你的系统里搭好了一套“指挥GPU的程序运行环境”。cuDNNCUDA Deep Neural Network library是NVIDIA专门为深度学习打造的加速库全称是CUDA Deep Neural Network library。它是在CUDA之上再封装一层的卷积、池化、归一化、激活函数等深度学习常用算子的高性能实现。直白点说CUDA是路cuDNN是跑在路上的高级赛车。没有cuDNN深度学习框架也能跑但就像开着一辆普通的车在高速上走有了cuDNN很多算子的执行效率会翻倍甚至更多。TensorFlow、PyTorch、PaddlePaddle这些主流框架底层都在调用cuDNN的算子。所以两者是层层依赖的关系不是二选一的关系。安装时缺一不可而且版本之间必须匹配。我见过有人只装了显卡驱动没装CUDA Toolkit然后抱怨为什么PyTorch报CUDA不可用。这里就需要解释一个常见误区显卡驱动本身内部会自带一个CUDA的运行时版本只要驱动足够新PyTorch甚至可以不装CUDA Toolkit就直接利用GPU跑。前提是PyTorch是带CUDA支持构建的版本。这也就是为什么很多教程里说“只要把驱动更新到最新版PyTorch直接用就行”。但对于需要自己编译CUDA扩展、写自定义CUDA代码、安装需要实时编译的库比如某些版本的torchvision的人来说必须要有完整的CUDA Toolkit才能干活。如果你想搞清楚自己机器的驱动支持到哪个CUDA版本Windows下打开命令行输入nvidia-smi右上角的CUDA Version指的不是你已经装了CUDA Toolkit而是驱动最高能支持的CUDA版本。比如显示CUDA Version: 12.4说明驱动可以兼容最高12.4的CUDA Toolkit。这个值决定了你安装CUDA Toolkit时的版本上限不能超过它。不少人把这两个东西搞混装了CUDA 12.4的Toolkit结果驱动只支持11.8这时候程序会直接崩溃或者检测不到设备。所以版本匹配才是整个安装过程里最值得花时间提前规划的事。2. 动手前先确定版本组合驱动、CUDA、cuDNN、深度学习框架的四方匹配这一节是一整篇里我认为最容易被忽略的环节。打开搜索引擎找教程铺天盖地都是“下载CUDA 11.8”“安装cuDNN 8.9”但很少有人告诉你版本选择取决于你要跑什么框架、框架的哪个版本、以及你的显卡是什么型号。先说结论版本匹配遵循以下优先级顺序你的深度学习框架PyTorch/TensorFlow/PaddlePaddle支持什么CUDA版本这是最高优先级你的NVIDIA驱动支持什么CUDA版本这是硬性上限CUDA Toolkit对应什么cuDNN版本这是官方固定搭配你的显卡计算能力Compute Capability是否满足要求具体展开说。深度框架的优先级最高因为框架是编译好的二进制包它对CUDA版本的要求是写死的。比如PyTorch官方提供的pip install torch命令默认安装的版本是针对CUDA 12.x或11.8构建的不同时期不一样。如果你安装的PyTorch是CUDA 11.8版本构建的但你机器上装的是CUDA 12.4 Toolkit那不会出问题——PyTorch内部的CUDA运行时是自带的不依赖你系统里装的Toolkit版本。但如果你要编译第三方CUDA扩展编译时用的nvcc版本就得和PyTorch构建时的CUDA版本接近否则容易报错。驱动支持的上限关系到你能装哪个版本的CUDA Toolkit。刚才说了nvidia-smi右上角显示的CUDA版本是驱动的上限。比如老显卡配老驱动显示CUDA Version 11.4那你硬装CUDA 12.x Toolkit程序跑起来大概率出问题。解决办法是先升级驱动或者选择不高于上限的CUDA版本。cuDNN和CUDA Toolkit的对应关系NVIDIA官方有一张兼容性矩阵表。通常下载cuDNN时它明确标注适用于CUDA 11.x还是12.x。这里不能乱配比如CUDA 11.8搭配cuDNN 8.9.x是常用的稳定组合CUDA 12.x搭配cuDNN 9.x是较新的组合。显卡型号决定了它的计算能力。比如GTX 10系的计算能力是6.xRTX 20系是7.5RTX 30系是8.6RTX 40系是8.9最近的新卡是9.0或更高。某些新版本的CUDA Toolkit会放弃对旧计算能力的支持或者说跑起来没有进行充分优化。好在你只是想装好环境跑深度学习框架只要框架官方还支持你这款显卡驱动到位就问题不大。但如果你要用CUDA 12.x跑GTX 1080虽然也能装上但性能表现和兼容性就不如CUDA 11.x时代那么舒服了。为了让你一目了然我给出三个目前比较主流的版本组合参考使用场景显卡驱动最低要求CUDA ToolkitcuDNNPyTorch版本示例偏稳定大量老教程兼容建议52011.88.9.x2.0.x ~ 2.1.x当前主流新卡新特性建议54512.18.9.x2.1.x ~ 2.3.x最新版吃新特性建议55012.49.x2.4这里的驱动最低要求不是绝对的以nvidia-smi显示的上限为准。安装CUDA Toolkit之前先看驱动支不支持省得白忙一场。还需要提一个常被忽视的点VSVisual Studio的版本兼容。CUDA Toolkit里的nvcc编译器在Windows上依赖Visual Studio的C编译工具链。如果你打算写CUDA C代码或者编译需要nvcc参与的扩展就必须安装对应版本的Visual Studio。比如CUDA 11.x官方支持VS2017/2019CUDA 12.x支持VS2022。nvcc对VS版本有严格要求版本不对在编译时会报找不到编译器的错误。只跑PyTorch/TensorFlow不写自定义CUDA代码的人可以跳过VS但为了以后万一要用建议提前装好VS2022的C桌面开发组件。提示在安装CUDA Toolkit之前先把Visual Studio装好可以避免之后nvcc检测不到编译器的尴尬。这不是必须步骤但对于要写扩展代码的人是强烈建议。3. 完整安装流程驱动、CUDA Toolkit、cuDNN分步图文操作网上关于安装步骤的帖子多如牛毛但很多是旧版界面或者跳过了关键细节。我这里把Windows环境下的完整流程重新走一遍尽量细到每个按钮和每次选择。3.1 安装或升级NVIDIA驱动第一步永远是检查驱动。右键桌面点击“NVIDIA控制面板”左下角“系统信息”查看“驱动程序版本”和“支持的CUDA版本”。如果驱动版本太老先去NVIDIA官网下载最新的Game Ready或Studio驱动。这里有一个经验之谈驱动不一定越新越好但一定要比你要安装的CUDA Toolkit版本的上限高。如果nvidia-smi显示支持的CUDA版本是12.0但你想装CUDA 12.4必须升级驱动。升级驱动时选择“自定义安装”勾选“执行清洁安装”这能避免旧驱动残留导致的莫名问题。驱动安装完成后重启电脑重新执行nvidia-smi确认右上角的CUDA版本已经变成新驱动的支持版本。3.2 下载并安装CUDA Toolkit去NVIDIA官网的CUDA Toolkit Archive页面找到你选定的版本。注意选择对应操作系统的安装包类型。这里建议选择exe (local)而不是exe (network)。network安装包体积小但安装过程中要联网下载如果网络不好或者中间断了整个安装就作废。local安装包一次性下载完整安装时会省心很多。下载完成后双击运行安装开始时选择“自定义高级”。这里有几个关键点组件选择时默认全选即可。如果你不需要Nsight工具可以取消勾选但我不建议新手乱动保持默认最稳妥。安装路径可以改但不要出现中文和空格。比如D:\NVIDIA\CUDA这种风格没问题。路径的事情后面会牵扯到环境变量尽量用简单路径。安装过程中如果提示需要Visual Studio相关组件说明你当前环境缺少VS或VS版本不匹配。这个在前面提过建议提前装好。安装完成后系统会自动把CUDA_PATH和CUDA_PATH_V12_x环境变量加到系统变量里。然后手动把以下两个路径加到Path环境变量中安装路径以你的实际目录为准C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\libnvvp验证是否安装成功打开新的命令行窗口输入nvcc -V如果能输出版本信息说明CUDA Toolkit安装成功。注意这里和nvidia-smi显示的版本可以不同因为nvcc -V显示的是你实际安装的Toolkit版本而nvidia-smi显示的是驱动支持的版本上限两者不存在必须相等的关系只要Toolkit版本不超过驱动的上限即可。3.3 下载并配置cuDNNcuDNN的下载需要注册NVIDIA开发者账号需要在官网同意许可协议后选择对应版本的安装包。这里有一个大家经常犯迷糊的地方下载的是ZIP压缩包不是安装器需要手动把文件解压到CUDA Toolkit目录里。选择cuDNN版本时务必确认它适配你的CUDA版本。比如CUDA 12.x可以选cuDNN 9.xCUDA 11.8建议选cuDNN 8.9.x。cuDNN下载页面会明确标注“For CUDA 12.x”“For CUDA 11.x”照选即可。解压cuDNN压缩包后你会得到三个文件夹bin、include、lib。把这三个文件夹里的内容分别复制到CUDA Toolkit安装目录下的同名文件夹中。比如把cuDNN的bin文件夹里的所有.dll文件 复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin\ 把cuDNN的include文件夹里的所有.h文件 复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include\ 把cuDNN的lib文件夹里的所有.lib文件 复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib\x64\复制时如果提示文件已存在选择覆盖即可。这一步是替换和补充不是新建目录。这里再补充一个细节cuDNN压缩包里应该有bin\cudnn64_9.dll、include\cudnn.h、lib\x64\cudnn.lib这类文件。如果解压后找不到这些文件多半是下载错了压缩包或者解压不完整。另外某些版本的cuDNN zip包内还有LICENSE文件那个不用拷贝。3.4 验证cuDNN是否安装成功验证cuDNN的方法很多但最直接的是看文件是否存在。打开命令行输入dir C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin\*cudnn*能看到cudnn64_8.dll或cudnn64_9.dll之类的文件说明cuDNN的DLL已经就位。但这个只能说明文件存在不能完全确认运行时会正确加载。更靠谱的验证方式是写一段简单的代码用深度学习框架跑一下GPU计算。或者你也可以去CUDA安装目录的extras\demo_suite文件夹里把bandwidthTest.exe拖进命令行运行确认CUDA环境可用。cuDNN本身没有独立的命令行验证程序实战验证通常是在框架里做的。3.5 在PyTorch中验证CUDA和cuDNN是否可用打开命令行激活你的Python环境依次执行python -c import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.backends.cudnn.is_available())输出结果中torch.__version__显示PyTorch版本torch.cuda.is_available()为True说明CUDA可用torch.backends.cudnn.is_available()为True说明cuDNN可用如果你的输出是False问题可能出在三个地方PyTorch本身装的是CPU版本需要卸载重装CUDA版显卡驱动太旧导致CUDA不可用环境变量没配对DLL找不到很多人反映在PyCharm里运行检测得到False但命令行里却是True。这种诡异情况多半是PyCharm使用了某个虚拟环境而虚拟环境里的PyTorch不是CUDA版本或者环境变量没有继承。解决办法是确认你PyCharm指定的解释器路径和命令行使用的是同一个Python环境。4. 高频报错与排查实录从cuda available false到cudnn cannot be c这一节专门针对大家在搜索框里高频出现的问题做一次系统性排查。我按问题出现频率来排序。4.1 torch.cuda.is_available()返回False这是最经典的问题同时也是原因最多的问题。我建议按以下顺序排查确认PyTorch是否为CUDA版本。在命令行执行pip list查看torch版本号如果显示cpu后缀那百分百是CPU版必须卸载后重装CUDA版。卸载命令是pip uninstall torch torchvision torchaudio重装时从PyTorch官网选择对应CUDA版本的安装命令。确认驱动是否识别显卡。命令行执行nvidia-smi如果提示找不到命令说明驱动没装好或者驱动不被系统识别。去设备管理器查看显示适配器中是否有NVIDIA设备以及驱动状态。确认CUDA Toolkit是否超出驱动上限。如果驱动上限是11.8装了12.x的Toolkit虽然不一定直接导致is_available()返回FalsePyTorch自带CUDA运行时不太依赖系统Toolkit但在编译扩展时会出问题。环境变量问题。确保CUDA_PATH存在且Path里包含bin目录。改完环境变量必须重启终端PyCharm也需要点File→Invalidate Caches重启环境变量才会重新加载。显卡是否被其他程序占用或者驱动状态异常。极少数情况下Windows更新会覆盖NVIDIA驱动导致驱动失效。这种时候去设备管理器卸载设备勾选“删除此设备的驱动程序软件”再重装驱动。4.2 cudnn cannot be c开头的一堆报错这个属于比较典型的报错场景经常是RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED或者cudnn cannot be initialized之类的提示。热搜词里的cudnn cannot be c大概率就是搜到这类报错的开头。出现这类问题常见原因有这么几个cuDNN版本和CUDA Toolkit版本不匹配。比如用了cuDNN 9.x却装的是CUDA 11.8这种情况要去NVIDIA的兼容性矩阵里核对换成匹配版本。DLL文件缺失或损坏。bin目录下的cudnn64_*.dll没拷贝对或者被安全软件误杀。建议重新解压cuDNN并覆盖拷贝。显存不足。某些情况下模型过大导致显存溢出cuDNN初始化失败这是间接原因。排查时可以先写一个最简程序import torch import torch.nn as nn model nn.Conv2d(3, 64, kernel_size3, padding1).cuda() x torch.randn(1, 3, 224, 224).cuda() y model(x) print(y.shape)如果能正常输出结果说明cuDNN在基础卷积算子层面已经可以正常使用。同时把环境变量CUDA_LAUNCH_BLOCKING1加上可以让CUDA错误精确报出具体位置方便定位是哪个算子出了问题。4.3 CUDA Samples找不到或编译失败很多人在装完CUDA Toolkit后发现开始菜单里没有CUDA Samples的文件夹或者编译示例项目时报错。新版CUDA Toolkit的Samples通常不在默认安装里它会在安装目录下生成extras\CUDA Samples的快捷方式路径一般是C:\ProgramData\NVIDIA Corporation\CUDA Samples\v12.4如果这个目录不存在需要去NVIDIA官网单独下载Samples压缩包。编译失败的原因大多是没装VS或者VS版本与CUDA不匹配。打开.sln解决方案文件VS会提示版本不兼容或需要升级工具链。按照提示操作即可但建议直接用与CUDA版本对应的VS版本。4.4 WSL2里安装了CUDA却检测不到WSL2的CUDA安装逻辑和Windows原生不一样。现在的WSL2不需要在Linux内部安装NVIDIA驱动驱动由Windows宿主提供。在WSL2里只需要安装CUDA Toolkit for WSL而不是标准的Linux安装包。在WSL2里执行nvidia-smi如果正常输出版本信息说明WSL2已经能访问GPU。如果不显示先检查Windows侧驱动是否更新到WSL兼容版本然后通过Windows的wsl --update命令升级WSL内核。接着在WSL2里安装CUDA Toolkit时要选择WSL-Ubuntu对应的安装方式。4.5 安装了CUDA后OpenCV还是用不了GPU热词里有cuda opencv这个场景很多人会碰到。OpenCV的GPU模块叫opencv_world配合CUDA构建的版本但官方预编译的OpenCV包里不包含CUDA支持必须自己用CMake从源码编译带CUDA的OpenCV。这一步比较麻烦但也不是无解。如果你只想要能跑深度学习模型不一定非要OpenCV的CUDA加速PyTorch集成的OpenCV和使用cv2.dnn的GPU支持是另外一码事。需要明确OpenCV的DNN模块在有CUDA的环境下会自动尝试使用GPU但前提是安装的OpenCV版本是带CUDA支持的构建版。否则即使CUDA和cuDNN都装好了cv2.dnn默认还是用CPU跑。4.6 NVIDIA Container Toolkit和CUDA Toolkit的对应关系热词里有nvidia-container-toolkit和cuda toolkit对应关系这个属于Docker场景。NVIDIA Container Toolkit的作用是让Docker容器能够访问宿主机的GPU。它的运行时nvidia-container-runtime会动态注入驱动相关的库和CUDA库到容器里。简单的对应逻辑是宿主机安装NVIDIA驱动驱动里自带CUDA运行时宿主机安装Docker Engine宿主机安装NVIDIA Container Toolkit在容器里你只需要安装对应版本的CUDA Toolkit镜像比如nvidia/cuda:12.4.1-runtime-ubuntu22.04容器的CUDA版本可以比宿主机驱动支持的版本低但不能更高。比如宿主机驱动支持CUDA 12.4容器里跑CUDA 12.4的镜像没问题如果宿主机驱动只支持11.8非要跑12.4的镜像容器启动后nvidia-smi可能正常显示但实际跑计算会报错。换句话说镜像里的CUDA镜像版本是运行时的基线它依赖的驱动能力必须小于等于宿主机驱动提供的能力。5. 环境变量与版本管理一次性把所有路径配置到位环境变量这个话题搜教程时经常会看到但很多人照着配了到用的时候还是出问题。这里把环境变量的原理和检查方式一次性说透。CUDA在Windows上主要涉及以下环境变量变量名示例值作用CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4CUDA安装根目录许多第三方库会读取这个变量来找CUDACUDA_PATH_V12_4同上带版本号的完整路径常有多个并存Path追加%CUDA_PATH%\bin让系统找到nvcc.exe和cudart64_*.dllPath追加%CUDA_PATH%\libnvvp让系统找到Nsight相关组件检查方法右键“此电脑” → 属性 → 高级系统设置 → 环境变量在系统变量里看CUDA_PATH是否存在。这里要注意Windows系统变量和用户变量的区别如果系统变量里没有只有用户变量里有某些以管理员权限运行的程序可能读不到用户变量。建议全配到系统变量里。Path里的顺序也有一点影响。如果机器上装了多个CUDA版本Path里靠前的版本会优先被找到。这也是为什么有人装了CUDA 12.4nvcc -V却显示11.8的原因——因为11.8的bin目录排在前面。多版本管理是一个很实际的需求。比如你有一个项目必须用CUDA 11.8另一个项目用12.4。两个Toolkit可以同时安装安装时路径会自动区分版本文件夹。需要切换版本时改CUDA_PATH和Path的顺序即可但每次改完要重启终端才能生效。如果觉得手动改太麻烦也可以写一个简单的批处理脚本一键切换。网上还有叫cuda-switch之类的工具但说实话大部分场景下手动修改够用了。cuDNN的环境变量没有单独的项。cuDNN的DLL直接放进CUDA的bin目录只要CUDA的bin在Path里程序就能找到cudnn64_*.dll。如果之前有人教你单独创建一个CUDNN_PATH变量不需要那是非标准的做法反而容易造成混乱。6. 安装完成之后验证工具链、跑通一个完整案例装完工具链不是终点能稳定跑出结果才是。这一节给出我在每次装完环境后必跑的验证清单。6.1 CUDA工具链自检打开命令行依次执行nvcc -V确认nvcc编译器的版本。nvidia-smi确认驱动识别的显卡和驱动支持的CUDA版本上限。然后进入CUDA Toolkit安装目录的extras\demo_suite把bandwidthTest.exe拖进命令行运行。这个程序会测试PCIe带宽和GPU内存拷贝速度输出Result PASS说明基础CUDA环境没问题。再跑一下deviceQuery.exe能看到显卡的完整信息包括计算能力Compute Capability、显存大小、多处理器数量等。这两个工具是我每次装完必跑的。6.2 PyTorch全链路验证除了前面提过的最简卷积测试我建议再跑一个稍微完整的训练循环确保模型的前向、反向、参数更新都能利用GPU和cuDNNimport torch import torch.nn as nn device torch.device(cuda if torch.cuda.is_available() else cpu) print(Using device:, device) model nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.ReLU(), nn.MaxPool2d(2), nn.Flatten(), nn.Linear(32 * 112 * 112, 10) ).to(device) x torch.randn(4, 3, 224, 224).to(device) y torch.randn(4, 10).to(device) criterion nn.MSELoss() optimizer torch.optim.Adam(model.parameters(), lr1e-3) for step in range(10): optimizer.zero_grad() output model(x) loss criterion(output, y) loss.backward() optimizer.step() print(fstep {step}, loss: {loss.item():.6f})如果这个脚本能完整跑完说明从CUDA的驱动层、运行时层到cuDNN算子库再到PyTorch框架层的整个链路都通了。这一步验证过的环境比单测is_available()可信得多。6.3 TensorFlow验证TensorFlow用户也有对应的验证方式import tensorflow as tf print(Num GPUs Available: , len(tf.config.experimental.list_physical_devices(GPU))) print(tf.test.is_gpu_available(cuda_onlyTrue))如果输出True再跑一个简单的矩阵乘法或训练小模型确认GPU真的在干活而不是被TensorFlow默默忽略。6.4 查看cuDNN版本前面提过用dir命令查DLL文件名来确认cuDNN版本这里再介绍一个更直接的方法。PyTorch运行时可以通过以下代码查看cuDNN版本import torch print(torch.backends.cudnn.version())它返回的是一个整数比如8700表示cuDNN 8.7.090100表示cuDNN 9.1.0。如果返回None说明cuDNN没有被正确加载或者PyTorch编译时没有开启cuDNN支持。TensorFlow的版本信息也可以通过tf.__version__和tf.sysconfig.get_build_info()来查其中包含cuDNN版本。我将这些验证命令整理成一张速查表方便日后使用目的命令/方法预期结果驱动状态nvidia-smi显示显卡信息右上角为驱动支持的CUDA上限CUDA ToolKit编译版nvcc -V显示当前Toolkit版本CUDA运行环境运行bandwidthTest.exe输出Result PASSCUDA设备信息运行deviceQuery.exe显示显卡详细参数PyTorch CUDA可用性torch.cuda.is_available()TruePyTorch cuDNN可用性torch.backends.cudnn.is_available()True运行时cuDNN版本torch.backends.cudnn.version()返回对应版本数字TensorFlow GPU数量tf.config.experimental.list_physical_devices(GPU)返回GPU设备列表7. 一些藏在细节里的坑我的排查经验补充最后补充几个我实际操作中遇到的、网上教程很少提到的坑都是真实踩过的。7.1 安全软件拦截DLL文件cuDNN的DLL文件拷贝到系统目录后某些安全软件会将其识别为可疑文件并隔离。这个问题在Windows Defender上偶尔也会出现。如果你发现跑程序时提示找不到cudnn64_*.dll去安全软件的隔离区看看把对应的DLL恢复并添加信任。7.2 路径中有中文导致的诡异问题如果CUDA安装路径或者Python环境中存在中文路径某些底层工具在编译或者加载动态库时会出现难以理解的报错。这类问题极难排查因为报错信息往往不直接指向路径问题。我的建议是从一开始就把所有和开发相关的路径全部设为纯英文、无空格的路径省去后半程的麻烦。7.3 多个Python环境下的CUDA库版本冲突如果你用conda创建了多个虚拟环境每个环境里的PyTorch版本和CUDA支持可能都不一样这在切换环境时容易造成混淆。一个环境里跑得好好的换一个环境就报CUDA错误。解决办法是每个虚拟环境独立维护一套CUDA相关的包不要指望一个CUDA Toolkit解决所有环境的问题。conda环境里的cudatoolkit和系统级的CUDA Toolkit是两回事前者是conda自带的运行时库后者是独立安装的系统级工具链。两者可以共存但不能互相替代。7.4 环境变量修改后PyCharm不生效这个坑几乎每个PyCharm用户都会遇到。修改了系统环境变量之后命令行里验证没问题但PyCharm里跑脚本还是报错。原因是PyCharm在启动时已经读取了一次环境变量改动后不会自动刷新。解决方案是重启PyCharm或者File → Invalidate Caches → Invalidate and Restart。如果还不行在PyCharm的运行配置里手动加上环境变量。这在排查cuda available: false时经常被忽略。7.5 32位和64位不匹配cuDNN压缩包里有lib\x64目录有些老教程会指导复制到lib\x86或者lib\Win32。如果你的Python是64位版本CUDA相关库也必须全部是64位的。混用32位和64位库会在加载时直接报错。现在新版的CUDA Toolkit基本只支持64位但拷贝cuDNN文件时还是要注意目录对应。装了足够多次CUDA环境之后我的体会是大部分安装失败都源于版本不匹配和环境变量没配好而不是步骤本身有多难。耐心一点按照驱动 → CUDA Toolkit → cuDNN → 框架验证这个顺序来每一步都验证通过再进入下一步基本不会出大问题。如果你是第一次接触CUDA建议先把这篇教程从头到尾读一遍明确自己需要哪个版本组合然后下载好所有安装包再开始动手。中途觉得某个步骤有问题多回头看版本兼容表格多数问题都能在那里找到答案。
返回列表