การติดตั้ง Tensorflow & OpenCV สำหรับ RTX3090 พร้อม CUDA 11.1 & cuDNN 8 บน Ubuntu 20.04 LTS (3080 and 3070 compatible)
By: Natthakorn Kasamsumran
Tags: Rtx 3090, Superaiengineer, Optimizersuperai, Opencv, TensorFlow

Prerequisite installation and dependency requirement

ทำการติดตั้ง Prerequisite และ dependency ทั้งหมดตามคำสั่งด้านล่างนี้ ซึ่งจะใช้ระยะเวลาพอสมควร และต้องมีอินเตอร์เน็ตที่เสถียร และพื้นที่จัดเก็บข้อมูลประมาณ 3 Gigabytes โดยการติดตั้งทั้งหมดนี้ จะส่งผลต่อการ Build ทั้ง Tensorflow และ OpenCV คำสั่งแรกจะเป็นการ Upgrade ระบบ Ubuntu 20.04 LTS ให้โปรแกรมทั้งหมดเป็นรุ่นล่าสุด คำสั่งที่สองจะเป็นการติดตั้งชุดคำสั่งสำหรับสร้างการติดตั้ง การแตกไฟล์ ตัวแปลภาษา (Complier) และ Add-on ภาษา Python รุ่น 3.8 และคำสั่งสุดท้ายจะเป็น Dependency ที่เกี่ยวข้องกับการประมวลผลภาพ (Image processing) และการเข้ารหัสไฟล์วีดีโอ สำหรับผู้ที่ต้องการดึงศักยภาพของ OpenCV อย่างเต็มที่

:~$ sudo apt-get update && sudo apt-get full-upgrade :~$ sudo apt-get -y install build-essential dkms checkinstall cmake unzip zip pkg-config yasm git g++ gfortran python3 python3-dev python3-pip python3-testresources python3-tk graphviz :~$ sudo apt-get -y install freeglut3 freeglut3-dev libxi-dev libxmu-dev libjpeg-dev libpng-dev libtiff-dev libjpeg8-dev libtiff5-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libv4l-dev libgtk-3-dev libgtk2.0-dev libtbb-dev qt5-default libatlas-base-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libopencore-amrnb-dev libopencore-amrwb-dev libavresample-dev x264 v4l-utils libprotobuf-dev protobuf-compiler libgoogle-glog-dev libgflags-dev libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

CUDA Toolkit 11.1 with Nvidia GPU Driver Installation

CUDA Toolkit 11.1 Update 1 Downloads with NVIDIA Driver

https://developer.nvidia.com/cuda-downloads

ถัดมาจะเป็นการติดตั้ง Nvidia CUDA Toolkit รุ่น 11.1 โดยที่ระหว่างการติดตั้ง Nvidia GPU Driver จะถูกติดตั้งไปพร้อมๆ กัน จึงไม่จำเป็นต้องลง GPU Driver แยกจากขึ้นตอนนี้ ให้เข้าไปที่ https://developer.nvidia.com/cuda-downloads และเลือก Platfrom เป็น Linux > x86_64 > Ubuntu > 20.04 > deb (local) ไฟล์มีขนาดประมาณ 2 Gigabytes หรือสามารถใช้คำสั่งด้านล่าง เมื่อติดตั้ง CUDA Toolkit ด้วยคำสั่ง sudo apt-get -y install cuda ให้รีบู๊ตเครื่องหนึ่งครั้ง



:~$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

:~$ wget

:~$ sudo dpkg -i cuda-repo-ubuntu2004–11–1-local_11.1.1–455.32.00–1_amd64.deb

:~$ sudo apt-key add /var/cuda-repo-ubuntu2004-11-1-local/7fa2af80.pub

:~$ sudo apt-get update

:~$ sudo apt-get -y install cuda

