- Today
- Total
엔지니어스 - Engineeus
[Ubuntu] Graphic card 460 / CUDA 11.01 / CuDNN 8.1 / OpenCV 4 최신으로 설치 하기! (초간단) 본문
[Ubuntu] Graphic card 460 / CUDA 11.01 / CuDNN 8.1 / OpenCV 4 최신으로 설치 하기! (초간단)
Engineeus 2021. 7. 28. 19:48설치 환경
Ubuntu: 20.04
Graphic card : 460.91.03
CUDA: 11.01
cvDNN: 8.1.0
OpenCV: 4.4.0
python: 3.8.10
Graphic Driver
설치 가능 드라이버 확인
ubuntu@ubuntu-HP:~$ ubuntu-drivers devices
위 드라이버 중 460을 설치 하겠습니다. CUDA마다 그래픽카드 제한이 있을 수 있으니 확인 하셔야 합니다.
$ sudo apt install nvidia-driver-460
설치 확인
- 재부팅
$ nvidia-smi
Graphic driver는 460.91.03이 깔리면서 CUDA도 자연스럽게 깔렸네요.
CUDA
CUDA download
https://developer.nvidia.com/cuda-toolkit-archive
전 11.02.2로 깔았습니다.
sudo sh cuda_11.2.1_460.32.03_linux.run
기다린 후
continue
accept
Graphice driver는 이미 깔았으니 스페이스로 체크표시 빼줍니다. 그리고 Install!
잘 인스톨 되었네요. 드라이버는 일부러 안깔았으닌 걱정 마세요.
다음 명령을 사용하여 CUDA Toolkit 관련 설정을 환경 변수에 추가하고 바로 적용합니다.
$ sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.2/bin' >> /etc/profile"
$ sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64' >> /etc/profile"
$ sudo sh -c "echo 'export CUDADIR=/usr/local/cuda-11.2' >> /etc/profile"
$ source /etc/profile
설치가 잘되었는지 확인합니다. 11.2가 보여야 합니다.
$ nvcc -V
CuDNN
아래 링크에 접속 합니다.
https://developer.nvidia.com/cudnn
Download cuDNN을 클릭합니다.
계속 진행하려면 로그인을 해야 합니다.
라이센스에 동의한다고 체크하고( I Agree to the Terms of… )
Archived cuDNN Releases를 클릭합니다.
목록에서 다음 항목을 클릭합니다.
Download cuDNN v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2
다음 항목을 클릭합니다.
cuDNN Library for Linux (x86_64)
다운로드 받은 파일을 압축풀어서 파일 복사합니다.
$ cd 다운로드
$ tar xvzf cudnn-11.2-linux-x64-v8.1.0.77.tgz
$ sudo cp cuda/include/cudnn* /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
링크를 다시 걸어줘야 합니다.
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn.so.8.1.0 /usr/local/cuda-11.2/targets/x86_64-linux/lib/libcudnn.so.8
새로 추가된 라이브러리를 시스템에서 찾을 수 있도록 하고 루트 디렉토리로 이동합니다.
$ sudo ldconfig
$ cd
설정이 제대로 되었는지 확인합니다. 다음처럼 8.1.0이 보여야 합니다.
$ ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn
libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.1.0
libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.1.0
libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.1.0
libcudnn.so.8 -> libcudnn.so.8.1.0
libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.1.0
libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.1.0
libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.1.0
OpenCV
전 이미 설치 했었어요 아래 링크로 설치!
https://mickael-k.tistory.com/208?category=798523
설치 확인
하지만!!
이때 CUDA랑 연동을 안 해줘서 그냥 4.5 버전으 다시 깔겠습니다.
기존에 설치된 패키지를 업그레이드합니다.
$ sudo apt-get update
$ sudo apt-get upgrade
추가로 필요한 패키지들을 설치합니다.
$ sudo apt-get install build-essential cmake
$ sudo apt-get install pkg-config
$ sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev
$ sudo apt-get install ffmpeg libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev
$ sudo apt-get install libv4l-dev v4l-utils
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
$ sudo apt-get install libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install python3-dev python3-numpy
OpenCV를 다운로드 받아 빌드를 진행합니다.
$ mkdir opencv-sources
$ cd opencv-sources
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.1.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.1.zip
$ unzip opencv_contrib.zip
$ cd opencv-4.5.1
$ mkdir build
$ cd build
cmake를 실행합니다. 중간에 다운로드를 하므로 인터넷이 연결된 상태에서 진행해야 합니다.
주의할 점은 CUDA_ARCH_BIN, CUDA_ARCH_PTX는 https://developer.nvidia.com/cuda-gpus 의 Compute Capability를 참고하여 본인의 GPU에 따라 바꿔야 합니다.
만약 본인의 그래픽카드를 모르겠다면 아래 명령어를 쳐서 위쪽에 나와 있는걸 확인 합니다.
$ nvidia-smi -a
그리고 그걸 아래 링크에서 Compute Capability를 확인 해 줍니다.
https://developer.nvidia.com/cuda-gpus#compute
목록에 없다면 구글에서 “gtx 1660 ti Compute Capability” 식으로 검색하여 찾으세요. 이 값을 잘못 입력하면 CUDA가 정상 동작하지 않습니다.
gtx 960m 의 경우에는 5.0입니다.
configure 해줍니다.
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_DOCS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF -D BUILD_PACKAGE=OFF -D BUILD_EXAMPLES=OFF -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda -D WITH_CUDA=ON -D WITH_CUBLAS=ON -D WITH_CUFFT=ON -D WITH_NVCUVID=ON -D WITH_IPP=OFF -D WITH_V4L=ON -D WITH_1394=OFF -D WITH_GTK=ON -D WITH_QT=OFF -D WITH_OPENGL=ON -D WITH_EIGEN=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D BUILD_JAVA=OFF -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D BUILD_NEW_PYTHON_SUPPORT=ON -D OPENCV_SKIP_PYTHON_LOADER=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.1/modules -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_ARCH_BIN=5.0 -D CUDA_ARCH_PTX=5.0 -D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.1.0 -D CUDNN_INCLUDE_DIR=/usr/local/cuda/include ..
cmake 실행 결과 입니다. 빨간색 부분을 확인하세요.
-- General configuration for OpenCV 4.5.1 ===================================== -- Version control: unknown -- -- Extra modules: -- Location (extra): /home/webnautes/opencv-sources/opencv_contrib-4.5.1/modules -- Version control (extra): unknown -- -- Platform: -- Timestamp: 2021-05-29T12:45:55Z -- Host: Linux 5.8.0-53-generic x86_64 -- CMake: 3.16.3 -- CMake generator: Unix Makefiles -- CMake build tool: /usr/bin/make -- Configuration: RELEASE -- -- CPU/HW features: -- Baseline: SSE SSE2 SSE3 -- requested: SSE3 -- Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX -- requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX -- SSE4_1 (15 files): + SSSE3 SSE4_1 -- SSE4_2 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 -- FP16 (0 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX -- AVX (4 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX -- AVX2 (29 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 -- AVX512_SKX (4 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX -- -- C/C++: -- Built as dynamic libs?: YES -- C++ standard: 11 -- C++ Compiler: /usr/bin/c++ (ver 9.3.0) -- C++ flags (Release): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG -- C++ flags (Debug): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG -- C Compiler: /usr/bin/cc -- C flags (Release): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG -- C flags (Debug): -fsigned-char -ffast-math -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -msse -msse2 -msse3 -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG -- Linker flags (Release): -Wl,--gc-sections -Wl,--as-needed -- Linker flags (Debug): -Wl,--gc-sections -Wl,--as-needed -- ccache: NO -- Precompiled headers: NO -- Extra dependencies: m pthread cudart_static dl rt nppc nppial nppicc nppidei nppif nppig nppim nppist nppisu nppitc npps cublas cudnn cufft -L/usr/local/cuda/lib64 -L/usr/lib/x86_64-linux-gnu -- 3rdparty dependencies: -- -- OpenCV modules: -- To be built: alphamat aruco bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking video videoio videostab xfeatures2d ximgproc xobjdetect xphoto -- Disabled: world -- Disabled by dependency: - -- Unavailable: cnn_3dobj cvv hdf java julia matlab ovis python2 sfm ts viz -- Applications: apps -- Documentation: NO -- Non-free algorithms: YES -- -- GUI: -- GTK+: YES (ver 3.24.20) -- GThread : YES (ver 2.64.6) -- GtkGlExt: NO -- OpenGL support: NO -- VTK support: NO -- -- Media I/O: -- ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11) -- JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80) -- WEBP: build (ver encoder: 0x020f) -- PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37) -- TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0) -- JPEG 2000: build (ver 2.3.1) -- OpenEXR: build (ver 2.3.0) -- HDR: YES -- SUNRASTER: YES -- PXM: YES -- PFM: YES -- -- Video I/O: -- FFMPEG: YES -- avcodec: YES (58.54.100) -- avformat: YES (58.29.100) -- avutil: YES (56.31.100) -- swscale: YES (5.5.100) -- avresample: NO -- GStreamer: YES (1.16.2) -- v4l/v4l2: YES (linux/videodev2.h) -- -- Parallel framework: pthreads -- -- Trace: YES (with Intel ITT) -- -- Other third-party libraries: -- Lapack: NO -- Eigen: YES (ver 3.3.7) -- Custom HAL: NO -- Protobuf: build (3.5.1) -- -- NVIDIA CUDA: YES (ver 11.2, CUFFT CUBLAS FAST_MATH) -- NVIDIA GPU arch: 75 -- NVIDIA PTX archs: 75 -- -- cuDNN: YES (ver 8.1.0) -- -- OpenCL: YES (no extra features) -- Include path: /home/webnautes/opencv-sources/opencv-4.5.1/3rdparty/include/opencl/1.2 -- Link libraries: Dynamic load -- -- Python 3: -- Interpreter: /usr/bin/python3 (ver 3.8.5) -- Libraries: /usr/lib/x86_64-linux-gnu/libpython3.8.so (ver 3.8.5) -- numpy: /home/webnautes/.local/lib/python3.8/site-packages/numpy/core/include (ver 1.17.3) -- install path: lib/python3.8/dist-packages -- -- Python (for build): /usr/bin/python3 -- -- Install to: /usr/local -- ----------------------------------------------------------------- -- -- Configuring done -- Generating done -- Build files have been written to: /home/webnautes/opencv-sources/opencv-4.5.1/build |
빌드 및 설치를 합니다.
$ time make -j$(nproc)
$ sudo make install
라이브러리를 인식할 수 있도록 해줍니다.
$ sudo ldconfig
다음 코드를 컴파일하여 CUDA를 OpenCV에서 사용할 수 있는지 테스트합니다.
일반 폴더에서 cpp 파일을 만들고 빌드를 해볼겁니다.
$ gedit test.cpp
코드는 아래와 같습니다.
#include <iostream> using namespace std; #include <opencv2/core.hpp> using namespace cv; #include <opencv2/cudaarithm.hpp> using namespace cv::cuda; int main() { printShortCudaDeviceInfo(getDevice()); int cuda_devices_number = getCudaEnabledDeviceCount(); cout << "CUDA Device(s) Number: "<< cuda_devices_number << endl; DeviceInfo _deviceInfo; bool _isd_evice_compatible = _deviceInfo.isCompatible(); cout << "CUDA Device(s) Compatible: " << _isd_evice_compatible << endl; return 0; } |
빌드
$ g++ -o test test.cpp $(pkg-config opencv4 --libs --cflags)
실행 결과 두 항목 모두 1이 나와야 합니다.
$ ./test
Device 0: "GeForce GTX 1660 Ti" 5936Mb, sm_75, Driver/Runtime ver.11.20/11.20
CUDA Device(s) Number: 1
CUDA Device(s) Compatible: 1
둘다 1이 보이지 않으면 cmake의 다음 두 옵션에 숫자를 잘못 적은겁니다.
그래픽 카드에 해당되는 숫자를 적어야 합니다.
-D CUDA_ARCH_BIN=5.0 -D CUDA_ARCH_PTX=5.0
간단히 웹캠 예제를 테스트해봅니다.
일정 폴더를 만들고 cpp파일을 만들겁니다.
$ gedit webcam_test.cpp
코드는 아래와 같습니다.
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; const int fps = 20; // frames por second int main() { Mat frame; VideoCapture videocapture(0); if (!videocapture.isOpened()) return -1; while (1) { bool ret = videocapture.read(frame); if (ret == false) break; imshow("Webcam", frame); int key = waitKey(1000 / fps); if (key == 27 ) break; } return 0; } |
빌드
$ g++ -o webcam_test webcam_test.cpp $(pkg-config opencv4 --libs --cflags)
실행
$ ./webcam_test
창이 하나 뜨면서 웹캠 영상이 보이게 됩니다. 아래 경고메시지를 무시해도 됩니다.
[ WARN:0] global /home/webnautes/opencv-sources/opencv-4.5.1/modules/videoio/src/cap_gstreamer.cpp (961) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
웹캠 영상이 보이지 않으면 치즈 같은 프로그램을 사용하여 우분투에서 웹캠을 정상 인식했는지 확인할 필요가 있습니다.
'Autonomous Tech. > Installation' 카테고리의 다른 글
[Ubuntu] Yolov3 Python으로 실행시키기 (엄청 쉬움) (0) | 2021.07.29 |
---|---|
[Ubuntu] OpenCV 설치하기 (초간단) in Ubuntu 20.02, Python3.8 (0) | 2021.07.16 |
ubuntu 20.02 한글 Korean(hangul) 간단 설정 (0) | 2021.07.16 |
[Windows] OpenCV 3 설치 방법 (Visual Studio 2019) (0) | 2021.07.09 |
NVIDIA 그래픽 드라이버 옛날 버전 설치 (0) | 2021.05.12 |