ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CUDA环境配置实战:从驱动到PyTorch GPU加速的完整指南

CUDA环境配置实战:从驱动到PyTorch GPU加速的完整指南 CUDA 环境配置的坑我前前后后踩了个遍今天把整个流程一次讲透。从驱动检查、CUDA Toolkit 安装、cuDNN 拷贝到 PyTorch 的 GPU 版本验证每一步该怎么操作、为什么要这么操作我都会展开细说。这篇文章不是给那种“一路点下一步”的安装教程而是把版本匹配逻辑、环境变量原理、报错排查方法都梳理清楚让你装完之后敢说自己是“真的会配”而不是“碰巧跑通了”。先说它是什么、能解决什么问题。CUDA 是 NVIDIA 提供的并行计算平台负责让 GPU 不只干图形渲染还能跑通用计算cuDNN 是深度学习的加速库专门优化卷积、池化、归一化这些神经网络里最常见也最耗时的操作PyTorch 则是目前最主流的深度学习框架之一需要调用 CUDA 和 cuDNN 才能在 GPU 上高效训练模型。三者的关系可以理解为地基是驱动第二层是 CUDA Toolkit第三层是 cuDNN上面才是 PyTorch。如果你在训练模型时发现 CPU 占用飙升、GPU 占用却显示 0%或者跑模型时直接报 CUDA 不可用大概率就是这一层一层的依赖关系没理顺。这篇文章适合所有准备入坑深度学习、炼丹跑模型、或者准备部署推理服务的开发者。无论你用的是 Windows 还是 WSL、Ubuntu 服务器无论你是要装全新的环境还是要在已有的 CUDA 基础上安装 PyTorch看完这篇文章都能少走几个小时的弯路。1. 环境配置前的整体思路与版本选型1.1 搞清楚四层依赖关系才能不被版本问题折磨很多人安装失败不是因为不会点鼠标而是根本不知道自己装的东西之间是什么关系。从硬件到软件整条链路的依赖顺序是这样的GPU 硬件比如 RTX 3090、A100、RTX 4090它本身只是硬件需要驱动才能被系统识别。GPU 驱动NVIDIA Driver它提供了操作系统和 GPU 硬件之间的接口。没有驱动系统根本看不到显卡。CUDA Toolkit也就是我们常说的“CUDA”它是一整套开发工具包包含编译器、运行时库、调试工具等。它依赖驱动但驱动不依赖它。这句话很关键待会儿要多说几遍。cuDNN是 CUDA 生态里的深度神经网络加速库它必须匹配特定版本的 CUDA Toolkit不是随便拿一个版本就能用。PyTorch是深度学习框架它内部绑定了一个特定版本的 CUDA 运行时对用户来说是隐形的并依赖 cuDNN 做卷积加速。所以在动手之前第一件事不是下载安装包而是先确定自己要装什么版本的 CUDA、cuDNN 和 PyTorch。很多人图省事直接装最新版反而容易翻车因为最新版 CUDA 往往不被当前流行的 PyTorch 版本支持。1.2 版本匹配选型的实操思路你在选择版本时建议牢记四个字反向推导。我的习惯是先确定你想要的 PyTorch 版本然后根据 PyTorch 官方给出的 CUDA 版本要求去选择 CUDA Toolkit 和 cuDNN 的版本最后检查驱动是否满足要求。换句话说PyTorch 是老板CUDA 和 cuDNN 是员工驱动是会议室。举个例子目前 PyTorch 官方pytorch.org首页给的安装命令一般会有cu118、cu121、cu124、cu126等不同后缀这表示 PyTorch 对应的 CUDA 运行时版本。比如pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124意思就是安装一个内置 CUDA 12.4 运行时库的 PyTorch 版本。这里有个非常容易被新手误解的地方你用 pip 装的 PyTorch GPU 版本并不需要你的电脑上“预装”一模一样的 CUDA Toolkit 12.4。因为 PyTorch 的 GPU 版 wheel 包里已经打包了它所需的 CUDA 运行时库通常叫nvidia-*-cu12之类的依赖包。你需要做的是保证NVIDIA 驱动的 CUDA 版本号 PyTorch 所需的 CUDA 版本号至于你系统里装没装 CUDA Toolkit其实是另一回事。听起来有点绕我拆开说系统里的 CUDA Toolkit 主要是给编译器比如nvcc用的让你自己从源码编译 CUDA 扩展代码。PyTorch 自己带的 CUDA 运行时库是给模型运行时调用的。只要驱动版本够新你系统里没单独装 CUDA Toolkit照样可以用 PyTorch 的 GPU 版训练模型。很多教程上来就让你装 CUDA Toolkit这对纯跑 PyTorch 用户来说其实不是必需的但为了让实验环境更可靠、方便以后编译扩展模块通常还是建议装一份与 PyTorch 相关的 CUDA Toolkit。这篇文章按完整方案配置把两部分都覆盖到。1.3 确定版本前需要收集的信息动手前你需要先查看两个关键信息NVIDIA 驱动的版本号和支持的 CUDA 上限。Windows 下在命令行输入nvidia-smi右上角会显示CUDA Version: 12.4之类的字样。这里显示的版本号是当前驱动所能支持的最高 CUDA 版本不是系统里已经安装的 CUDA Toolkit 版本。只要这个数字 你要安装的 CUDA Toolkit 版本驱动就能满足要求。操作系统的位数和 Windows 版本一般用 64 位 Windows 10/11 或 Linux 64 位。如果nvidia-smi显示 CUDA Version 是 11.x而你非要装 CUDA 12.4那就需要先更新显卡驱动。驱动版本与 CUDA 版本的对应表在 NVIDIA 官方文档里有但更简单的方法就是看 nvidia-smi 的输出升级驱动到较新版本后一般都能兼容当前所有的 CUDA 版本。2. GPU 驱动与 CUDA Toolkit 安装实操作业2.1 先搞定 NVIDIA 驱动检查驱动是否就绪的通用方法就是上面提到的nvidia-smi。Windows 下如果提示找不到命令打开 PowerShell 或 CMD 执行nvidia-smi如果提示“无法识别”有几种可能驱动没装好、装的是非 NVIDIA 显卡、或者是系统 PATH 里没有 NVIDIA 的路径。NVIDIA 驱动默认安装路径在 Windows 下是C:\Windows\System32\nvidia-smi.exe如果只有这个文件夹下没有可以手动把该目录加到 PATH 里。Linux 下一般在/usr/bin/nvidia-smi。驱动安装这里说一个 Windows 下的经验不要用 Windows 自动更新给你的显卡驱动尽量去 NVIDIA 官网下载 Game Ready 或 Studio 驱动。Windows 自动更新给的驱动不一定是全量驱动某些版本可能不包含完整的 CUDA 运行时兼容层导致后续跑 GPU 程序时出现莫名其妙的 bug。2.2 CUDA Toolkit用 exeWindows还是 runLinux去 NVIDIA CUDA Toolkit 官网下载页面developer.nvidia.com/cuda-downloads选择你的操作系统版本然后挑选对应的 CUDA 版本。我建议按如下方式选择安装方式Windows选择exe (local)。安装时会经过“环境检查 - 许可协议 - 安装选项”这一套流程比较省心。虽然官方也提供exe (network)但网络版安装容易因为下载中断或网络问题失败本地版更稳定。Linux建议用runfile (local)方式即.run包。不太建议用 deb 包Debian/Ubuntu虽然它安装简单但如果你需要切换多版本 CUDAdeb 包会把文件装到/usr下版本隔离不如 runfile 干净。Windows 安装时的关键选项在安装 CUDA Toolkit 时会看到一个组件列表包含 CUDA 核心、Documentation、Development、Runtime、Visual Studio Integration 等。这里注意几点如果你电脑装了 Visual Studio可以勾选 “Visual Studio Integration”它会把 CUDA 的构建工具集成到 VS 里方便以后跑 CUDA 扩展代码。如果不想勾选 VS Integration完全不影响 PyTorch 使用。建议安装路径保留默认的C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4这种形式。虽然官方支持自定义路径但把路径改得乱七八糟后患无穷因为很多后续工具默认去这个固定路径找 CUDA。安装完成后系统会自动把两个关键路径加入 PATH 环境变量C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\libnvvp你可以手动检查一下如果没加就自己加上。验证 CUDA Toolkit 是否安装成功新开一个命令行窗口注意一定要重新打开否则环境变量不生效输入nvcc -V如果输出大段版本信息说明 CUDA Toolkit 已经装好。如果提示找不到命令多半是 PATH 没生效或没加对路径。这里有个常见误区nvidia-smi右上角显示的是驱动支持的最高 CUDA 版本而nvcc -V显示的是系统里安装的 CUDA Toolkit 的版本。两者版本号不一定一致也没必要一致。前者只要 后者即可因为驱动是向下兼容 CUDA 版本的。2.3 CUDA 环境变量的原理与配置细节CUDA 安装完成后除了 PATH 还有两个关键的环境变量值得手动确认CUDA_PATH一般安装器会设置为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4有些自主编译工具比如 CMake会读取这个变量来找 CUDA。CUDA_HOME这个不是 CUDA 官方安装器自动设的但很多第三方工具包括某些 Python 扩展包、XGBoost、LightGBM 的 GPU 版会优先找它。建议手动添加一个和CUDA_PATH一样的值。在 Windows 上添加环境变量的路径“设置 - 系统 - 关于 - 高级系统设置 - 环境变量”。在“系统变量”里新建CUDA_HOME值指向你的 CUDA 安装目录即可。Linux 下如果用了 runfile 方式安装默认装在/usr/local/cuda-12.4目录下同时会有一个软链接/usr/local/cuda指向当前使用的默认 CUDA 版本。需要把下面这几行加到~/.bashrc里export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH export CUDA_HOME/usr/local/cuda加了之后记得source ~/.bashrc或开一个新终端。很多 Linux 用户配完发现nvcc -V不识别十有八九是没 source 或者说环境变量没写对。3. cuDNN 下载、安装与验证3.1 cuDNN 是什么为什么必须有它cuDNNCUDA Deep Neural Network library是 NVIDIA 专门针对深度学习场景优化的 GPU 加速库。深度学习框架比如 PyTorch、TensorFlow在 GPU 上执行卷积、池化、归一化、LSTM 等算子时不是自己从头写 CUDA 内核而是调用 cuDNN 里预先优化好的接口。没有 cuDNNPyTorch 也能跑但速度会大打折扣。实际上PyTorch 的安装包内部会自动捆绑一个经过测试的 cuDNN 版本所以从兼容性上来讲系统级要不要另外装 cuDNN 完全取决于你未来是否需要自己编译带 cuDNN 的扩展模块。但既然这篇讲“CUDAcuDNNPyTorch 全流程配置”那我们就一步到位把系统级的 cuDNN 也装了。以后遇到自己编译安装某个深度学习算子的源码包时就不会因为缺 cuDNN 而报错。3.2 cuDNN 版本怎么挑cuDNN 的版本号规则是cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip这种格式其中_cuda12表示它适配 CUDA 12.x8.9.7.29是 cuDNN 的版本号。核心原则cuDNN 的大版本必须和 CUDA Toolkit 的大版本对应。比如 CUDA 12.4 配 cuDNN for CUDA 12 就行你不需要去搞清 8.9.7.29 和 8.9.5.30 之间那么多细枝末节的差异。除非特定模型/框架有明确要求否则选择最新一个即可。从 NVIDIA 官网下载 cuDNN 需要注册并登录这一点对很多国内开发者来说比较烦但也没办法绕过。下载时注意选对平台Windows 选WindowsLinux 选LinuxWSL 选WSL版本。3.3 Windows 下安装 cuDNN解压复制法cuDNN 的安装方式非常粗暴解压之后把对应文件复制到 CUDA Toolkit 的安装目录里。下载下来的压缩包解压后里面的目录结构长这样cudnn-windows-x86_64-8.9.7.29_cuda12-archive/ ├── bin ├── include └── lib操作步骤把bin目录里的.dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin。把include目录里的.h文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\include。把lib目录里的.lib文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\lib\x64。就这三步不需要安装程序不需要写注册表。复制完之后cuDNN 就“装好”了。注意旧版 cuDNN 需要复制到lib\x64新版本同样复制到这个位置。如果你发现lib下有x64子目录就放进x64没有就直接放lib。复制时如果提示文件已存在选择覆盖即可因为新文件版本肯定更全。3.4 Linux 下安装 cuDNN同样是复制法Linux 下的tar.gz压缩包解压后目录结构类似命令如下tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz cd cudnn-linux-x86_64-8.9.7.29_cuda12-archive sudo cp include/cudnn*.h /usr/local/cuda/include/ sudo cp lib/libcudnn* /usr/local/cuda/lib64/ sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*最后一行chmod ar很关键如果不加其他用户或某些进程可能没有读取权限运行时会出现诡异的问题。验证 cuDNN 是否安装成功没有专门稳定的命令行工具来直接查 cuDNN 系统版本常用的验证方法是直接查看文件版本Windows 下在bin目录里找到cudnn*.dll右键属性 - 详细信息 - 文件版本Linux 下运行cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2或者找cudnn_version.h/cudnn.h里的这些宏。另外如果你只是想在 PyTorch 中确认 cuDNN 是否可用后面第 4 节里的 PyTorch 自检代码就可以搞定。4. PyTorch 安装与环境验证4.1 千万不要直接在官网首页复制安装命令先想清楚PyTorch 官网首页会根据你选择的配置生成一条安装命令看起来非常方便但这里藏了两个风险点官网默认勾选的 CUDA 版本不一定和你的环境匹配。如果你当前驱动只支持到 CUDA 12.1却选了 cu126可能装完跑不起来虽然一般情况下驱动向下兼容但稳妥起见还是对一下。它默认用 pip 装 C 预编译 wheel这些 wheel 包体积很大几百 MB 到 1GB靠国内网络直接下载可能很慢或中断。后来我发现用国内镜像源装 PyTorch GPU 版比直接从官网下载稳定得多。具体做法是用 pip 指定https://mirrors.aliyun.com/pytorch-wheels/cu124这类镜像源路径或者直接用pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple清华源再补充安装 nvidia 相关依赖。不过我需要多说一句如果你用的是 PyTorch 官方论坛或官网推荐的方式那么直接复制官网命令也行前提是网络条件好。对于大多数国内开发者我推荐下面这个稳定方案。4.2 用 Anaconda 创建独立环境避免把系统环境搞乱深度学习环境最忌讳的就是把 torch、tensorflow、jax 等统统装在一个基础 Python 环境里。基于我个人的使用经验强烈建议先安装 Anaconda 或 Miniconda然后用 conda 创建虚拟环境再装 PyTorch。隔离的好处在于不同项目的 CUDA/PyTorch 版本可以在不同环境里各装各的互不干扰。删掉某个环境就是一条conda remove -n 环境名 --all干净利落。在有多个 CUDA 版本的机器上conda 环境切换比手动改系统环境变量要灵活得多。创建环境的命令conda create -n pytorch python3.10 conda activate pytorchPython 版本建议选 3.9 到 3.11 之间的较新小版本。PyTorch 对 Python 3.10 的兼容性已经非常成熟不建议再选 3.7/3.8太老很多扩展库不兼容。4.3 pip 安装 PyTorchGPU 版激活 conda 环境后执行安装。以 CUDA 12.4 为例pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124如果你想用国内镜像加速可以改为pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple但是用清华源时PyPI 镜像里的 torch 不一定带 GPUCUDA支持默认可能是 CPU 版本这个坑我踩过好几次。如果你不确定装完之后一定要做 GPU 验证见 4.4发现是 CPU 版本再换源。另外如果你需要指定版本可以这样写pip install torch2.1.2 torchvision0.16.2 torchaudio2.1.2 --index-url https://download.pytorch.org/whl/cu121为什么不建议用 conda 直接装 PyTorchconda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia这条命令也很经典专门装 GPU 版本但 conda 在解析依赖时容易把 CUDA 相关的一堆包cudatoolkit、cudnn 等一起装进环境导致环境体积变大而且 conda 的软件源更新不如 pip 快。我现在的习惯是conda 管环境pip 管包。用 conda create 创建干净环境然后一律用 pip 安装深度学习相关的库。这个组合是我实测下来最稳的方案。4.4 验证 PyTorch 是否真的在用 GPU安装完成后进入 Python 环境执行下面的代码验证import torch print(torch.__version__) print(torch.version.cuda) print(torch.backends.cudnn.version()) print(torch.cuda.is_available())如果你看到torch.cuda.is_available()返回True并且倒数第二行打印出一个数字比如90100这种说明 CUDA 和 cuDNN 都被 PyTorch 正确识别了。如果返回False则需要往下看第 6 节排查。你还可以做一个更彻底的性能测试确保 GPU 真正参与了计算import torch x torch.randn(10000, 10000, devicecuda) y torch.randn(10000, 10000, devicecuda) z x y print(z.sum().item())能够正常运行不报错说明 GPU 计算链路是通的。4.5 VSCode 下跑 PyTorch 与 CUDA 代码的环境检查很多同学喜欢用 VSCode 写深度学习代码。VSCode 本身只是一个编辑器跑 Python 代码靠的是 Python 扩展和解释器选择这一点比较简单安装 Python 扩展。在 VSCode 右下角或按CtrlShiftP选择 “Python: Select Interpreter”选你 conda 创建的那个pytorch环境的解释器。打开一个.py文件直接运行后面就算调用 CUDA 接口也不会有问题。需要特别注意VSCode 的终端默认要激活 conda 环境。如果你刚在 VSCode 里打开新终端输入conda activate pytorch发现提示命令找不到多半是 conda 初始化没写入 shell。在 Windows PowerShell 里可以运行一次conda init powershell然后重新打开 VSCode 终端就能正常conda activate了。5. 多版本 CUDA 与 cuDNN 的协同管理5.1 为什么需要多个 CUDA 版本以及如何处理实际项目中模型 A 可能依赖于 PyTorch cu111 的旧版本而模型 B 已经用上了 cu124。如果你只有一台机器不想为了项目去重装系统或来回卸载驱动那就必须掌握多版本 CUDA 共存的方法。核心思想是CUDA Toolkit 都是安装在独立目录下的Windows 是v12.2、v12.4这种命名方式Linux 是/usr/local/cuda-12.2、/usr/local/cuda-12.4彼此并不冲突。冲突只发生在 PATH、LD_LIBRARY_PATH 这些环境变量的指向以及某些工具默认去寻找/usr/local/cuda软链接的时候。在 Linux 下管理多版本 CUDA 的优雅做法是切换软链接sudo rm /usr/local/cuda sudo ln -s /usr/local/cuda-12.4 /usr/local/cuda这样/usr/local/cuda这个默认路径指向哪个版本环境变量里写的/usr/local/cuda/bin就会用哪个版本。在 Windows 下没有软链接这么方便我常用的做法是干脆不设置系统级的CUDA_PATH而是在每个需要不同 CUDA 版本的项目的激活脚本里动态设置。比如在你的 conda 环境激活时通过activate.d脚本去指定 PATH。5.2 在 conda 环境内局部指定 CUDA 版本一个更符合日常开发习惯的做法是把 CUDA 的路径加到 conda 环境变量里而不动系统全局的 PATH。比如你想在pytorch124这个环境里使用 CUDA 12.4conda activate pytorch124 conda env config vars set CUDA_HOME/usr/local/cuda-12.4 conda env config vars set LD_LIBRARY_PATH/usr/local/cuda-12.4/lib64执行后会让变量只对该 conda 环境生效。这样你开多个环境各用各的 CUDA 版本互不干扰。这是我在实际项目中管理几个不同模型环境时最常用、也最推荐的方式。5.3 检查当前环境里 PyTorch 真实使用的 CUDA 版本有时候你机器上装了 CUDA 12.4但 PyTorch 内部用的是自带的 CUDA 11.8这并不冲突。要查看 PyTorch 内部使用的 CUDA 版本用前面第 4.4 节里torch.version.cuda即可。不要用系统 nvcc 的版本去断言 PyTorch 的 CUDA 版本两者没有强绑定关系。这是因为 PyTorch 的 wheel 包自带了它所需的 CUDA 动态库如cudart64_12.dll、cublas64_12.dll等。你在pip list | grep nvidia里会看到一堆nvidia-*相关的包这些就是 PyTorch 自带的 CUDA 依赖。所以底层逻辑再次确认驱动 目标 CUDA 版本PyTorch 就能跑有没有系统级 CUDA Toolkit 不是硬性前提。6. 高频问题排查与避坑实录6.1 常见报错速查表我整理了平时请教最多、以及网上搜到热度最高的几个报错场景做成一个速查表大家可以按图索骥。问题现象可能原因解决办法torch.cuda.is_available()返回 False装成了 CPU 版 PyTorch、驱动过旧、或 N 卡未启用先torch.__version__看有没有cu1xx后缀再跑nvidia-smi看驱动识别情况最后检查 conda 环境是否混淆安装时No supported version of Visual Studio foundWindows 下的 CUDA 安装器检测不到 VS 的 C 编译工具如果不需要自己编译 CUDA 扩展可以直接忽略安装继续如果后续要编译 C/CUDA 混合代码安装 VS Build Tools 的“使用 C 的桌面开发”工作负载CUDA error: no kernel image is available for execution on the device显卡计算能力Compute Capability太老与新版 CUDA 不兼容降低 CUDA 版本或换用 PyTorch 对旧 GPU 更友好的老版本cuda .run gzip: stdin: invalid compressed data -- format violated下载的.run文件不完整或下载过程损坏重新下载推荐用wget -c断点续传下载后先比对文件大小与官网标注是否一致cudnn 版本不匹配符号找不到 cudnn_xxx系统 cuDNN 与 PyTorch 自带的 cuDNN 不兼容或环境 LD_LIBRARY_PATH 指向了错误的目录优先保证 PyTorch 自带的 cudnn 可用不要手动把系统版 cuDNN 的 lib 路径粗暴地加到 LD_LIBRARY_PATH 最前面library cudnn_ops_infer.so.8 not found运行时报错找不到 cudnn检查 cuDNN 是否复制到/usr/local/cuda/lib64确认没有用 conda 环境把老版本 cudnn 顶掉Failed to get convolution algorithm.cuDNN 初始化失败通常是显存不足或 cudnn 库损坏先检查显存是否够用再重新复制一遍 cuDNN最后尝试在代码里设置torch.backends.cudnn.enabledFalse作为临时绕过方案6.2 Windows 下安装 CUDA 报 Visual Studio Integration 错误的处理这个报错非常高频。在 CUDA 安装器选择安装选项时如果勾选了 Visual Studio Integration而本机装的 Visual Studio 版本与 CUDA 不支持时就会弹出标题栏里的那个错误。处理方法很简单不勾选 Visual Studio Integration 就好。对于纯 PyTorch 用户来说这个组件完全无关紧要。如果你以后确实需要从源码编译包含 CUDA 的 Python 扩展包需要做的是先安装 Visual Studio 2022 并勾选“使用 C 的桌面开发”工作负载然后再重新运行 CUDA 安装器补齐组件而不是靠强行绕过错误。6.3 Linux 下.run包下载损坏导致 gzip 报错标题热搜词里有cuda .run gzip: stdin: invalid compressed># 先看文件大小和官网页面标注对比 ls -l cuda_12.4.0_550.54.14_linux.run # 用 wget 断点续传重新下载 wget -c https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run下载完再检查一下校验值页面上一般会附 sha256确认没问题后加执行权限并运行chmod x cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run6.4 多个 Python 环境下的 pip 安装错乱如果你用 Anaconda 管理环境但发现无论怎么pip install最后torch.cuda.is_available()都是 False先检查一下你当前用的python和pip是不是同一个环境的。which python which pip如果which python指向/usr/bin/python而不是 conda 环境路径说明你在命令行激活环境时失败了。重新执行conda activate pytorch然后用python -m pip install torch ...保证用的是当前环境的 pip。6.5 WSL 下安装 CUDA 的特殊情况WSLWindows Subsystem for Linux这两年非常流行很多人在 Windows 上开发、到 WSL 里跑训练。WSL 里装 CUDA 有一条捷径不需要在 WSL 里安装完整的显卡驱动只需要在 Windows 侧装好 NVIDIA 驱动然后 WSL 内部可以用/usr/lib/wsl/lib/nvidia-smi访问 GPU。WSL 里的安装步骤通常是在 Ubuntu 里装 CUDA Toolkit 的 WSL-Ubuntu 版本这一步要特别注意不要安装 .run 里的驱动部分。在 runfile 安装过程中它可能会尝试安装 NVIDIA 驱动这时应该选择不安装驱动只装 CUDA Toolkit。WSL 下 PyTorch 的 GPU 验证方式和原生 Linux 几乎一样python -c import torch; print(torch.cuda.is_available())如果返回 True就说明 WSL 环境下的 GPU 支持已经打通。6.6 排查思路总结三步定位法遇到任何与 CUDA 相关的报错按以下顺序排查看驱动nvidia-smi能不能正常输出 GPU 信息右上角 CUDA 版本是否足够新。看 PyTorchtorch.cuda.is_available()是否为 Truetorch.version.cuda是哪个版本torch.backends.cudnn.version()能不能返回数字。看环境变量当前 shell 的 PATH、LD_LIBRARY_PATH 里有没有指向错误版本的 CUDA或者有没有盲目地把多个 CUDA 版本的 lib 混在一起。按这三步走90% 以上的环境问题都能定位出来。剩下的 10%要么是硬件太老要么是驱动版本和 CUDA 版本跨度太大直接卸载驱动重装新版即可。7. 最后分享一点实操体会我在给不同机器配置环境时最深的感受是能今天装完不拖到明天能用 conda 隔离不用系统环境能固定版本不轻易 upgrade。很多看起来像“玄学”的报错最后都查出来是因为某个库被升级了。所以等你的环境终于跑通之后我强烈建议用pip freeze requirements.txt把环境锁一份之后就算重装系统恢复也就几分钟的事。另外配置完当前这套 CUDA cuDNN PyTorch 环境之后建议顺手跑一个简单的图像分类模型或 GPT 小模型的训练脚本验证一下多卡如果有和混合精度是否正常。一次完整的训练流程跑通才叫真的环境可用。我自己第一次配完环境光跑通torch.cuda.is_available()就以为大功告成结果后来一跑 ResNet 训练才发现 cuDNN 的 benchmark 模式会崩花了不少时间排查。那句话怎么说来着验证一个环境是否可靠的最好方式就是跑一个真实的任务。祝各位一次成功顺利炼丹。
返回列表