Difference between revisions of "Feeding Tensorflow from GPU"

From ElphelWiki
Jump to: navigation, search
(Setup)
(For Java)
 
(20 intermediate revisions by the same user not shown)
Line 11: Line 11:
  
 
==Setup==
 
==Setup==
Kubuntu 18.04:
+
Kubuntu 18.04, CUDA 10.0 (10.0 is a requirement for Java version of TF 1.15 in Maven CDN):
 +
<font size=2>sudo apt install build-essential
 +
sudo apt install git curl
 +
 
  mkdir -p ~/git/tf_cv_cu
 
  mkdir -p ~/git/tf_cv_cu
 
  cd ~/git/tf_cv_cu
 
  cd ~/git/tf_cv_cu
 
   
 
   
  git clone https://github.com/fierval/tensorflow-object-detection-cpp.git
+
  '''# Download section'''
git clone https://github.com/fierval/fast_od.git
+
<nowiki>git clone https://github.com/fierval/tensorflow-object-detection-cpp.git
 +
git clone https://github.com/fierval/fast_od.git
 +
wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
 +
wget https://github.com/bazelbuild/bazel/releases/download/0.25.2/bazel_0.25.2-linux-x86_64.deb
 +
wget https://github.com/tensorflow/tensorflow/archive/v1.15.0.tar.gz -O tensorflow-1.15.0.tar.gz
 +
wget https://github.com/opencv/opencv/archive/3.4.9.tar.gz -O opencv-3.4.9.tar.gz
 +
wget https://github.com/opencv/opencv_contrib/archive/3.4.9.tar.gz -O opencv_contrib-3.4.9.tar.gz</nowiki>
 
   
 
   
  wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
+
  '''# Unpack archives'''
 
  tar xzvf cmake-3.16.2.tar.gz
 
  tar xzvf cmake-3.16.2.tar.gz
 +
tar xzvf tensorflow-1.15.0.tar.gz
 +
tar xzvf opencv-3.4.9.tar.gz
 +
tar xzvf opencv_contrib-3.4.9.tar.gz
 +
 +
'''# Build & update cmake'''
 
  sudo apt install libssl-dev
 
  sudo apt install libssl-dev
 
  sudo apt install qt4-default
 
  sudo apt install qt4-default
Line 30: Line 44:
 
  cmake-gui -version
 
  cmake-gui -version
 
   
 
   
  wget https://github.com/bazelbuild/bazel/releases/download/0.25.2/bazel_0.25.2-linux-x86_64.deb
+
  '''# Install bazel'''
 
  sudo dpkg -i bazel_0.25.2-linux-x86_64.deb
 
  sudo dpkg -i bazel_0.25.2-linux-x86_64.deb
  wget https://github.com/tensorflow/tensorflow/archive/v1.15.0.tar.gz -O tensorflow-1.15.0.tar.gz
+
  bazel version
  tar xzvf tensorflow-1.15.0.tar.gz
+
  cd ~/git/tensorflow-1.15.0/
+
  '''# Build TF'''
 +
  cd ~/git/tf_cv_cu/tensorflow-1.15.0/
 
  tensorflow/contrib/makefile/download_dependencies.sh
 
  tensorflow/contrib/makefile/download_dependencies.sh
 
  ./configure
 
  ./configure
  # pick all defaults except select '''yes''' for CUDA support
+
  '''# pick all defaults except select '''yes''' for CUDA support'''
 
  bazel build //tensorflow:libtensorflow_cc.so
 
  bazel build //tensorflow:libtensorflow_cc.so
 
   
 
   
  wget https://github.com/opencv/opencv/archive/3.4.9.tar.gz -O opencv-3.4.9.tar.gz
+
  '''# Install TF with headers'''
  tar xzvf opencv-3.4.9.tar.gz
+
sudo mkdir /usr/local/tensorflow
  wget https://github.com/opencv/opencv_contrib/archive/3.4.9.tar.gz -O opencv_contrib-3.4.9.tar.gz
+
sudo mkdir /usr/local/tensorflow/include
tar xzvf opencv_contrib-3.4.9.tar.gz
+
sudo cp -r tensorflow/contrib/makefile/downloads/eigen/Eigen /usr/local/tensorflow/include/
 +
sudo cp -r tensorflow/contrib/makefile/downloads/eigen/unsupported /usr/local/tensorflow/include/
 +
