OpenCV CUDA Desteğinin Kurulması — Azure Ubuntu GPU Virtual Machine

Egemen Gulpinar
4 min readAug 18, 2024

--

OpenCV kütüphanesini standart bir şekilde kurduğumuzda CUDA desteğinden faydalandıramıyoruz. Bunun için tekrardan build almamız ve gerekli ayarlamaları yapmamız gerekli. Biraz karışık olan bu süreci özetlemek ve ihtiyaç duyulduğunda rehber olabilmesini sağlamaya çalıştım. Keyifli okumalar…

Ubuntu — Azure Virtual Machine Bağlantısı ve Ayarlar

ssh -i ~/.ssh/id_rsa.pem username@ip_address
sudo su

Daha sonra

apt-get update
apt install cmake cmake-data build-essential

Ek olarak, hangi OpenCV versiyonunun uygun olduğu ve CUDA gereksinimlerini kuracağınızdan emin olun. Cihazınızdaki CUDA gereksinimlerini yükleyin.

  • Bunun için şu yazıma bakabilirsiniz :
#cuda versiyonlarını kontrol etmek için
nvidia-smi
nvcc --version

Bunlarla beraber gcc ve g++ versiyonları hata almamanız için büyük önem taşımakta. Build alırken CUDA versiyonu ve gcc & g++ versiyon farklılıkları sorun yaşatmıştı bizzat denediğimde. Kendi ubuntu virtual machine cihazım için optimum ayarları aşağıdaki versiyonlar için buldum. Hata alırsanız bu kısımları değiştirmenizde ve farklı versiyon kullanmanızda fayda var.

sudo apt install gcc-10 g++-10
export CC=/usr/bin/gcc-10
export CXX=/usr/bin/g++-10

Ve cihazınızda halihazırda başka bir versiyon varsa, bunu güncellemek için:

sudo update-alternatives --config g++
#and
sudo update-alternatives --config gcc

Ok tuşlarıyla ilgili ayarları seçip güncelleyin.

Daha sonra

OpenCV GPU support için contrib reposuyla ayrı ayrı clone gerekmekte. Aşağıdaki adımları uygulayalım.

mkdir opencv_gpu
cd opencv_gpu
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build

Aşağıdaki cmake komutu OpenCV GPU CUDA desteğiyle beraber python bağlantılarınıda kapsamaktadır. Cihazınızda Python 3.10 sürümden başka farklı bir sürüm kullanılıyorsa, ilgili kısımları güncelleyin. Buradaki ayarları yeni bir pip virtualenv kullanarak yapmayın. Bunu yaptığımda hata aldım ve düzgün çalışmadı. - Belki conda virtual env denenebilir. -


PYTHON3_EXECUTABLE=$(which python3)
PYTHON3_INCLUDE_DIR=$(python3 -c "import sysconfig; print(sysconfig.get_path('include'))")
PYTHON3_PACKAGES_PATH=$(python3 -c "import sysconfig; print(sysconfig.get_path('platlib'))")
PYTHON3_LIBRARY=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))")/libpython3.10.so

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D WITH_TBB=ON \
-D WITH_CUDA=ON \
-D ENABLE_FAST_MATH=ON \
-D CUDA_FAST_MATH=ON \
-D WITH_CUBLAS=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_ZLIB=ON \
-D BUILD_TIFF=ON \
-D WITH_GTK=ON \
-D WITH_FFMPEG=ON \
-D WITH_1394=ON \
-D BUILD_PROTOBUF=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_PC_FILE_NAME=opencv4.pc \
-D OPENCV_ENABLE_NONFREE=OFF \
-D WITH_GSTREAMER=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_CUDNN=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D BUILD_EXAMPLES=ON \
-D PYTHON3_EXECUTABLE=$PYTHON3_EXECUTABLE \
-D PYTHON3_INCLUDE_DIR=$PYTHON3_INCLUDE_DIR \
-D PYTHON3_PACKAGES_PATH=$PYTHON3_PACKAGES_PATH \
-D PYTHON3_LIBRARY=$PYTHON3_LIBRARY ..

OPENCV_EXTRA_MODULES_PATH : OpenCV Contrib GitHub clone yaptığınız reponun “/modules” adresi

PYTHON3_EXECUTABLE , PYTHON3_INCLUDE_DIR, PYTHON3_PACKAGES_PATH, PYTHON3_LIBRARY : pathleri yerleşik python3 dışında bir konum kullanıyorsa güncelleyin.

Bu adım biraz zaman alacaktır. En son “/build” klasörü aşağıdaki gibi olacak :

Sonraki adım uzun sürebilir, 15–20 dakika kadar bekleyebilirsiniz.

make -j$(nproc)

GPU destekli build alınan OpenCV’yi yüklemek için

sudo make install

Daha sonra test etmek için:

python3
>>> import cv2
>>> print(cv2.cuda.getCudaEnabledDeviceCount())
#1

OpenCV Derleme ve yapılandırma ayarlarını görmek için

python -c "import cv2; print(cv2.getBuildInformation())"

Bu şekilde CUDA ve cuDNN gibi kısımları görmeniz gerekmektedir.

Hatalar ve Karşılaşılabilecek Durumlar

Bu kısımda bizzat yaşadığım problemlere ilişkin bazı çözümleri paylaşmak istiyorum.

  • Eğer bir build esnasında hata aldıysanız ve gerekli değişiklikleri yapıp tekrar build almanız gerekirse, build öncesi mutlaka CmakeChache.txt dosyasını silmeniz gerekmekte, aksi halde hata alırsınız.
rm ../CMakeCache.txt
  • NVIDIA Cuda sorunlarıyla ilgili error alırsanız, bu alanda CUDA versiyon farklılığınız bulunmakta demektir. Linux makinanız için uygun CUDA sürümünü kurun veya değiştirin. Buna gcc ve g++ da etken olduğundan hepsinin bir uyum içinde çalıştığından emin olun.
  • Aşağıdaki adımları yaptığınızdan kesinlikle emin olun, yoksa default gcc ve g++ ayarlarını build alırken kullanmış olursunuz.
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
  • Farklı bir python sürümü veya cuda environment kullanmak size kalmış, ilgili parametrelerde path’leri güncelleyebilir ve kullanabilirsiniz.
  • CUDA’nın compute capability bilgisine göre CUDA sürümü ve bağımlılıkları yüklediğinizden emin olun
nvidia-smi --query-gpu=compute_cap --format=csv

--

--

Egemen Gulpinar

I enjoy writing articles in Turkish and English languages, on everything I have been working on and experienced.