ARTICLE DETAIL

资讯详情

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

Windows + RTX 5090 D 安装 MMCV 2.1.0 实战记录

Windows + RTX 5090 D 安装 MMCV 2.1.0 实战记录 Windows RTX 5090 D 安装 MMCV 2.1.0 实战记录这篇不是官方教程也不是照抄别人的安装命令。这是一次在 Windows RTX 5090 D 上安装 MMCV 的实际排障过程记录。中间走过弯路包括 conda 环境位置、pip SSL、PyTorch/cu128、VS2022、CUDA Toolkit、CUDA_HOME、PATH、pkg_resources、build isolation、MMCV 版本选错等问题。1. 最终跑通的环境OS: Windows GPU: NVIDIA GeForce RTX 5090 D Python: 3.10.20 PyTorch: 2.11.0cu128 Torch CUDA: 12.8 CUDA Toolkit: 12.8 nvcc: 12.8.93 MSVC: 19.44.35228 MMCV: 2.1.0最终验证D:\conda_envs\openmmlab-py310\python.exe -c import torch, mmcv; print(torch, torch.__version__); print(torch cuda, torch.version.cuda); print(cuda available, torch.cuda.is_available()); print(gpu, torch.cuda.get_device_name(0)); print(capability, torch.cuda.get_device_capability(0)); print(mmcv, mmcv.__version__)输出torch 2.11.0cu128 torch cuda 12.8 cuda available True gpu NVIDIA GeForce RTX 5090 D capability (12, 0) mmcv 2.1.0MMCV CUDA ops 验证D:\conda_envs\openmmlab-py310\python.exe -c import mmcv; from mmcv.ops import get_compiler_version, get_compiling_cuda_version; print(mmcv, mmcv.__version__); print(compiler, get_compiler_version()); print(cuda, get_compiling_cuda_version())输出mmcv 2.1.0 compiler MSVC 194435228 cuda 12.8这说明mmcv.ops不是空壳C/CUDA 扩展已经编译成功。2. 一开始的环境目标和第一个弯路最开始计划给mmsegmentation建一个 conda 环境并且要求环境放在 D 盘不放 C 盘。我们先建过一个环境D:\conda_envs\mmsegmentation-py38 Python 3.8.20这个环境本身创建成功了但后面分析 RTX 5090 D 后发现不合适。原因是 RTX 5090 D 是 Blackwell 架构计算能力是sm_120旧 PyTorch / CUDA runtime 可能没有 sm_120 内核容易出现RuntimeError: CUDA error: no kernel image is available for execution on the device所以最后放弃 Python 3.8 旧 PyTorch 路线改为Python 3.10 PyTorch cu128旧环境删除命令conda remove --prefix D:\conda_envs\mmsegmentation-py38 --all -y如果目录还在Remove-Item-Recurse-Force D:\conda_envs\mmsegmentation-py383. conda 换源和 solver 问题一开始conda只有defaults下载慢。另外 conda 还报过 solver 问题CondaValueError: You have chosen a non-default solver backend (libmamba) but it was not recognized. Choose one of: classic处理方式是把 conda solver 改成 classic并把源换成清华源。最终确认channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 show_channel_urls: True solver: classic这一步的重点是不要让环境装到默认 C 盘 envs 目录而是用--prefix指到 D 盘。4. pip 的 PIP_NO_INDEX 坑检查 pip 配置时发现:env:.no-index1 global.index-urlhttps://mirrors.tuna.tsinghua.edu.cn/pypi/web/simplePIP_NO_INDEX1的意思是 pip 不访问任何在线索引。即使配置了清华源pip 也会忽略。后来确认它是用户级环境变量删除后 pip 才能正常联网。检查命令[Environment]::GetEnvironmentVariable(PIP_NO_INDEX,User)[Environment]::GetEnvironmentVariable(PIP_NO_INDEX,Machine)[Environment]::GetEnvironmentVariable(PIP_NO_INDEX,Process)删除用户级变量[Environment]::SetEnvironmentVariable(PIP_NO_INDEX,$null,User)当前进程里如果还有Remove-ItemEnv:\PIP_NO_INDEX-ErrorAction SilentlyContinue5. 新建 Python 3.10.20 环境重新创建目标环境conda create --prefix D:\conda_envs\openmmlab-py310 python3.10.20 pip -y激活C:\ProgramData\anaconda3\condabin\conda.bat activate D:\conda_envs\openmmlab-py310验证where python python --version最终D:\conda_envs\openmmlab-py310\python.exe Python 3.10.206. Python SSL 模块坏掉的问题中间有一次环境里实际装成了Python 3.10.0 OpenSSL 3.5.6然后 pip 安装 PyTorch 时失败WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ImportError: Cant connect to HTTPS URL because the SSL module is not available.进一步检查python -c import ssl; print(ssl.OPENSSL_VERSION)报ImportError: DLL load failed while importing _ssl原因是 Python 和 OpenSSL 组合不匹配。最后直接删除坏环境重建python3.10.20。重建后验证正常python -c import ssl; print(ssl.OPENSSL_VERSION)输出OpenSSL 3.5.7 9 Jun 20267. 安装 PyTorch cu128安装python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128最终实际版本torch 2.11.0cu128 torchvision 0.26.0cu128 torchaudio 2.11.0cu128验证D:\conda_envs\openmmlab-py310\python.exe -c import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0)); print(torch.cuda.get_device_capability(0))输出2.11.0cu128 12.8 True NVIDIA GeForce RTX 5090 D (12, 0)8. 安装 conda CUDA Toolkit / nvcc 12.8PyTorch wheel 自带 CUDA runtime但源码编译 MMCV 还需要nvcc。安装conda install -c nvidia cuda-nvcc12.8 cuda-toolkit12.8 -y验证D:\conda_envs\openmmlab-py310\Library\bin\nvcc.exe --version输出Cuda compilation tools, release 12.8, V12.8.939. 安装 Visual Studio 2022 C 编译环境Windows 编译 MMCV 需要 MSVC。安装的是 Visual Studio Community 2022位置D:\micrasoft visual studio\community安装后普通 PowerShell 里直接where cl找不到这是正常的。需要用 VS Developer Command Prompt。在 VS Developer Command Prompt 里验证where cl cl输出D:\micrasoft visual studio\community\VC\Tools\MSVC\14.44.35207\bin\Hostx64\x64\cl.exe 用于 x64 的 Microsoft (R) C/C 优化编译器 19.44.35228 版10. 在 VS Developer Command Prompt 中激活 conda打开Visual Studio 2022 Developer Command Prompt激活环境C:\ProgramData\anaconda3\condabin\conda.bat activate D:\conda_envs\openmmlab-py310激活时出现过 VS2017 相关报错VS_VERSION15.0 VS_YEAR2017 Toolset directory for version 14.16 was not found.但后续检查where cl cl仍然能找到 VS2022 的cl.exe所以没有阻塞。11. Windows 下 CUDA_HOME 的正确写法一开始参考 Linux 写法容易写成exportCUDA_HOME$CONDA_PREFIXexportCUDACXX$CONDA_PREFIX/bin/nvccWindows conda CUDA 不是这个布局。错误写法set CUDA_HOME%CONDA_PREFIX%会导致编译时找D:\conda_envs\openmmlab-py310\bin\nvcc.exe然后报error: nvcc not found at D:\conda_envs\openmmlab-py310\bin\nvcc.exe正确写法set CUDA_HOME%CONDA_PREFIX%\Library set CUDACXX%CONDA_PREFIX%\Library\bin\nvcc.exe set PATH%CONDA_PREFIX%;%CONDA_PREFIX%\Library\bin;%CONDA_PREFIX%\Scripts;%PATH% set FORCE_CUDA1 set TORCH_CUDA_ARCH_LIST12.0 set MAX_JOBS1 set INCLUDE%CONDA_PREFIX%\Library\include;%INCLUDE% set LIB%CONDA_PREFIX%\Library\lib;%LIB%验证%CUDA_HOME%\bin\nvcc.exe --version python -c from torch.utils.cpp_extension import CUDA_HOME; print(CUDA_HOME)输出D:\conda_envs\openmmlab-py310\Library12. PATH 顺序问题曾经设置过set PATH%CONDA_PREFIX%\Library\bin;%CONDA_PREFIX%\Scripts;%PATH%这样会导致Scripts\python.bat排到前面引发D:\conda_envs\openmmlab-py310\Scripts\..\Library\nsight-compute\...\python.bat 不是内部或外部命令正确顺序set PATH%CONDA_PREFIX%;%CONDA_PREFIX%\Library\bin;%CONDA_PREFIX%\Scripts;%PATH%验证where python第一行必须是D:\conda_envs\openmmlab-py310\python.exe13. setuptools 版本问题安装编译工具时曾经执行过python -m pip install -U ninja psutil setuptools wheel结果 pip 提示torch 2.11.0cu128 requires setuptools82, but you have setuptools 83.0.0 which is incompatible.修复python -m pip install setuptools82 --force-reinstall后续不要再无脑升级 setuptools。推荐安装编译工具python -m pip install -U ninja psutil wheel python -m pip install setuptools82 --force-reinstall14. pkg_resources / build isolation 问题曾经尝试python setup.py develop报错ModuleNotFoundError: No module named pkg_resources原因是setup.py develop内部会调用pip install -e . --use-pep517它会进入临时 build isolation 环境。临时环境里 setuptools 版本可能太新导致pkg_resources不存在。所以不要用python setup.py develop改用python -m pip install . -v --no-build-isolation关键点是--no-build-isolation15. MMCV 版本选错2.2.0 和 2.1.0中途D:\mmcv里实际是__version__2.2.0但目标是MMCV 2.1.0因为后续要和 OpenMMLab 相关库兼容。确认版本python -c import pathlib; print(pathlib.Path(mmcv/version.py).read_text().splitlines()[1])如果不是__version__ 2.1.0就切版本git checkout v2.1.0如果 Git 报dubious ownership先执行git config --global --add safe.directory D:/mmcv16. 编译 MMCV 2.1.0在D:\mmcv下cd /d D:\mmcv确认环境变量echo %CUDA_HOME% echo %CUDACXX% echo %FORCE_CUDA% echo %TORCH_CUDA_ARCH_LIST% echo %MAX_JOBS% where python where cl where nvcc清理rmdir /s /q build rmdir /s /q mmcv.egg-info编译python -m pip install . -v --no-build-isolation如果要保存日志python -m pip install . -v --no-build-isolation D:\mmcv_build.log 21失败后筛选findstr /i /c:FAILED: /c:error C /c:fatal error /c:nvcc fatal /c:ambiguous D:\mmcv_build.log17. 编译中遇到的 PyTorch 头文件错误编译时曾经出现过D:/conda_envs/openmmlab-py310/lib/site-packages/torch/include\torch/csrc/dynamo/compiled_autograd.h(1143): error C2872: “std”: 不明确的符号这类问题和 Windows PyTorch 新版本 CUDA extension 编译有关。当时准备尝试的 workaround 是set NVCC_APPEND_FLAGS-DUSE_CUDA set MMCV_CUDA_ARGS-DUSE_CUDA然后清理重编rmdir /s /q build rmdir /s /q mmcv.egg-info python -m pip install . -v --no-build-isolation最终当前环境中mmcv 2.1.0已经安装成功并能加载mmcv.ops。18. 最终验证验证 MMCVD:\conda_envs\openmmlab-py310\python.exe -c import mmcv; print(mmcv.__version__); print(mmcv.__file__)输出2.1.0 D:\conda_envs\openmmlab-py310\lib\site-packages\mmcv\__init__.py验证 opsD:\conda_envs\openmmlab-py310\python.exe -c import mmcv; from mmcv.ops import get_compiler_version, get_compiling_cuda_version; print(mmcv, mmcv.__version__); print(compiler, get_compiler_version()); print(cuda, get_compiling_cuda_version())输出mmcv 2.1.0 compiler MSVC 194435228 cuda 12.8验证 torch GPU mmcvD:\conda_envs\openmmlab-py310\python.exe -c import torch, mmcv; print(torch, torch.__version__); print(torch cuda, torch.version.cuda); print(cuda available, torch.cuda.is_available()); print(gpu, torch.cuda.get_device_name(0)); print(capability, torch.cuda.get_device_capability(0)); print(mmcv, mmcv.__version__)输出torch 2.11.0cu128 torch cuda 12.8 cuda available True gpu NVIDIA GeForce RTX 5090 D capability (12, 0) mmcv 2.1.019. 这次真正重要的经验这次能跑通关键不是某一条命令而是按顺序排掉了这些坑1. RTX 5090 D 不适合旧 torch/cu121 路线 2. Python 3.10.0 OpenSSL 组合可能导致 pip SSL 不可用 3. PyTorch cu128 装好后还需要 conda cuda-nvcc/cuda-toolkit 才能编译 MMCV 4. Windows conda CUDA_HOME 必须指向 %CONDA_PREFIX%\Library 5. PATH 里 %CONDA_PREFIX% 必须排在 Scripts 前面 6. setuptools 要保持 82 7. 编译 MMCV 要关 build isolation 8. 不要用 setup.py develop 9. 先确认 D:\mmcv 源码版本真的是 v2.1.0 10. 最终必须验证 mmcv.ops而不是只看 import mmcv20. 后续MMCV 成功后可以继续装python -m pip install mmengine0.10.7 python -m pip install mmdet3.3.0如果后续安装 MMDetection3D 源码也建议继续使用python -m pip install -v --no-build-isolation -e .避免临时 build isolation 环境看不到当前 conda 环境里的 torch。
返回列表