:~$ sudo reboot :~$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin :~$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600:~$ wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda-repo-ubuntu2004-11-1-local_11.1.1-455.32.00-1_amd64.deb :~$ sudo dpkg -i cuda-repo-ubuntu2004–11–1-local_11.1.1–455.32.00–1_amd64.deb:~$ sudo apt-key add /var/cuda-repo-ubuntu2004-11-1-local/7fa2af80.pub:~$ sudo apt-get update:~$ sudo apt-get -y install cuda:~$ sudo reboot

หลังจากรีบู๊ตเรียบร้อยแล้วให้ตรวจสอบความสมบูรณ์ของการติดตั้งด้วยคำสั่ง nvidia-smi เมื่อปรากฎแบบภาพด้านล่างแสดงว่าติดตั้งสำเร็จ ถัดมาให้เพิ่ม PATH ของ CUDA Toolkit ในไฟล์ .bashrc โดยการนำคำสั่ง export … 4 บรรทัดวางลงในด้านล่างสุดในไฟล์ เมื่อวางแล้วกด Ctrl + O และ Ctrl + X แล้วเรียกคำสั่ง source ~/.bashrc จะทำให้ระบบ Ubuntu เข้าถึง CUDA Libraries ได้ทุกครั้งที่เปิดเครื่อง

:~$ nvidia-smi

:~$ sudo nano ~/.bashrc ----------- สิ่งที่ต้องเพิ่มเข้าไปท้ายสุดในไฟล์ .bashrc -----------

export PATH=/usr/local/cuda-11.1/bin:${PATH}

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}

export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64:${LD_LIBRARY_PATH}

export CUDA_HOME=/usr/local/cuda :~$ source ~/.bashrc

การตรวจสอบการติดตั้ง CUDA 11.1 และ Nvidia driver 455 ด้วยคำสั่ง nvidia-smi

cuDNN v8.0.5 Installation (The NVIDIA CUDA Deep Neural Network library)

อีกหนึ่งสิ่งสำคัญที่ควรทำหลังจากติดตั้ง CUDA Toolkit แล้ว คือการติดตั้ง cuDNN (The NVIDIA CUDA Deep Neural Network library) ถือเป็น Library ส่วนเสริมสำหรับประมวลผลทางด้าน Deep learning และ Neural network เมื่อ Tensorflow เรียกการประมวลผลการ์ดจอ CUDA จะเรียก cuDNN มาตามลำดับ เข้าไปที่ https://developer.nvidia.com/cudnn ในขั้นตอนนี้จะต้องสมัคร Account กับทาง Nvidia developer ก่อนจึงจะสามารถเข้าไปดาวโหลดได้ ให้ดาวโหลด 3 ไฟล์ดังนี้ 1.) cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb) 2.) cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb) และ 3.) cuDNN Code Samples and User Guide for Ubuntu20.04 x86_64 (Deb) เมื่อโหลดแล้วให้ย้ายไฟล์มาที่ ./home ก่อนแล้วจึงติดตั้งด้วยคำสั่ง sudo dpkg -i …

Download cuDNN v8.0.4 (September 28th, 2020)

https://developer.nvidia.com/cudnn

go to https://developer.nvidia.com/cudnn | Download cuDNN v8.0.5 (November 9th, 2020), for CUDA 11.1 “cuDNN Runtime Library for Ubuntu20.04 x86_64 (Deb)” as libcudnn8_8.0.5.39–1+cuda11.1_amd64.deb and “cuDNN Developer Library for Ubuntu20.04 x86_64 (Deb)” as libcudnn8-dev_8.0.5.39–1+cuda11.1_amd64.deb and “cuDNN Code Samples and User Guide for Ubuntu20.04 x86_64 (Deb)” as ibcudnn8-samples_8.0.5.39–1+cuda11.1_amd64.deb :~$ mv ./Downloads/libcudnn8_8.0.5.39–1+cuda11.1_amd64.deb ./

:~$ mv ./Downloads/libcudnn8-dev_8.0.5.39–1+cuda11.1_amd64.deb ./

:~$ mv ./Downloads/libcudnn8-samples_8.0.5.39–1+cuda11.1_amd64.deb ./