sudo cp tensorflow/contrib/makefile/downloads/nsync/public/* /usr/local/tensorflow/include/
 +
sudo cp -r bazel-genfiles/tensorflow /usr/local/tensorflow/include/
 +
sudo cp -r tensorflow/cc /usr/local/tensorflow/include/tensorflow
 +
sudo cp -r tensorflow/core /usr/local/tensorflow/include/tensorflow
 +
sudo mkdir /usr/local/tensorflow/include/third_party
 +
sudo cp -r third_party/eigen3 /usr/local/tensorflow/include/third_party/
 +
sudo mkdir /usr/local/tensorflow/lib
 +
sudo cp bazel-bin/tensorflow/libtensorflow_*.so /usr/local/tensorflow/lib
 +
'''# extras, not mentioned in the reference guide'''
 +
sudo cp -r tensorflow/contrib/makefile/downloads/absl/absl /usr/local/tensorflow/include/
 +
sudo cp -r tensorflow/contrib/makefile/downloads/protobuf/src/google /usr/local/tensorflow/include/
 +
sudo cp -r tensorflow/stream_executor /usr/local/tensorflow/include/tensorflow/
 +
sudo cp bazel-bin/tensorflow/* /usr/local/tensorflow/lib 
 +
sudo ln -sf /usr/local/tensorflow/lib/libtensorflow_framework.so.1.15.0 /usr/local/tensorflow/lib/libtensorflow_framework.so
 +
 +
'''# Build & install OpenCV'''
 +
sudo apt install libgtkglext1 libgtkglext1-dev
 +
sudo apt install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
 +
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
 +
# sudo apt install libjasper-dev '''# no such package in 18.04'''
 +
 +
sudo cp ~/git/tf_cv_cu/fast_od/docker/nvcuvid/dynlink_* /usr/local/cuda/include
 +
 +
cd ~/git/tf_cv_cu/opencv-3.4.9
 +
mkdir build; cd build
 +
'''# haven't tested this line yet. Did from cmake-gui'''
 +
  cmake -D WITH_CUDA=ON \
 +
      -D OPENCV_EXTRA_MODULES_PATH=~/git/tf_cv_cu/opencv_contrib-3.4.9/modules \
 +
      -D BUILD_PERF_TESTS=OFF \
 +
      -D BUILD_TESTS=OFF \
 +
      -D BUILD_opencv_cudacodec=ON \
 +
      -D WITH_NVCUVID=ON \
 +
      -D WITH_GTK_2_X=ON \
 +
      ..
 +
  make -j8
 +
sudo make install
 +
sudo ldconfig
 +
 +
'''# tensorflow-object-detection-cpp'''
 +
cd ~/git/tf_cv_cu/tensorflow-object-detection-cpp
 +
mkdir build; cd build
 +
cmake ..
 +
make
 +
./tf_detector_example
 +
 +
'''# fast_od'''
 +
cd ~/git/tf_cv_cu/fast_od
 +
mkdir build; cd build
 +
cmake ..
 +
make
 +
'''# update paths paths to the model, labels and the video from tensorflow-object-detection-cpp in fast_od/run_tf.sh'''
 +
cd ..
 +
./run_tf_elphel.sh 1</font>
 +
 
 +
==For Java==
 +
* https://www.tensorflow.org/install/lang_java which leads to a more detailed:
 +
* https://github.com/tensorflow/tensorflow/blob/master/tensorflow/java/README.md
 +
 
 +
In short, to Build TF for Java from source:
 +
<font size=2>./configure
 +
bazel build --config opt \
 +
  //tensorflow/java:tensorflow \
 +
  //tensorflow/java:libtensorflow_jni</font>

Latest revision as of 11:48, 20 February 2020

About

Reference guides:

Target projects:

  • tensorflow-object-detection-cpp - contains a sample model, labels and a test video
  • fast_od - contains feeding Tensorflow from GPU

Setup

Kubuntu 18.04, CUDA 10.0 (10.0 is a requirement for Java version of TF 1.15 in Maven CDN):

sudo apt install build-essential
sudo apt install git curl

mkdir -p ~/git/tf_cv_cu
cd ~/git/tf_cv_cu

# Download section
git clone https://github.com/fierval/tensorflow-object-detection-cpp.git
git clone https://github.com/fierval/fast_od.git
wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
wget https://github.com/bazelbuild/bazel/releases/download/0.25.2/bazel_0.25.2-linux-x86_64.deb
wget https://github.com/tensorflow/tensorflow/archive/v1.15.0.tar.gz -O tensorflow-1.15.0.tar.gz
wget https://github.com/opencv/opencv/archive/3.4.9.tar.gz -O opencv-3.4.9.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/3.4.9.tar.gz -O opencv_contrib-3.4.9.tar.gz

# Unpack archives
tar xzvf cmake-3.16.2.tar.gz
tar xzvf tensorflow-1.15.0.tar.gz
tar xzvf opencv-3.4.9.tar.gz
tar xzvf opencv_contrib-3.4.9.tar.gz

# Build & update cmake
sudo apt install libssl-dev
sudo apt install qt4-default
cd cmake-3.16.2
./bootstrap -qt-gui
make -j8
sudo make install

cmake -version
cmake-gui -version

# Install bazel
sudo dpkg -i bazel_0.25.2-linux-x86_64.deb
bazel version

# Build TF
cd ~/git/tf_cv_cu/tensorflow-1.15.0/
tensorflow/contrib/makefile/download_dependencies.sh
./configure
# pick all defaults except select yes for CUDA support
bazel build //tensorflow:libtensorflow_cc.so

# Install TF with headers
sudo mkdir /usr/local/tensorflow
sudo mkdir /usr/local/tensorflow/include
sudo cp -r tensorflow/contrib/makefile/downloads/eigen/Eigen /usr/local/tensorflow/include/
sudo cp -r tensorflow/contrib/makefile/downloads/eigen/unsupported /usr/local/tensorflow/include/
sudo cp tensorflow/contrib/makefile/downloads/nsync/public/* /usr/local/tensorflow/include/
sudo cp -r bazel-genfiles/tensorflow /usr/local/tensorflow/include/
sudo cp -r tensorflow/cc /usr/local/tensorflow/include/tensorflow
sudo cp -r tensorflow/core /usr/local/tensorflow/include/tensorflow
sudo mkdir /usr/local/tensorflow/include/third_party
sudo cp -r third_party/eigen3 /usr/local/tensorflow/include/third_party/
sudo mkdir /usr/local/tensorflow/lib
sudo cp bazel-bin/tensorflow/libtensorflow_*.so /usr/local/tensorflow/lib
# extras, not mentioned in the reference guide
sudo cp -r tensorflow/contrib/makefile/downloads/absl/absl /usr/local/tensorflow/include/
sudo cp -r tensorflow/contrib/makefile/downloads/protobuf/src/google /usr/local/tensorflow/include/
sudo cp -r tensorflow/stream_executor /usr/local/tensorflow/include/tensorflow/
sudo cp bazel-bin/tensorflow/* /usr/local/tensorflow/lib 
sudo ln -sf /usr/local/tensorflow/lib/libtensorflow_framework.so.1.15.0 /usr/local/tensorflow/lib/libtensorflow_framework.so

# Build & install OpenCV
sudo apt install libgtkglext1 libgtkglext1-dev
sudo apt install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
# sudo apt install libjasper-dev # no such package in 18.04

sudo cp ~/git/tf_cv_cu/fast_od/docker/nvcuvid/dynlink_* /usr/local/cuda/include

cd ~/git/tf_cv_cu/opencv-3.4.9
mkdir build; cd build
# haven't tested this line yet. Did from cmake-gui
cmake -D WITH_CUDA=ON \
      -D OPENCV_EXTRA_MODULES_PATH=~/git/tf_cv_cu/opencv_contrib-3.4.9/modules \
      -D BUILD_PERF_TESTS=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_opencv_cudacodec=ON \
      -D WITH_NVCUVID=ON \
      -D WITH_GTK_2_X=ON \
      ..
make -j8
sudo make install
sudo ldconfig

# tensorflow-object-detection-cpp
cd ~/git/tf_cv_cu/tensorflow-object-detection-cpp
mkdir build; cd build
cmake ..
make
./tf_detector_example

# fast_od
cd ~/git/tf_cv_cu/fast_od
mkdir build; cd build
cmake ..
make
# update paths paths to the model, labels and the video from tensorflow-object-detection-cpp in fast_od/run_tf.sh
cd ..
./run_tf_elphel.sh 1

For Java

In short, to Build TF for Java from source:

./configure
bazel build --config opt \
 //tensorflow/java:tensorflow \
 //tensorflow/java:libtensorflow_jni