在Ubuntu 22.04上为RTX 40系显卡编译MMCV 2.2.0:从CUDA 12.6配置到PEP517避坑全记录
在Ubuntu 22.04上为RTX 40系显卡编译MMCV 2.2.0从CUDA 12.6配置到PEP517避坑全记录最近在Ubuntu 22.04系统上为RTX 4090显卡配置MMCV 2.2.0开发环境时遇到不少坑。特别是当PyTorch 2.6.0、CUDA 12.6和MMCV的版本需要精确匹配时稍有不慎就会导致编译失败或运行时错误。本文将分享完整的配置流程包括如何解决PEP517警告导致的安装不完整问题。1. 环境准备在开始编译MMCV之前需要确保系统环境配置正确。RTX 40系显卡采用Ada Lovelace架构计算能力为8.9sm_89这对CUDA版本和编译参数有特定要求。首先检查系统是否安装了正确的NVIDIA驱动nvidia-smi输出应显示驱动版本和CUDA版本这里是12.6--------------------------------------------------------------------------------------- | NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.6 | |------------------------------------------------------------------------------------- | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 NVIDIA GeForce RTX 4090 Off | 00000000:01:00.0 On | Off | | 0% 45C P8 22W / 450W | 289MiB / 24564MiB | 0% Default | | | | N/A | -------------------------------------------------------------------------------------1.1 安装CUDA Toolkit 12.6如果系统尚未安装CUDA 12.6可以按照以下步骤安装wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-ubuntu2204-12-6-local_12.6.0-560.28.03-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2204-12-6-local_12.6.0-560.28.03-1_amd64.deb sudo cp /var/cuda-repo-ubuntu2204-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt-get update sudo apt-get -y install cuda-toolkit-12-6安装完成后将CUDA路径添加到环境变量中echo export PATH/usr/local/cuda-12.6/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc验证CUDA安装nvcc --version应显示类似输出nvcc: NVIDIA (R) Cuda compiler release 12.6, V12.6.1312. 创建Python虚拟环境建议使用conda创建独立的Python环境以避免依赖冲突conda create -n mmcv26 python3.10 -y conda activate mmcv26安装与CUDA 12.6兼容的PyTorch 2.6.0pip install torch2.6.0 torchvision0.21.0 torchaudio2.6.0 \ --index-url https://download.pytorch.org/whl/cu126验证PyTorch是否正确识别CUDAimport torch print(Torch:, torch.__version__, | Torch CUDA build:, torch.version.cuda) print(CUDA available:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU:, torch.cuda.get_arch_list(), torch.cuda.get_device_name(0))3. 编译MMCV 2.2.03.1 准备编译环境首先安装必要的构建工具sudo apt-get update sudo apt-get install -y ninja-build cmake对于Ubuntu 22.04默认gcc版本是11但建议使用gcc-12以获得更好的兼容性sudo apt-get install -y gcc-12 g-123.2 配置编译参数克隆MMCV源码并切换到v2.2.0分支git clone https://github.com/open-mmlab/mmcv.git -b v2.2.0 cd mmcv设置环境变量特别注意TORCH_CUDA_ARCH_LIST需要匹配RTX 40系的sm_89export CUDA_HOME/usr/local/cuda-12.6 export PATH$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH$CUDA_HOME/lib64:$LD_LIBRARY_PATH export MMCV_WITH_OPS1 export TORCH_CUDA_ARCH_LIST8.9 export CC/usr/bin/gcc-12 export CXX/usr/bin/g-123.3 解决PEP517问题MMCV 2.2.0使用旧的setuptools构建方式与PEP517规范存在兼容性问题。以下是已验证的解决方案首先清理之前的构建python setup.py clean rm -rf build/ mmcv.egg-info/ mmcv/_ext.*.so dist/然后使用以下命令安装确保添加--no-build-isolation和--config-settings参数pip install -U pip setuptools wheel ninja cmake python setup.py build_ext -j $(nproc) pip install -e . --no-build-isolation --config-settings editable_modecompat如果仍然遇到PEP517警告可以尝试pip install -e . --use-pep517 --no-build-isolation -v4. 验证安装创建测试脚本验证MMCV是否正确安装并支持CUDAimport mmcv, torch from mmcv.ops import get_compiling_cuda_version, get_compiler_version, nms print(mmcv from:, mmcv.__file__) print(Torch:, torch.__version__, | Torch CUDA build:, torch.version.cuda) print(MMCV compiled CUDA:, get_compiling_cuda_version(), | compiler:, get_compiler_version()) boxes torch.tensor([[0.,0.,10.,10.],[1.,1.,11.,11.],[50.,50.,60.,60.]], dtypetorch.float32) scores torch.tensor([0.90,0.80,0.75], dtypetorch.float32) print(NMS CPU:, nms(boxes, scores, 0.5)) print(CUDA available:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU:, torch.cuda.get_device_name(0)) print(NMS CUDA:, nms(boxes.cuda(), scores.cuda(), 0.5))成功输出应包含类似信息mmcv from: /path/to/mmcv/mmcv/__init__.py Torch: 2.6.0 | Torch CUDA build: 12.6 MMCV compiled CUDA: 12.6 | compiler: GCC 12.3.0 NMS CPU: tensor([0, 1, 2]) CUDA available: True GPU: NVIDIA GeForce RTX 4090 NMS CUDA: tensor([0, 1, 2], devicecuda:0)5. 常见问题解决5.1 多MMCV版本冲突如果系统中安装了多个MMCV版本如通过pip安装的预编译版本和本地编译版本可能会导致冲突。解决方法# 首先卸载所有MMCV版本 pip uninstall mmcv mmcv-full -y # 然后重新安装本地编译版本 cd /path/to/mmcv pip install -e . --no-build-isolation --config-settings editable_modecompat5.2 自动检测GPU架构对于不同的NVIDIA GPU可以使用以下脚本自动设置TORCH_CUDA_ARCH_LIST#!/usr/bin/env bash if ! command -v nvidia-smi /dev/null; then echo 未检测到nvidia-smi请确认NVIDIA驱动已安装 exit 1 fi GPU_NAME$(nvidia-smi --query-gpuname --formatcsv,noheader | head -n 1) echo 检测到 GPU: $GPU_NAME ARCH if [[ $GPU_NAME ~ RTX 20 ]] || [[ $GPU_NAME ~ TITAN RTX ]]; then ARCH7.5 elif [[ $GPU_NAME ~ RTX 30 ]] || [[ $GPU_NAME ~ A30 ]] || [[ $GPU_NAME ~ A40 ]]; then ARCH8.6 elif [[ $GPU_NAME ~ A100 ]]; then ARCH8.0 elif [[ $GPU_NAME ~ RTX 40 ]] || [[ $GPU_NAME ~ Ada ]]; then ARCH8.9 elif [[ $GPU_NAME ~ H100 ]]; then ARCH9.0 else echo 未知的GPU型号: $GPU_NAME请手动查询对应Compute Capability exit 1 fi export TORCH_CUDA_ARCH_LIST$ARCH echo 已设置 TORCH_CUDA_ARCH_LIST$ARCH5.3 编译时内存不足编译MMCV可能需要大量内存如果遇到内存不足的问题可以尝试# 减少并行编译任务数 python setup.py build_ext -j 2 # 或者使用交换空间 sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2519378.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!