:~$ sudo dpkg -i libcudnn8_8.0.5.39–1+cuda11.1_amd64.deb

:~$ sudo dpkg -i libcudnn8-dev_8.0.5.39–1+cuda11.1_amd64.deb

:~$ sudo dpkg -i libcudnn8-samples_8.0.5.39–1+cuda11.1_amd64.deb

หลังจากติดตั้ง cuDNN เรียบร้อยแล้ว ให้ทดสอบการทำงานโดยการนำตัวอย่าง Code Samples มาคอมไพล์ให้ได้ไฟล์ mnistCUDNN ด้วยคำสั่งด้านล่าง หากติดตั้งถูกต้องจะปรากฎผลลัพธ์ดังภาพด้านล่าง เมื่อทุกอย่างเรียบร้อยแล้วเตรียม Build Tensorflow ได้ (ก่อนหน้านี้ช่วงต้นเดือนทาง Nvidia official ยังไม่ปล่อยตัวติดตั้งสำหรับ Ubuntu 20.04 LTS ซึ่งการลงจะใช้คำสั่งมากกว่านี้หลายขั้นตอน โชคดีไป)

การทดสอบการติดตั้ง cuDNN โดยการเรียกตัวอย่าง mnistCUDNN

:~$ cp -r /usr/src/cudnn_samples_v8/ ~

:~$ cd cudnn_samples_v8/mnistCUDNN/

:~$ make clean && make

:~$ ./mnistCUDNN

:~$ cd ~

ผลลัพธ์เมื่อติดตั้ง cuDNN เสร็จสิ้นอย่างสมบูรณ์ รวมถึง CUDA Toolkits

Tensorflow v2.5.0 Bazel build on your PC.

การทำ Tensorflow build configuration เพื่อให้เรียกใช้ CUDA 11.1

ผลลัพธ์การทำ Tensorflow build configuration เสร็จสมบูรณ์

ชุดคำสั่ง Build สำหรับการติดตั้งบน System PATH



#### Install Bazel for tensorflow build #### Tensorflow Build in system#### Install Bazel for tensorflow build https://docs.bazel.build/versions/master/install-ubuntu.html

:~$ curl -fsSL

:~$ sudo mv bazel.gpg /etc/apt/trusted.gpg.d/

:~$ echo "deb [arch=amd64]

:~$ sudo apt update && sudo apt install bazel-3.1.0

:~$ sudo apt install openjdk-11-jdk :~$ sudo apt-get -y install curl gnupg openjdk-11-jdk:~$ curl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg — dearmor > bazel.gpg:~$ sudo mv bazel.gpg /etc/apt/trusted.gpg.d/:~$ echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list:~$ sudo apt update && sudo apt install bazel-3.1.0:~$ sudo apt install openjdk-11-jdk :~$ pip3 install -U six 'numpy<1.19.0' wheel setuptools mock 'future>=0.17.1' 'gast==0.3.3' typing_extensions wheel

:~$ pip3 install keras_applications — no-deps

pip3 install keras_preprocessing — no-deps

:~$ cd tensorflow

:~$ git checkout v2.3.0

:~$ ./configure :~$ git clone https://github.com/tensorflow/tensorflow.git :~$ cd tensorflow:~$ git checkout v2.3.0:~$ ./configure *** You have bazel 3.1.0 installed.

Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3.8 *** Found possible Python library paths:

/home/nachodeng48/.virtualenvs/cv/lib/python3.8/site-packages

Please input the desired Python library path to use. Default is [/home/nachodeng48/.virtualenvs/cv/lib/python3.8/site-packages] *** Do you wish to build TensorFlow with ROCm support? [y/N]: n

No ROCm support will be enabled for TensorFlow. *** Do you wish to build TensorFlow with CUDA support? [y/N]: y

CUDA support will be enabled for TensorFlow. *** Do you wish to build TensorFlow with TensorRT support? [y/N]: n

