自定义CUDA加速OpenCV的Pip Wheel构建失效问题排查与优化请求
自定义CUDA加速OpenCV的Pip Wheel构建失效问题排查与优化请求
我碰到了一个棘手的问题:我编写了一个Dockerfile,从源码编译带有CUDA加速的OpenCV,编译过程本身是成功的,但pip就是不识别这个自定义安装的版本。结果后来我安装依赖OpenCV的Python包时,pip直接拉取了预编译的opencv-python wheel,直接把我源码编译的版本给覆盖(或者说屏蔽)了。
我看到有建议说,正确的解决方法是把自定义编译的OpenCV打包成wheel再安装,这样pip就会认为依赖已经满足。我照着这个方法试了,wheel构建脚本跑完没有报错,但安装后的wheel完全不能用。能不能帮我检查一下这个wheel构建脚本或者Dockerfile,告诉我哪些地方需要调整或者优化?
我的Dockerfile内容
# syntax=docker/dockerfile:1 # Requires Docker BuildKit for cache mounts (build with DOCKER_BUILDKIT=1) FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04 # Environment setup ENV DEBIAN_FRONTEND=noninteractive \ LANG=en_US.UTF-8 \ LC_ALL=en_US.UTF-8 \ PYTHONIOENCODING=UTF-8 \ NVIDIA_DRIVER_CAPABILITIES=all \ CUDA_HOME=/usr/local/cuda \ PATH=/usr/local/cuda/bin:$PATH \ LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH \ CCACHE_DIR=/ccache # Create ccache directory RUN mkdir -p /ccache # Set locale RUN apt-get update && apt-get install -y --no-install-recommends \ locales \ && locale-gen en_US.UTF-8 \ && update-locale LANG=en_US.UTF-8 # Essential system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ # Build tools build-essential \ cmake \ pkg-config \ ninja-build \ ccache \ # GCC-10 for CUDA 12.x compatibility gcc-10 \ g++-10 \ # Version control git \ # Utilities wget \ curl \ unzip \ vim \ nano \ htop \ software-properties-common \ && add-apt-repository ppa:deadsnakes/ppa -y \ && apt-get update \ && apt-get install -y --no-install-recommends \ python3.9 \ python3.9-dev \ python3.9-venv \ python3.9-distutils \ python3-pip \ # OpenCV dependencies libgtk-3-dev \ libgtk2.0-dev \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ libswresample-dev \ libtbb-dev \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libwebp-dev \ libopenexr-dev \ libdc1394-dev \ libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libv4l-dev \ libxvidcore-dev \ libx264-dev \ libfdk-aac-dev \ libmp3lame-dev \ libtheora-dev \ libvorbis-dev \ libxine2-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ # Math libraries libopenblas-dev \ liblapack-dev \ libatlas-base-dev \ libeigen3-dev \ libhdf5-dev \ # OpenGL support libgl1-mesa-glx \ libglu1-mesa-dev \ libglew-dev \ # Qt5 for OpenCV GUI qtbase5-dev \ qtchooser \ qt5-qmake \ qtbase5-dev-tools \ # Additional utilities libprotobuf-dev \ protobuf-compiler \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # Set Python 3.9 as default RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1 \ && update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 \ && python3.9 -m pip install --upgrade pip setuptools wheel # Install numpy first (required for OpenCV Python bindings) # Also install wheel building tools RUN python3 -m pip install --no-cache-dir \ numpy==1.26.4 \ wheel \ setuptools \ build \ auditwheel \ patchelf # Remove any pre-existing OpenCV packages that might conflict RUN pip3 uninstall -y opencv-python opencv-python-headless opencv-contrib-python opencv-contrib-python-headless || true # Set GCC-10 as default for OpenCV build RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 \ && update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100 # Configure ccache RUN ccache --set-config=cache_dir=/ccache \ && ccache --set-config=max_size=15G \ && ccache --set-config=compression=true \ && ccache --set-config=compression_level=6 # OpenCV 4.8.0 with CUDA support and NONFREE modules ARG OPENCV_VERSION=4.8.0 ARG CUDA_ARCH_BIN="7.5;8.0;8.6;8.9" # opencv and opencv-contrib : # including NONFREE code -could be used or not- # Use BuildKit cache mount for ccache to speed up rebuilds RUN --mount=type=cache,target=/ccache \ cd /opt/ &&\ wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip &&\ unzip -qq opencv.zip &&\ rm opencv.zip &&\ wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -O opencv-co.zip &&\ unzip -qq opencv-co.zip &&\ rm opencv-co.zip &&\ mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\ # Configure OpenCV with proper CUDA linking:\ # - Use stubs for linking but set RPATH to real CUDA libs for runtime\ # - This prevents runtime failures from stub library references\ cmake \ -D BUILD_opencv_java=OFF \ -D WITH_CUDA=ON \ -D BUILD_opencv_dnn=ON \ -D CUDA_ARCH_BIN="${CUDA_ARCH_BIN}" \ -D WITH_CUBLAS=ON \ -D WITH_CUDNN=ON \ -D OPENCV_DNN_CUDA=ON \ -D ENABLE_FA
内容来源于stack exchange
相关产品推荐
相关产品推荐

