
对于刚接触深度学习或者GPU计算的人来说CUDA和cuDNN这两个词基本上绕不开。你在网上搜任何一条关于TensorFlow、PyTorch、或者是跑AI模型的教程几乎都会出现这两行字先装CUDA再装cuDNN。但很多人装的时候只是照着命令一条条复制粘贴装完了也不知道自己到底装了什么出了问题更是一脸懵。先花点时间把这两个东西的关系搞清楚。CUDA是NVIDIA推出的并行计算平台它让开发者可以把GPU当成一个大规模并行计算的设备来用。你写的Python代码本身不能直接操作显卡但通过CUDA这个中间层PyTorch这样的框架就能把矩阵运算、卷积这类重度计算任务丢给GPU去执行。cuDNN则是基于CUDA之上的一套深度学习加速库专门为卷积神经网络、循环神经网络这些常见的深度学习结构做了深度优化像卷积前向计算、反向传播、批归一化这些操作用cuDNN比你自己写的任何实现都要快得多。所以这两者的安装顺序是固定的先装CUDA再装cuDNN。因为cuDNN是在CUDA的基础上运行的它依赖CUDA的运行时。如果你先装了cuDNN再装CUDA配置起来会非常混乱容易埋下隐患。还有一个很多人忽略的点CUDA和显卡驱动不是同一个东西但两者有严格的版本对应关系。显卡驱动是操作系统层面的东西负责让显卡能被系统识别和调用CUDA Toolkit则是在驱动之上额外安装的编译工具链、运行库和开发库。理论上驱动版本越高能支持的CUDA版本就越多但反过来不行——你装了一个很新的CUDA Toolkit却用一个很老的驱动那就没法正常工作。搞清楚这一层关系之后装起来心里就有底了。这篇文章我以Linux系统为主用最常见.run文件方式装CUDA再手动解压cuDNN最后把验证工作全部做一遍。中间会穿插Windows平台的差异说明以及在真实操作中踩过的坑。1. 装之前先把思路理清楚CUDA和cuDNN解决了什么问题很多初学者最容易犯的一个错误就是把这套东西当成一个软件来看待以为像装QQ一样双击下一步就完事。其实CUDA和cuDNN更像是一套配套组件它们各自承担不同职责又必须互相配合。1.1 CUDA到底是什么为什么深度学习离不开它深度学习框架比如PyTorch和TensorFlow底层本质上就是一堆大规模矩阵运算。一个不太严谨但好理解的说法是CPU擅长处理逻辑复杂的串行任务GPU擅长处理数量庞大的并行任务。训练神经网络的过程就是把成千上万的神经元连接不断进行矩阵乘法、加法、激活函数计算这种场景正好是GPU的强项。但GPU不是你说一句帮我算个矩阵它就动的。你需要一套软件把GPU的计算能力暴露给操作系统和上层应用这套软件就是CUDA。CUDA Toolkit里包含几个关键部分NVIDIA驱动程序接口负责让操作系统能识别GPU。运行时库提供CUDA Runtime API比如cudaMalloc、cudaMemcpy这些函数。开发库包括cuBLAS、cuFFT、cuSPARSE这些面向科学计算的高性能库。nvcc编译器负责把你写的CUDA C/C代码编译成能在GPU上执行的机器码。PyTorch在Linux下通过pip安装时下载的是预编译的wheel包这个wheel里已经包含了它需要的CUDA库。所以很多人会有个疑问我已经用conda装了PyTorch里面自带CUDA 11.8还需要再装系统CUDA吗答案是如果你只是跑框架那么conda环境里的CUDA运行库就够了但如果你想自己写CUDA代码用nvcc编译任何东西或者装某些需要系统级CUDA的第三方库那就必须装一个完整的CUDA Toolkit。1.2 cuDNN的加速作用具体体现在哪cuDNN全称是CUDA Deep Neural Network library它是NVIDIA专门为深度学习场景打造的一套加速库。你也许会想我已经有了CUDA为什么还需要cuDNN很简单CUDA本身是个通用计算平台它不会专门为某一个卷积层或者某一个池化操作做特殊优化。但cuDNN会。它对卷积神经网络中常见的操作比如卷积、池化、归一化、激活函数、循环神经网络中的LSTM、GRU这些结构做了极致的底层优化。包括各种算法选择、内存布局优化、算子融合等等。用一句话来总结区别CUDA是让我们能用GPUcuDNN是让我们用GPU用得飞快。实测数据差距是很明显的同样的模型用cuDNN加速和不用cuDNN训练时间可能差出几倍。所以如果你装了CUDA却不装cuDNN深度学习框架要么直接在初始化时报错要么会给你一个很差的性能。1.3 版本组合的三角关系必须提前确定CUDA、cuDNN、深度学习框架这三者之间存在严格的版本对应关系。我在实战中见过太多人忽略这一点结果装出来的环境各种灵异事件——训练到一半显存报错、某个算子找不到、import torch时候崩掉最后排查半天发现就是版本不匹配。定版本的顺序应该是反着的先看你需要哪个版本的PyTorch或TensorFlow再根据它支持的CUDA版本选CUDA最后根据CUDA版本选cuDNN。打个比方这就像配一台电脑先确定你打算玩什么游戏、需求多高再选显卡和CPU而不是先买一堆硬件再考虑游戏能不能跑。确定了这个逻辑后面每一步都有据可依不会乱。2. 动手之前先摸底GPU型号、驱动版本、系统环境很多人一上来就急着去官网下载安装包结果装到一半报错这才回来一个一个排查。其实安装前花十分钟把环境摸清楚能省掉后面大量排错时间。2.1 先看GPU型号和当前驱动状态在Linux终端里输入nvidia-smi如果这条命令能正常输出一张表格说明驱动已经装好了。表格右上角的CUDA Version写的不是当前安装的CUDA Toolkit版本而是你当前驱动最高能支持的CUDA版本。这个数字非常关键决定了你能装哪个版本的CUDA。以我自己常用的机器为例nvidia-smi输出里写着Driver Version: 550.54.15和CUDA Version: 12.4那么这台机器最高可以装CUDA 12.4及以下的所有版本。也就是说我可以装CUDA 12.1、11.8但不能装12.8如果有的话因为驱动不够新。如果nvidia-smi提示command not found先别急着装CUDA因为CUDA Toolkit不会帮你装驱动你需要先把显卡驱动搞定。用发行版自带的驱动管理器或者去NVIDIA官网下载对应型号的驱动都行。驱动装好之后再回来继续。2.2 查看操作系统与编译环境CUDA Toolkit里面包含编译器nvcc但它需要系统的GCC来配合工作。在Linux下先确认以下几点# 查看系统版本 cat /etc/os-release # 查看内核版本 uname -r # 查看GCC版本 gcc --version # 查看make版本 make --version不同CUDA版本对GCC版本有明确的要求范围。比如CUDA 11.x通常要求GCC 6到10之间的版本个别新版本还能兼容GCC 11CUDA 12.x则把要求的范围放宽到了GCC 13甚至更高。如果你的GCC版本不在支持列表里倒不是完全不能用nvcc会在编译时给出警告但有不少人就是被这种警告级别的问题坑了编译到一半各种莫名其妙的报错。实在不行就装一个支持的GCC版本过程不复杂。Windows用户这边需要先装好Visual StudioCUDA安装器会自动检测Visual Studio的版本如果检测不到就会提示no supported version of Visual Studio was found。这个问题后面我会在故障排查部分专门说。2.3 确认硬盘空间和安装方式CUDA Toolkit的存储还是比较占地方的完整的runfile安装包大概有3到4个GB安装之后的实际占用超过5GB。安装之前用df -h看一下磁盘空间别装到一半硬盘满了。安装方式上CUDA官方提供了几种选择runfile最灵活一个可执行安装脚本可以自定义安装路径和组件适合需要多版本共存或者自定义环境的场景。deb发行版配套Ubuntu等Debian系列系统专用集成度高跟随系统包管理器的逻辑升级方便但灵活度低而且安装多版本比较麻烦。conda环境内安装conda install cudatoolkit这种方式只是把CUDA的运行时库装进conda环境不包含编译器适合跑PyTorch这类框架但不适合做CUDA编程开发。对于绝大多数场景我推荐用runfile方式后面会详细讲。2.4 版本对应关系速查表版本对应关系是安装CUDA和cuDNN最容易出错的环节我先给你一个最基本的判断方法先确认驱动能支持的CUDA版本上限看nvidia-smi右上角。再确认你的深度学习框架对CUDA版本的要求。比如PyTorch官方安装命令中经常能看到cu117、cu118、cu121这样的标识这代表对应版本要求CUDA 11.7、CUDA 11.8、CUDA 12.1。最后确认cuDNN要求对应的CUDA版本比如cuDNN 8.9.5 for CUDA 11.x和for CUDA 12.x就是两个不同的下载包。组件查看/决定方式常见版本组合显卡驱动nvidia-smi右上角550.x、545.x、535.xCUDA Toolkit框架要求驱动上限11.8、12.1、12.4cuDNN与CUDA版本绑定8.9.x、9.x深度学习框架项目需求PyTorch 2.x、TensorFlow 2.x这三者之间的对应关系确定之后你的版本组合就固定下来了。别盲目追新以框架要求为准整个环境会稳定得多。3. CUDA安装的完整实操流程runfile方式3.1 从官网下载对应的安装包打开NVIDIA的CUDA Toolkit Archive页面这个页面保留了历史所有版本。这里我要特别强调一下不要只盯着最新版很多人装完最新版CUDA后发现自己的深度学习框架还不支持只能又退回旧版。选择版本时参考你刚才确认的驱动上限和框架要求。比如驱动显示最高支持12.4框架要求11.8那你就直接下载CUDA 11.8。下载时选择Linux、x86_64架构、Ubuntu系统即使你是其他发行版也直接选适用项然后选择runfile方式页面会给出下载命令。复制下来执行wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run等下载完成之后先确认一下文件大小是否正常。CUDA的runfile有几个GB如果你下载下来只有几百MB那大概率是下载中断过别直接执行。3.2 执行runfile安装时的关键选择在安装之前先停掉图形界面服务。对于带桌面的Linux系统这一步经常被忽略导致安装过程中提示X server正在运行无法继续。做法是在纯文本终端下执行sudo service gdm stop如果你的桌面环境是LightDM就换成lightdm是SDDM就换成sddm。然后执行安装脚本sudo sh cuda_11.8.0_520.61.05_linux.run脚本会先做一次环境检查然后进入交互式界面这里有几个关键的选项需要注意是否同意许可协议输入accept。是否安装驱动组件这个要看情况。如果你的nvidia-smi已经能用了说明驱动已经装好那这里一定要取消勾选Driver只装CUDA Toolkit。如果驱动没装好可以考虑在这里一起装但要注意runfile里自带的驱动版本可能不是最新的而且和系统其他组件可能有冲突。安装路径默认是/usr/local/cuda-11.8强烈建议保持默认。因为大量的工程脚本和框架都会默认去这个路径找CUDA。是否创建软链接选择yes脚本会创建一个/usr/local/cuda的软链接指向具体的版本目录这个软链接非常方便后面切换版本或让其他程序找到CUDA都靠它。交互结束后安装会继续进行本质上是把大量文件复制到/usr/local/cuda-11.8目录同时安装一些组件。等进度条走完如果你的终端里出现了几行提醒让你把/usr/local/cuda/bin加入PATH说明安装基本上成功了。3.3 配置环境变量安装完成之后环境变量如果不配置nvcc命令都用不了。编辑~/.bashrc如果你用zsh就编辑~/.zshrc在文件末尾加上export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH保存之后执行source ~/.bashrc然后输入nvcc -V验证如果出现类似Cuda compilation tools, release 11.8, V11.8.89的字样CUDA安装配置就成功了。我还见过一种做法是把环境变量写进/etc/profile.d/cuda.sh这样对所有用户生效。对于个人开发机写进~/.bashrc就够了但对于那种多用户共用的服务器建议用/etc/profile.d的方式免得别的用户连nvcc都找不到还要来问你原因。3.4 NVIDIA驱动版本的重新确认装完CUDA之后nvcc -V看到的是你的CUDA Toolkit版本这时候再用nvidia-smi看右上角你会发现那个CUDA Version数字可能和你的CUDA Toolkit版本不一样这是正常的。nvidia-smi显示的CUDA Version指的是驱动支持的最高CUDA API版本是一个兼容性上限不是当前实际安装的版本。比如驱动显示12.4但你装的是CUDA 11.8那么只要11.8的组件不超过12.4的范围就能正常工作。3.5 Windows平台CUDA安装要点Windows下用setup.exe安装就会简单一些双击打开选择自定义安装建议把Visual Studio Integration勾上前提是装好了VS其他组件按需选择。特别提醒一下安装路径建议保持C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8因为很多工具默认从这个路径找CUDA改路径会增加额外麻烦。装完之后系统环境变量会在安装时自动配置好但最好还是去检查一下CUDA_PATH是否存在。4. cuDNN下载、安装与配置4.1 cuDNN版本怎么选cuDNN的版本号和CUDA是严格绑定的下载页面会明确标注for CUDA 11.x或者for CUDA 12.x。选择和你安装的CUDA完全对应的版本就行比如你装的是CUDA 11.8那就选cuDNN for CUDA 11.x。另外cuDNN底下还会分不同库类型最常见的是Library for Linux也就是tar包Local Installer for Ubuntudeb包我推荐用tar包因为它的安装过程就是解压和复制文件简单直观也方便卸载和升级。4.2 下载cuDNNcuDNN的下载需要NVIDIA账号不像CUDA那样直接给链接就能拉。下载时官方会让你选平台和发行版选Linux x86_64就行了。这里插一句很多时候你找cuDNN下载链接时官网会给你一个需要登录跳转的页面不是直接就能wget。要脚本化下载也行但需要先登录拿到一次性下载链接。日常使用的话直接浏览器手动下载最省事。4.3 解压并复制文件下载下来的文件通常是cudnn-linux-x86_64-8.9.5.29_cuda11-archive.tar.xz。执行tar -xvf cudnn-linux-x86_64-8.9.5.29_cuda11-archive.tar.xz解压后会有一个同名的目录里面包含include、lib和bin等子目录。接下来把对应的文件复制到CUDA目录中sudo cp cudnn-linux-x86_64-8.9.5.29_cuda11-archive/include/cudnn*.h /usr/local/cuda/include/ sudo cp cudnn-linux-x86_64-8.9.5.29_cuda11-archive/lib/libcudnn* /usr/local/cuda/lib64/ sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*最后一行chmod是给所有用户添加读权限这一步官方文档里有明确要求。省略这步的话后续在别的用户权限下运行深度学习框架很可能会报Permission denied排查起来特别绕。如果你的LD_LIBRARY_PATH里面已经包含了/usr/local/cuda/lib64那么动态链接库在运行时就能被程序找到不需要额外配置。如果你把CUDA装到了非默认路径记得把对应路径也加进LD_LIBRARY_PATH。4.4 conda场景下cuDNN的另一种装法如果你用的是conda环境跑PyTorch或TensorFlow其实还有一种更省事的方案直接用conda把CUDA运行时和cuDNN一起装进虚拟环境conda install cudatoolkit11.8 cudnn8.9.5这种安装方式只在当前conda环境内生效不会影响系统里的CUDA状态。它的好处是隔离性好不会和系统环境冲突坏处是它只包含运行时库没有nvcc编译器所以如果你要自己编译CUDA扩展比如某些自定义算子还是需要系统层面装一个完整的CUDA Toolkit。以我的经验conda方式适合我只想跑模型训练不写CUDA代码的人runfile完整安装适合我要做CUDA开发的人。两条路线可以共存互不干扰但前提是你心里清楚当前项目用的是哪套环境。5. 验证安装从命令行到实际跑通一个程序装完CUDA和cuDNN之后不做验证就急着跑模型往往会在真正跑起来时被一连串报错打懵。验证工作其实用不了几分钟甚至能帮你定位具体是哪个环节出了问题。5.1 快速检查常用命令# 查看驱动信息和驱动支持的CUDA版本上限 nvidia-smi # 查看CUDA Toolkit编译工具版本 nvcc -V # 查看cuDNN版本 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2cuDNN新版把版本信息放在cudnn_version.h里老版本可能在cudnn.h里。你查看一下包含的头文件从中找到CUDNN_MAJOR、CUDNN_MINOR、CUDNN_PATCHLEVEL就能拼出完整的版本号。5.2 用官方示例程序跑一次deviceQuery在CUDA安装包中默认是没有示例代码的。你可以在通过runfile安装时选择安装CUDA Samples也可以手动从官网或GitHub上下载。我建议直接把示例代码下载下来git clone https://github.com/NVIDIA/cuda-samples.git cd cuda-samples/Samples/1_Utilities/deviceQuery make ./deviceQuery如果最后输出Result PASS说明你的CUDA Toolkit和驱动配合正常GPU也进得了计算模式CUDA这一层的验证就完成了。编译过程中如果报错找不到cuda_runtime.h多半是环境变量没配好或者安装时没有选择安装开发组件。把/usr/local/cuda/include加到CPLUS_INCLUDE_PATH后重试一般就能解决。5.3 在PyTorch里验证cuDNN是否生效python -c import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.backends.cudnn.version())如果输出显示torch.cuda.is_available()为Truetorch.backends.cudnn.version()能打出一个数字比如8905那就说明你的PyTorch已经能用到CUDA和cuDNN了。TensorFlow那边类似python -c import tensorflow as tf; print(tf.test.is_gpu_available())顺便多说一句如果torch.cuda.is_available()是False先别急着怀疑cuDNN很多时候是PyTorch版本和CUDA版本不匹配导致的。比如PyTorch官方只提供到CUDA 12.1的支持你却装了CUDA 12.4那PyTorch在这台机器上不一定能识别到GPU得装对应CUDA 12.1版本的PyTorch才行。5.4 验证时的权限问题如果上面这些命令在某些用户下无法执行提示找不到nvcc或无法加载.so库先看看当前用户有没有对/usr/local/cuda的读权限。很多人习惯用sudo安装但忘了给普通用户开放权限结果root用户一切正常换个人就全废。解决方法是确认环境变量然后检查目录权限ls -l /usr/local/cuda sudo chmod -R arX /usr/local/cuda6. 常见问题与排查技巧实录6.1 gzip: stdin: invalid compressed data -- format violated这个报错很典型特别是在执行.run文件时。这个错误的含义是系统把这个文件当成了gzip压缩包来处理但解压失败。发生这种情况八成是你下载的文件不完整或者是网页跳转后拿到了一个HTML错误页而不是真正的安装包。排查方法很简单先看文件大小ls -lh cuda_11.8.0_520.61.05_linux.run如果只有几百KB或者几MB而官网标注的是几个GB那必然有问题。重新下载用带断点续传的方式wget -c 下载链接还有一种情况是下载回来的文件被浏览器或代理服务器改动过造成格式错误换一个下载工具或者换一个网络环境也能解决。6.2 Visual Studio Integration找不到Windows装CUDA时报No supported version of Visual Studio was found方法很简单先确认你已经安装了Visual Studio。这里特别提醒CUDA不认Visual Studio Code它只认Visual Studio也就是那个好几个人GB的IDE。确认装好之后如果还是报这个错可以检查一下VS是否包含了C桌面开发工作负载。如果没有用Visual Studio Installer把它加上然后再安装CUDA就能顺利集成。如果你装完了CUDA之后才想起要装VS那也不需要重装CUDA可以直接在安装目录下的extras里搜索visual_studio_integration.exe手动安装一次即可。6.3 CUDA Samples找不到如果你在runfile安装时没有勾选CUDA Samples或者安装之后改了路径导致找不到解决方法是直接从GitHub克隆下来编译。我在前面第5部分已经写了具体命令。需要注意的是不同CUDA版本对应的samples分支可能不一样最好用和你CUDA版本匹配的tag否则有可能编译不过去。一个常被忽略的问题是samples编译时需要用到部分CUDA的额外库比如libGL、libX11等。如果你用的是精简版Linux系统需要先补充这些依赖库否则make会在链接阶段报缺少库文件的错误。6.4 多个CUDA版本共存与切换不少人的机器上会同时存在CUDA 11.8和CUDA 12.1等多个版本最常见的原因是不同项目依赖不同的CUDA。多版本共存的好办法是保留各自的版本目录通过修改软链接/usr/local/cuda来切换默认版本。sudo rm -rf /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda这样切换之后nvcc -V就会立刻变成对应版本。前提是PATH和LD_LIBRARY_PATH都指向/usr/local/cuda这个软链接路径而不是写死某个版本目录。有些项目会通过虚拟环境或Docker来锁定CUDA版本这种隔离方案在团队协作或者需要快速切换多个环境时特别有用可以理解为环境层面的多版本管理。如果你经常在多个深度学习框架之间来回切换我建议至少学会使用Docker把CUDA环境封装起来能省掉大量重复装环境的痛苦。6.5 新装的CUDA却提示找不到驱动如果你运行nvcc -V正常但一跑CUDA程序就报错说找不到libcuda.so.1或者类似内容先检查一下你的LD_LIBRARY_PATH是否包含了/usr/local/cuda/lib64。有些安装脚本会改写ld.so.conf设置但更新不及时可以手动执行sudo ldconfig让动态链接器重新加载一次配置。如果还不行检查一下驱动是否稳定存在。有些人在装CUDA时把驱动组件覆盖了导致驱动没了而CUDA Toolkit里的组件又依赖驱动库这时候只能用nvidia-smi确认一下驱动状态有问题就重装驱动。6.6 Python环境里import torch却报CUDA错误这类问题的报错信息通常很长但关键就一句话CUDA runtime版本和driver版本不匹配或者PyTorch编译时用的CUDA版本和你当前环境不一致。我的排查顺序是先看nvidia-smi确认驱动支持的上限。再看nvcc -V确定当前的Toolkit版本。再看PyTorch版本对应的CUDA版本python -c import torch; print(torch.version.cuda)。三个数字放在一起比较如果PyTorch要求的版本高于驱动支持的上限那只能降PyTorch或者升级驱动。很多时候问题不是装错了而是环境配置里同时存在多套CUDA相关的变量。比如conda base环境里有一套系统里又有一套PYTHONPATH、LD_LIBRARY_PATH相互覆盖程序加载了错误的运行库。解决方式是用echo $LD_LIBRARY_PATH看清楚当前所有路径按优先级排列确认到底加载的是哪个版本的库。6.7 4060Ti这类新卡对CUDA版本有什么要求这里单独说一下因为很多人在评论区问新显卡的问题。4060Ti等较新的显卡使用Ada Lovelace架构在驱动足够新525系列以上的前提下CUDA 11.8也能用。但要注意如果你要充分发挥新架构的特性比如利用新的Tensor Core能力还是建议至少装CUDA 11.8以上配合PyTorch官方适配的CUDA 11.8版本使用。不要太担心新卡必须配新CUDA这种说法实际上CUDA的兼容性做得很好只要驱动版本够新旧的CUDA Toolkit也能驱动新显卡。前提是驱动版本要超过对应的最低要求。6.8 下载太慢、总是失败怎么办CUDA和cuDNN的官方安装包体积不小下载经常遇到速度慢甚至中断的问题。我的做法是用下载工具带线程数的方式aria2c -x 8 -s 8 下载链接-x指定单服务器连接数-s指定分片数能显著提速。如果官方链接本身不稳定可以考虑使用镜像站或者云厂商的镜像源选择一个速度稳定的下载。但要注意从非官方途径下载文件后一定要校验一下MD5或SHA256下载源不可信时这一步尤其重要避免装了个被篡改的安装包。7. 关于安装策略的最后一点个人建议装CUDA和cuDNN这件事说难不难说简单也不简单关键在于第一次就把版本对应关系理清楚。我个人经验是先定框架版本再定CUDA版本最后定cuDNN版本和驱动门槛这个顺序反过来就容易出问题。因为你的最终目的是让PyTorch或者TensorFlow能正常用GPU框架支持的CUDA版本就是你整个环境的天花板其他所有组件都得服务于这个目标。在安装方式上我建议系统层面用runfile装一个完整CUDA Toolkit日常跑模型的时候再用conda或者Docker隔离环境。这样既能做底层开发又能快速切换不同项目需求。这么多年用下来这个组合是最稳的几乎没有遇到过怎么都装不好的绝症式问题。还有一个小技巧是每装完一个环境第一时间把版本号记录到一个文件里包括系统版本、驱动版本、CUDA Toolkit版本、cuDNN版本、框架版本甚至Python版本。等你需要复现一个旧项目或排查一个诡异bug时这份记录比任何记忆都可靠。吃过的亏多了你就知道这个习惯有多重要了。