No TensorRT support will be enabled for TensorFlow. Found CUDA 11.1 in:

/usr/local/cuda-11.1/targets/x86_64-linux/lib

/usr/local/cuda-11.1/targets/x86_64-linux/include

Found cuDNN 8 in:

/usr/lib/x86_64-linux-gnu

/usr/include *** Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: /usr/bin/gcc-9 *** Do you want to use clang as CUDA compiler? [y/N]: n

nvcc will be used as CUDA compiler. *** Please specify optimization flags to use during compilation when bazel option “ — config=opt” is specified [Default is -march=native -Wno-sign-compare]: *** Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n

ชุดคำสั่ง Build สำหรับการติดตั้งบน Python environment PATH (แนะนำ)



#### Install Bazel for tensorflow build #### Tensorflow Build in system#### Install Bazel for tensorflow build https://docs.bazel.build/versions/master/install-ubuntu.html

:~$ wget

:~$ sudo python3 get-pip.py

:~$ sudo pip install virtualenv virtualenvwrapper

:~$ sudo rm -rf ~/get-pip.py ~/.cache/pip :~$ sudo apt-get install python3-distutils:~$ wget https://bootstrap.pypa.io/get-pip.py :~$ sudo python3 get-pip.py:~$ sudo pip install virtualenv virtualenvwrapper:~$ sudo rm -rf ~/get-pip.py ~/.cache/pip :~$ sudo nano ~/.bashrc ----------- สิ่งที่ต้องเพิ่มเข้าไปท้ายสุดในไฟล์ .bashrc -----------

# virtualenv and virtualenvwrapper

export WORKON_HOME=$HOME/.virtualenvs

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

source /usr/local/bin/virtualenvwrapper.sh

export PATH=$PATH:$HOME/.bazel/bin/ :~$ source ~/.bashrc

:~$ mkvirtualenv cv -p python3

:~$ workon cv (cv) :~$ sudo apt-get -y install curl gnupg openjdk-11-jdk (cv) :~$ wget https://github.com/bazelbuild/bazel/releases/download/3.7.0/bazel-3.7.0-installer-linux-x86_64.sh

(cv) :~$ ./bazel-3.7.0-installer-linux-x86_64.sh — user

(cv) :~$ cd “/home/microsisdcn/.bazel/bin” && curl -fLO (cv) :~$ chmod +x bazel-3.7.0-installer-linux-x86_64.sh(cv) :~$ ./bazel-3.7.0-installer-linux-x86_64.sh — user(cv) :~$ cd “/home/microsisdcn/.bazel/bin” && curl -fLO https://releases.bazel.build/3.1.0/release/bazel-3.1.0-linux-x86_64 && chmod +x bazel-3.1.0-linux-x86_64 (cv) :~$ pip install -U six ‘numpy<1.19.0’ wheel setuptools mock ‘future>=0.17.1’ ‘gast==0.3.3’ typing_extensions wheel

(cv) :~$ pip install keras_applications — no-deps

(cv) :~$ pip install keras_preprocessing — no-deps

(cv) :~$ cd tensorflow

(cv) :~$ git checkout v2.3.0

(cv) :~$ python configure.py (cv) :~$ git clone https://github.com/tensorflow/tensorflow.git (cv) :~$ cd tensorflow(cv) :~$ git checkout v2.3.0(cv) :~$ python configure.py *** You have bazel 3.1.0 installed.

Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3.8 *** Found possible Python library paths:

/home/nachodeng48/.virtualenvs/cv/lib/python3.8/site-packages

Please input the desired Python library path to use. Default is [/home/nachodeng48/.virtualenvs/cv/lib/python3.8/site-packages] *** Do you wish to build TensorFlow with ROCm support? [y/N]: n

No ROCm support will be enabled for TensorFlow. *** Do you wish to build TensorFlow with CUDA support? [y/N]: y

CUDA support will be enabled for TensorFlow. *** Do you wish to build TensorFlow with TensorRT support? [y/N]: n

