
折腾深度学习环境这件事说它是玄学也不算冤枉。我见过太多人显卡插上、nvidia-smi能跑结果torch.cuda.is_available()给你返回个False然后在搜索引擎里反复横跳NVIDIA驱动、CUDA、cuDNN、PyTorch、MMCV 这五个东西到底谁管谁谁依赖谁版本怎么对装了三天重装五次系统最后靠着某个早已被遗忘的博客里的一句话活了过来。这篇就是把我这些年踩过的坑、做过的版本矩阵、以及帮别人远程救火时总结出来的判断逻辑一次性写清楚。它解决的核心问题不是怎么装——官网每一步都写了——而是为什么这么装以及装错了怎么回退。适合两类人一类是刚拿到机器、准备从零搭 PyTorch 环境的新手另一类是已经有一堆环境、现在要上 40 系甚至 50 系新卡、被 MMCV 编译卡住的老手。全文围绕驱动、CUDA、cuDNN、PyTorch、MMCV 这条依赖链展开中间会顺带把 Carla 这类仿真平台的驱动选择、Windows 上 NVIDIA App 驱动下载目录、以及cuda .run解压报 gzip 错误这类高频问题一起讲透。1. 先把这条依赖链捋清楚不然装十遍也是白装1.1 从显卡到框架一层套娃的依赖关系很多人装环境的顺序是看到什么装什么结果就是版本互相打架。正确的认知模型应该是一棵树根是显卡硬件本身往上依次是驱动、CUDA Runtime、cuDNN、深度学习框架、上层工具库。每一层只跟它下面一层强耦合跟上面一层弱耦合。驱动是最底层它直接跟内核和硬件对话nvidia-smi这个命令其实就是驱动提供的。CUDA Toolkit 里的nvcc编译器负责把你的.cu代码编译成能在 GPU 上跑的二进制这个二进制在运行时会去调用驱动里的用户态库libcuda.so。cuDNN 更靠上一层它是 NVIDIA 给深度学习算子卷积、池化、归一化写的高度优化实现本身依赖 CUDA Runtime。PyTorch 的 GPU 版本在编译时就链接了特定版本的 CUDA Runtime 和 cuDNN所以 PyTorch 的 wheel 包名里会带cu118、cu124、cu128这种后缀。MMCV 最特殊它是 OpenMMLab 系列的基础库里面有一部分 CUDA 算子需要在你自己的机器上用nvcc现场编译所以它同时受 PyTorch 版本和 CUDA Toolkit 版本影响。理解这层套娃之后一个很反直觉但极其重要的事实就浮出来了你系统里装的 CUDA Toolkit 版本和 PyTorch wheel 自带的 CUDA Runtime 版本可以完全不一样。PyTorch 的 pip 包会把所需的 CUDA 运行时库打包进torch/lib目录运行时优先加载自己带的所以你哪怕系统只有 CUDA 11.8也一样能跑cu124的 PyTorch——只要驱动版本够新就行。这一点后面在 PyTorch 安装那节会展开。1.2 版本对应关系速查表与显卡算力对照先上一张驱动与 CUDA 的对应表这张表决定了你的上限。注意 Linux 和 Windows 的驱动版本号不通用下面给的是 Linux 版本。驱动版本Linux≥可支持的 CUDA Runtime 上限450.80.02CUDA 11.0460.27.03CUDA 11.2470.57.02CUDA 11.4495.29.05CUDA 11.5510.39.01CUDA 11.6515.43.04CUDA 11.7520.61.05CUDA 11.8525.60.13CUDA 12.0 及以上535.54.03CUDA 12.2545.23.06CUDA 12.3550.54.14CUDA 12.4555.42.02CUDA 12.5560.28.03CUDA 12.6570.26CUDA 12.8580 系列CUDA 13.0这里有个坑要特别说明。从 CUDA 11 开始NVIDIA 引入了「次版本兼容」机制只要驱动满足某个大版本的最低要求理论上可以跑这个大版本下所有次版本的 CUDA 应用。比如驱动 525.60.13 是 CUDA 12.0 的最低要求而cu124的 PyTorch 在很多机器上也能跑起来就是因为这个机制。但注意它有两个限制一是用的是「有限的特性集」某些新的 API 会缺失二是你自己用nvcc编译出来的程序仍然需要满足该 nvcc 对应版本的驱动要求。所以保守做法还是驱动尽量装新。再看显卡算力Compute Capability这张表决定了你的卡能用什么版本的工具链架构代表显卡Compute CapabilityPascalGTX 1050 ~ 1080Ti、P1006.0 / 6.1VoltaV100、Titan V7.0TuringRTX 20 系、T47.5AmpereRTX 30 系、A100、A108.0 / 8.6Ada LovelaceRTX 40 系、L408.9HopperH100、H2009.0BlackwellRTX 50 系12.04060Ti属于 Ada算力 8.9所有 11.8 之后的 CUDA 都能正常支持不需要额外操心。而50 系显卡是 Blackwell算力 12.0这个sm_120是硬门槛CUDA 12.8 才正式加入对它的支持PyTorch 2.7 才开始有cu128的官方 wheel。所以老版本工具链在这张卡上一定翻车报错通常是no kernel image is available for execution on the device或者nvcc fatal: Unsupported gpu architecture compute_120看到这两个基本就是算力没被工具链认识。2. 版本对应关系详解为什么 CUDA 版本不能随便选2.1 驱动版本才是真正的天花板很多教程一上来就说先装 CUDA再装驱动这个顺序是错的。正确的顺序是先驱动、再 CUDA。原因很简单CUDA Toolkit 只是提供编译器和运行时库真正让 GPU 在系统里可见、可被调用的是驱动。如果驱动没装或版本过低nvidia-smi直接报Failed to initialize NVML: Driver/library version mismatch后面所有步骤都会连亏。判断驱动是否够用有个特别快的经验法则装cu12x的 PyTorch驱动至少要525.60.13装cu118的 PyTorch驱动至少450.80.02。因为 PyTorch wheel 里自带的 CUDA Runtime 只跟驱动的大版本绑定次版本由 minor version compatibility 兜底。这也是为什么你有时会看到我驱动 525跑 cu124 也正常这种帖子——它不是假的只是你没用到那些依赖新特性的算子而已。那如果你手上有台老服务器驱动锁死在 470 怎么办也简单选cu118的轮子torch2.0.x或2.1.x都能装跑常见模型完全没问题。不要硬上新版驱动升级在有些被 IT 管控的生产机器上很麻烦没必要为了新而新。注意驱动升级完成后务必重启。Failed to initialize NVML: Driver/library version mismatch十有八九是内核模块还是旧版、用户态库已经是新版重启一次基本就好。不想重启的话可以尝试卸载nvidia、nvidia_uvm、nvidia_drm这几个模块后重新modprobe但成功率不如重启。2.2 PyTorch 官方 wheel 绑定的 CUDA 版本PyTorch 官网也就是大家常说的 pytorch.org的安装选择器会给出当前支持的组合。把近几年主流的列出来方便你对号入座PyTorch官方提供的 CUDA wheel1.13cu116、cu1172.0cu117、cu1182.1cu118、cu1212.2cu118、cu1212.3cu118、cu1212.4cu118、cu121、cu1242.5cu118、cu121、cu1242.6cu118、cu124、cu1262.7cu118、cu126、cu1282.8cu126、cu128、cu129规律很清楚新架构的卡出现后PyTorch 会在接下来一两个版本里推出对应的新 CUDA 轮子。sm_120的卡对应cu128出现在 2.7再往后 2.8 多了cu129。所以 50 系用户的最低配置就是Python 3.10 torch 2.7 cu128低于这个组合基本别想。还有一个常被问到的场景热词里出现了「cuda version: 13.0 需要安装 pytorch 的版本」。截至我写这篇的时候CUDA 13.0 刚发布不久PyTorch 官方还没有正式发布cu130的 stable wheel只有 nightly。如果你执意要上 CUDA 13那就要么用 nightly要么退回 12.8/12.9。别为了版本号好看把自己卡在一条没有生态的路上。2.3 cuDNN 与 MMCV 的隐含约束cuDNN 这块反而简单它对驱动没有直接要求但对 CUDA 大版本有强绑定。下载页上会明确写for CUDA 12.x或者for CUDA 11.x选错大版本会在 PyTorch 运行时随机报CUDNN_STATUS_NOT_INITIALIZED或者某个卷积报unknown error。经验上按「大版本对齐次版本要新的」来选比如你用 CUDA 12.4那就下cudnn 8.9.x for CUDA 12.x用 CUDA 12.8可以上cudnn 9.x for CUDA 12.x。MMCV 的约束最隐蔽也是最容易让人抓狂的一层。它是个操作系统层面的「版本检测员」——在mmcv/__init__.py和setup.py里硬编码了对 PyTorch 版本范围的assert。历史上MMCV官方声明支持的 PyTorch 范围1.x1.3 ~ 1.132.0.0 / 2.1.01.6 ~ 2.12.2.01.6 ~ 2.4看到问题了吗2024 年 8 月发布的mmcv 2.2.0只声明支持到 PyTorch 2.4。你用torch 2.7直接pip install mmcv2.2.0它会在安装时或者导入时报一句AssertionError: MMCV requires PyTorch version 1.6, 2.4。这就是热词里「torch 2.7 以上怎么安装 mmcv」和「50 系列显卡安装 mmcv」这两个问题的由来。解决办法不是等官方更新等不到而是从源码编译并临时绕开那个版本检查具体做法见 3.5 节。3. 环境搭建实操从驱动到 PyTorch 的完整流程3.1 Ubuntu 下安装 NVIDIA 驱动含 Carla 场景先说最通用的 Ubuntu 22.04 流程。推荐用ubuntu-drivers这套工具比手动跑.run文件省心得多sudo apt update sudo apt install -y ubuntu-drivers-common ubuntu-drivers devices它会列出所有可用驱动并在推荐版本后面标recommended。看到推荐项之后sudo apt install -y nvidia-driver-550 sudo reboot重启后nvidia-smi能出表格就说明成功。如果你需要用.run文件装比如某些内网机器没有 apt 源步骤是先禁用开源驱动 nouveau再关掉图形界面再跑安装包。禁用 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几个实操心得。第一.run安装时提示「The distribution-provided pre-install script failed」一路选continue就行不影响。第二用.run装的驱动会被 apt 的下一次内核更新覆盖导致掉驱动所以生产环境尽量用 apt 源或者装完做 DKMS 注册。第三如果你在跑 Carla 0.9.15 这类仿真平台它底层用 UE5对驱动版本有明确要求官方文档一般会指定一段版本区间比如 535 到 550 之间。不要盲目装最新驱动仿真软件对某些新的驱动特性很敏感会出现渲染黑屏或者 Vulkan 初始化失败遇到这类问题按官方文档锁定的版本装最稳。热词里还出现了「nvidia studio 616.92 图形驱动程序驱动安装失败」这类问题。Studio 分支驱动面向创意工作者稳定性优先但安装失败的原因通常不是分支本身而是旧驱动残留。标准做法是先用 DDUDisplay Driver Uninstaller在安全模式下彻底清理再装新驱动。Ubuntu 下等价的做法是sudo apt purge ^nvidia-.*然后sudo apt autoremove重启后再装。顺带回答一个很多人都搜过的问题「nvidia app 下载的驱动在哪个文件夹」。NVIDIA App也就是取代 GeForce Experience 的那个下载的安装包一般放在C:\ProgramData\NVIDIA Corporation\Downloader\下的一串随机目录里安装完成后通常会被清理掉。已经装进系统的驱动文件本体在C:\Windows\System32\DriverStore\FileRepository\下找带nv_dispi前缀的文件夹。想知道当前具体版本nvidia-smi已经够用了没必要去翻这些目录。3.2 CUDA Toolkit 安装与多版本共存装 CUDA 前先想清楚一件事PyTorch 用户其实不一定需要系统装 CUDA Toolkit。只有当你需要编译 MMCV 这类带自定义 CUDA 算子的库或者要写.cu代码时才需要nvcc。既然 MMCV 是我们的目标之一那还是要装。推荐用 runfile 安装可控性强能多版本共存wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run --silent --toolkit --toolkitpath/usr/local/cuda-12.4 --override注意--silent --toolkit只装工具链不装驱动驱动单独装避免覆盖。--toolkitpath指定安装路径这样 11.8、12.4、12.8 可以同时存在互不干扰。装完之后配置环境变量用update-alternatives做软链接切换是最优雅的方式sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.4 40 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.8 30以后切换就一句sudo update-alternatives --config cuda非常方便。.bashrc里再补上export PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH热词里那个cuda .run gzip: stdin: invalid compressed>tar -xvf 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 -P lib/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*验证cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2能看到CUDNN_MAJOR、CUDNN_MINOR、CUDNN_PATCHLEVEL三个数字就说明头文件就位了。想看运行时版本可以写个最小 C 程序调cudnnGetVersion()但对绝大多数人来说跑到 PyTorch 那边torch.backends.cudnn.version()能打印出数字就算过。提示现在用 pip 装 PyTorch 时它会自带一份匹配的 cuDNN所以如果你纯粹跑 PyTorch 推理系统里的 cuDNN 装不装都无所谓。但 MMCV 编译时会去找系统里的cudnn.h这一步必须要有所以别省。「查看 cuda cudnn 版本」这个高频需求的命令汇总一下CUDA 编译器版本用nvcc -VCUDA Runtime 版本用nvidia-smi右上角那行CUDA Version是驱动支持的上限不是运行时版本Python 里用torch.version.cuda查 PyTorch 实际用的 CUDA 版本cuDNN 用torch.backends.cudnn.version()。这四个数字经常不一样别慌这是正常的。3.4 Anaconda 环境配置与 PyTorch 安装环境隔离用 conda 或者 venv 都行我个人倾向于 conda因为管理 Python 版本更省心conda create -n torch27 python3.10 -y conda activate torch27然后装 PyTorch。一定用官方 index不要用默认 PyPI默认源里的是 CPU 版本pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128装完立刻验证python -c import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available(), torch.cuda.get_device_name(0))输出形如2.7.0 12.8 True NVIDIA GeForce RTX 5090就对了。如果is_available()是False按这个顺序排查驱动版本是否够回 2.1 节、装的是不是 CPU 版看torch.version.cuda是否为None、LD_LIBRARY_PATH是否污染有时候 conda 环境里的libstdc覆盖了系统的会导致 CUDA 库加载失败。热词里还有几个相邻话题顺带说一下。cuda 11.7 cudnn这类组合直接用cu118更省事11.7 的 wheel 现在基本绝迹了。wsl 安装 cuda完全可行NVIDIA 的 WSL 驱动会把 CUDA 透传进子系统装法和裸机一样只是不要装 Linux 驱动WSL 里的驱动是 Windows 侧提供的。td3 代码 pytorch、pytorch 张量基础、transformer pytorch tensorflow这些属于框架使用层面环境通了之后再说。vscode anaconda cpu pytorch这个组合要注意如果你只是想学张量操作CPU 版足够了装的时候--index-url换成https://download.pytorch.org/whl/cpu别白白占用几个 G 的磁盘。3.5 MMCV 安装torch 2.7 以上和 50 系显卡的破局方法重头戏来了。这里分三种情况。情况一PyTorch 2.4 及以下不需要重新编译 CUDA 算子。最简单用 OpenMIMpip install -U openmim mim install mmcv2.2.0MIM 会自动匹配与当前 PyTorch 版本兼容的预编译包wheel省去编译环节。这是最推荐的方式能省半小时到两小时的编译时间。情况二PyTorch 2.5 及以上官方没有预编译包。必须从源码编译。先克隆对应分支git clone https://github.com/open-mmlab/mmcv.git -b v2.2.0 cd mmcv pip install -r requirements/runtime.txt然后用pip install -e .或者python setup.py develop但在此之前要处理那个版本检查。打开mmcv/__init__.py会看到类似assert (TORCH_VERSION ! parrots and digit_version(TORCH_VERSION) digit_version(1.6.0)), \ MMCV requires PyTorch version 1.6.0, but got {}.format(TORCH_VERSION)不同版本表达略有差异有的写下限有的写区间。把它改成你能跑过的新版本比如把上限 2.4去掉或者干脆再装一个补丁包pip install mmcv2.2.0 --no-build-isolation配合临时改setup.py。核心就是让那个assert通过。然后开编译export MMCV_WITH_OPS1 export FORCE_CUDA1 export TORCH_CUDA_ARCH_LIST8.9 pip install -e . --no-build-isolation -vTORCH_CUDA_ARCH_LIST是关键。40 系填8.930 系填8.620 系填7.550 系必须填12.0。不填的话 PyTorch 会尝试为所有已知架构编译编译时间翻好几倍而且遇到不支持的新架构会直接报错。情况三50 系显卡sm_120。这时候还要额外确认两件事一是 CUDA Toolkit 必须是 12.8 及以上nvcc -V看一下低于 12.8 根本认不出sm_120会报Unsupported gpu architecture compute_120二是 PyTorch 必须是 2.7 的cu128版本torch.version.cuda要打印出12.8才行。这两条都满足了再按情况二的方式编译TORCH_CUDA_ARCH_LIST12.0。编译过程中常见的报错和处理报错信息原因处理No module named mmcv._ext算子没编译上检查MMCV_WITH_OPS1、FORCE_CUDA1是否导出undefined symbol: _ZN3c104cuda9SetDeviceEiPyTorch 与 CUDA 版本不匹配核对torch.version.cuda和nvcc -V大版本一致nvcc fatal: Unsupported gpu architecture compute_120nvcc 版本太低升级 CUDA Toolkit 到 12.8fatal error: cudnn.h: No such file系统 cuDNN 缺失按 3.3 装 cuDNN编译卡在某个.cu文件内存不足 nvcc 被 OOM加MAX_JOBS2限制并行度编译时间这块要有个心理预期。40 系单卡、TORCH_CUDA_ARCH_LIST8.9大概 20 到 40 分钟50 系首次编译可能更久因为 12.0 的代码路径还比较新。用MAX_JOBS$(nproc)可以加速但内存小于 32G 的机器反而会更慢swap建议设成MAX_JOBS4左右。如果你只是想跑推理、不用到那些自定义 CUDA 算子那有个偷懒方案装mmcv-lite也就是pip install mmcv-lite。它不带.so算子文件安装快、体积小、版本检查也宽松OpenMMLab 里很多仅依赖 Python 侧功能的流程用它完全够。4. 常见问题与排查技巧实录4.1 驱动与系统层面的坑最常见的五类驱动装完卡在登录界面或黑屏。八成是 nouveau 没禁干净或者驱动版本跟内核不匹配。用CtrlAltF2进 TTYjournalctl -k | grep -i nvidia看内核日志通常能看到具体原因。nvidia-smi报No devices were found。先确认卡插好、供电到位服务器上见过忘记接 8pin 电源的再检查是不是虚拟化环境没做 GPU 直通。nvidia-smi能跑但torch.cuda.is_available()是 False。按 3.4 节顺序排查最后别忘了LD_LIBRARY_PATH污染这个隐形杀手。内核更新后驱动失效。这是.run安装的典型后遗症重装驱动或者改用 DKMS 版本。Windows 上装完驱动出现nvidia-smi报Driver/library version mismatch。重启还不行就 DDU 清干净重装。4.2 CUDA 与 cuDNN 层面的坑CUDA 装完之后nvcc -V显示的还是旧版本大概率是 PATH 里/usr/bin/nvcc或某个 conda 目录抢先了。which -a nvcc看一眼所有路径把/usr/local/cuda/bin提到最前面。libcudart.so找不到通常是LD_LIBRARY_PATH没设或者设错。用ldd去查具体缺哪个库ldd $(which python) | grep cudart能非常直观地告诉你哪个库在哪个路径下没找到。cuDNN 版本跟 CUDA 大版本不匹配。这个报错很不友好有时候根本不报错只是在跑某个卷积时给你一个CUDNN_STATUS_BAD_PARAM非常难查。经验做法装完之后跑一段torch.nn.Conv2d的小测试形状随便给能跑通就说明 cuDNN 正常。多版本 CUDA 环境里nvcc和libcudart版本对不上。常见于PATH指向 11.8 但LD_LIBRARY_PATH指向 12.4 的场景。用update-alternatives统一管理就能避免。4.3 PyTorch 与 MMCV 层面的坑装上以后import torch就报ImportError: libgomp.so.1或者GLIBCXX_3.4.29 not found。这是 conda 环境里的库跟系统库冲突最简单的解法是conda install -c conda-forge libstdcxx-ng或者用系统 Python venv。PyTorch 明明 GPU 版torch.cuda.is_available()是 False但nvidia-smi正常。看torch.version.cuda是不是None是的话就是装成了 CPU 版。MMCV 装完import mmcv直接断言失败。就是 3.5 节说的版本检查改源码。MMCV 装完能 import但一用到某个算子就No module named mmcv._ext。说明编译没开 CUDA 算子重新带MMCV_WITH_OPS1编译。50 系显卡跑 MMCV 模型时报no kernel image is available。TORCH_CUDA_ARCH_LIST没包含12.0重新编译。4.4 问题速查表症状第一嫌疑快速验证nvidia-smi失败驱动未装/版本不符lsmod | grep nvidiaCUDA 可见但 torch 不可见装了 CPU 版 torchtorch.version.cudaMMCV import 报断言版本检查未绕过看mmcv/__init__.pyMMCV 用算子报_ext未编译 CUDA 算子看mmcv/_ext.cpython-*.so是否存在解压 CUDA runfile 报 gzip下载不完整sha256sum对官网编译报 compute_120 不支持nvcc 低于 12.8nvcc -V内核更新后掉驱动.run安装未 DKMSdkms status5. 多版本共存与环境迁移的一些个人经验5.1 让两套 CUDA 和平共处的做法真实场景里你往往同时维护一个老项目比如基于 torch 1.13、CUDA 11.7 的老检测代码和一个新项目50 系卡 torch 2.7 cu128。让它们在一台机器上共存推荐「conda 管 Python、update-alternatives 管 CUDA、venv 隔离框架」这套组合。conda 环境负责 Python 版本和 pip 包CUDA 用update-alternatives建 11.7 和 12.8 两个入口切项目时切一下如果连 Python 都用不上 conda纯 venv 也完全可行。关键在于每个项目有自己的requirements.txt或者environment.yml锁死版本别指望一个环境跑所有项目。cuda 多版本安装和cuda 迁移这两件事本质上是同一件事的不同侧面多版本是把机器做成通用的迁移是把环境做成可复制的。可复制的做法我推荐用conda env export --no-builds env.yml--no-builds去掉具体的构建号跨机器还原成功率高得多。CUDA 和驱动层面写一个setup.sh脚本把本节 3.1 到 3.5 的命令固化进去新机器上跑一遍就能起来。5.2 我给新手的几条反向建议最后说几个跟技术无关但非常影响效率的经验。第一不要在一台机器上同时折腾太多新东西。新卡 新驱动 新 CUDA 新 PyTorch 一起上出问题你根本不知道是谁的问题。先把驱动固化为官方推荐版本再一步步加层。第二装之前先记录当前状态。nvidia-smi、nvcc -V、python -c import torch; print(torch.__version__)三条命令的输出截个图出问题时对比就知道哪一步变了。第三优先用官方源别用不明来路的镜像。CUDA runfile 被改过、PyTorch 装成 CPU 版、cuDNN 混了大版本这些坑八成都是非官方源带来的。慢一点没关系网上搜到的加速方法里掺的东西你根本不知道是什么。第四每一步都做最小验证。驱动装完立刻nvidia-smiCUDA 装完立刻nvcc -VPyTorch 装完立刻torch.cuda.is_available()MMCV 装完立刻import mmcv并跑一个mmcv.ops里的算子。不要攒到最后一起测那样排查成本是指数级的。我个人在实际操作中的体会是这条链子上最容易被忽略的不是 CUDA 版本而是驱动版本。驱动是整个链条的天花板一旦它定死上面所有层的选择空间都被压缩。所以新机器到手第一件事就是确认驱动能不能升到够新的版本搞不定这个后面再折腾都是徒劳。