No TensorRT support will be enabled for TensorFlow. Found CUDA 11.1 in:

/usr/local/cuda-11.1/targets/x86_64-linux/lib

/usr/local/cuda-11.1/targets/x86_64-linux/include

Found cuDNN 8 in:

/usr/lib/x86_64-linux-gnu

/usr/include *** Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]: /usr/bin/gcc-9 *** Do you want to use clang as CUDA compiler? [y/N]: n

nvcc will be used as CUDA compiler. *** Please specify optimization flags to use during compilation when bazel option “ — config=opt” is specified [Default is -march=native -Wno-sign-compare]: *** Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n

การใช้คำสั่ง bazel ในการทำ Tensorflow building ให้เป็น pip package

คำสั่ง Bazel build ให้เป็น Python Wheel Package (.whl file)

(cv) :~$ bazel build — config=cuda — config=opt -c opt //tensorflow/tools/pip_package:build_pip_package (cv) :~$ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package (cv) :~$ ~/tensorflow_build

(cv) :~$ ls

(cv) :~$ cd ~

เมื่อ Build เสร็จสมบูรณ์จะปรากฎข้อความ Build completed successfully

คำสั่งติดตั้ง OpenCV แบบ Build from source (สำหรับ Python environment)



(cv) :~$ git clone

(cv) :~$ cd ~/opencv

(cv) :~$ mkdir build && cd build

(cv) :~$ pip install numpy (cv) :~$ git clone https://github.com/opencv/opencv.git (cv) :~$ git clone https://github.com/opencv/opencv_contrib.git (cv) :~$ cd ~/opencv(cv) :~$ mkdir build && cd build(cv) :~$ pip install numpy (cv) :~$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_GENERATE_PKGCONFIG=ON \ -D WITH_CUDA=ON \ -D OPENCV_DNN_CUDA=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python \ -D BUILD_EXAMPLES=ON .. (cv) :~$ make -j16

(cv) :~$ sudo make install

(cv) :~$ sudo ldconfig (cv) :~$ cd ~/.virtualenvs/cv/lib/python3.8/site-packages/

(cv) :~$ ln -s /usr/local/lib/python3.8/site-packages/cv2/python-3.8/cv2.cpython-38m-x86_64-linux-gnu.so cv2.so (cv) :~$ cd ~

การแปลง Tensorflow pip package ไปเป็น Tensorflow pip wheel (.whl files)

(cv) :~$ pip install numpy scipy pandas h5py scikit-learn scikit-image wheel QtPy matplotlib Cython imgaug imutils jupyterlab notebook (cv) :~$ pip install ./tensorflow_build/tensorflow-2.5.0-cp38-cp38-linux_x86_64.whl --- คำสั่งนี้ใช้เฉพาะเมื่อรันคำสั่งติดตั้ง OpenCV แบบ Build from source ด้านบน ---

--- ถ้าไม่ได้ Build OpenCV จะมีการติดตั้ง opencv-python ให้ตอน pip wheel ---

(cv) :~$ pip uninstall opencv-python



(cv) :~$ pip install keras progressbar keras-resnet IPython[all] (cv) :~$ python3

>>> import tensorflow as tf

>>> print(tf.__version__)

>>> hello = tf.constant(‘Hello, TensorFlow!’)

>>> import cv2

>>> cv2.__version__

ผลลัพธ์ทดสอบการติดตั้ง Tensorflow v2.5 และ OpenCV v4.5.0-dev หาทำขั้นตอนถูกต้อง

ผลการทดสอบฝึกโมเดลผ่าน Jupyter notebook และ Python script

ทดสอบการฝึกโมเดลด้วย Keras + Tensorflow ผ่าน Jupyter notebook

ทดสอบการฝึกโมเดลด้วย Keras + Tensorflow ผ่าน Python script (.py files)

ทดสอบการพยากรณ์วัตถุในภาพ (Object detection with RTX3090 testing)

ทดสอบการฝึกโมเดล Convolution Neural Network (CNN) ผ่าน Jupyter notebook