본문 바로가기

잡다한 것

Tensorflow 1.14 에 TensorRT 설치 하기(feat. bazel builder)

Tensorflow 1.14 버젼에서 TensorRT 환경을 셋팅하기 위한 문서 입니다.
주의 사항 : TensorRT가 설치되어 있는 환경에서 진행, numpy 버젼 1.19.0 미만

TensorRT 설치 (아래 링크 이용)

2020/07/30 - [잡다한 것] - GPU 가속을 위한 TensorRT 7.0.0, tkDNN 환경 구축하기(feat. cmake업그레이드)

 

GPU 가속을 위한 TensorRT 7.0.0, tkDNN 환경 구축하기(feat. cmake업그레이드)

해당 문서는 GPU 연산 가속화를 위한 TensorRT+tkDNN 환경을 구축하기 위한 포스팅입니다. TensorRT는 Nvidia에서 만든 딥러닝 추론 최적화 라이브러리이다. 기존 딥러닝 모델을 구조적으로 개선해서 추��

keyog.tistory.com

Numpy 버젼 다운그레이드

python3
>> import numpy
>> numpy.__version__
'1.19.1'

numpy 버젼 확인 후 1.19.0 이상일 경우 numpy 재설치 (필자는 1.19.1 버젼 이었다.)

pip3 uninstall numpy
pip3 install numpy==1.18.0

 

bazel install

bazel 설치하기

bazel 빌더를 설치하기 위해 해당 페이지로 이동
bazel의 버젼이 높을 경우 tensorflow 빌드가 안되기 때문에 해당 버젼 이용

https://github.com/bazelbuild/bazel/releases/tag/0.25.0

 

Release 0.25.0 · bazelbuild/bazel

Release notes: https://blog.bazel.build/2019/05/01/bazel-0.25.html Notice: Bazel installers contain binaries licensed under the GPLv2 with Classpath exception. Those installers should always be red...

github.com

bazel-0.25.0-installer-linux-x86_64.sh 다운로드

bazel 0.25.0 버젼 설치

cp ./Downloads/bazel-0.25.0-installer-linux-x86_64.sh .
chmod +x bazel-0.25.0-installer-linux-x86_64.sh
./bazel-0.25.0-installer-linux-x86_64.sh --user

 

bashrc에 path 등록

echo 'export PATH="$PATH:$HOME/bin"' >> ~/.bashrc
source ~/.bashrc
sudo ldconfig

 

Tensorflow 1.14 빌드

Tensorflow git에서 다운로드 및 브랜치 변경

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout r1.14

 

Tensorflow 빌드 configuration

configure 파일 실행

./configure

 

python3에 Tensorflow 빌드 하기 위한 설정 가이드
(본인의 환경에 맞게 경로를 설정해주세요.)

Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3

Found possible Python library paths:
  /home/govis/catkin_ws/devel/lib/python2.7/dist-packages
  /usr/local/lib/python3.6/dist-packages
  /usr/lib/python3/dist-packages
  /usr/lib/python3.6/dist-packages
  /opt/ros/melodic/lib/python2.7/dist-packages
Please input the desired Python library path to use. 
Default is [/home/govis/catkin_ws/devel/lib/python2.7/dist-packages]
/usr/lib/python3/dist-packages

Do you wish to build TensorFlow with XLA JIT support? [Y/n]: Y

Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: N

Do you wish to build TensorFlow with ROCm support? [y/N]: N

Do you wish to build TensorFlow with CUDA support? [y/N]: Y

Do you wish to build TensorFlow with TensorRT support? [y/N]: Y

Found CUDA 10.0 in:
    /usr/local/cuda/lib64
    /usr/local/cuda/include
Found cuDNN 7 in:
    /usr/local/cuda/lib64
    /usr/local/cuda/include
Found TensorRT 7 in:
    /usr/lib/x86_64-linux-gnu
    /usr/include/x86_64-linux-gnu


Please specify a list of comma-separated CUDA compute capabilities 
you want to build with.You can find the compute capability of your 
device at: https://developer.nvidia.com/cuda-gpus.Please note that
each additional compute capability significantly increases your 
build time and binary size,and that TensorFlow only supports compute
capabilities >= 3.5 [Default is: 3.5,7.0]: (Enter)
 
Do you want to use clang as CUDA compiler? [y/N]: N

Please specify which gcc should be used by nvcc as the host compiler. 
[Default is /usr/bin/gcc]: (Enter)

Do you wish to build TensorFlow with MPI support? [y/N]: N

Please specify optimization flags to use during compilation 
when bazel option "--config=opt" is specified
[Default is -march=native -Wno-sign-compare]: (Enter)

Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N

빌드 configuration 설정 완료

Tensorflow 빌드 시작

bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_package

빌드하는데에 굉장히 오래걸린다. 심지어 CPU까지도 다 차지해서 컴퓨터로 작업 안하는걸 추천

빌드가 완료 되면 해당 문구를 볼 수 있다.

 

Wheel 파일 생성 및 pip3 설치

Tensorflow wheel 파일 생성

bazel-bin/tensorflow/tools/pip_package/build_pip_package tensorflow_pkg

 

pip3 로 wheel 파일 설치

cd tensorflow_pkg
pip3 install tensorflow*.whl

pip3로 tensorflow 1.14 버젼이 자동으로 설치 된다.

 

Tensorflow에 TensorRT가 잘 포함 되었는지 확인

from tensorflow.compiler.tf2tensorrt.wrap_py_utils import get_linked_tensorrt_version 
from tensorflow.compiler.tf2tensorrt.wrap_py_utils import get_loaded_tensorrt_version

compiled_version = get_linked_tensorrt_version()
loaded_version = get_loaded_tensorrt_version()

print("Linked TensorRT version: %s" % str(compiled_version))
print("Loaded TensorRT version: %s" % str(loaded_version))
Linked TensorRT version: (7, 0, 0)
Loaded TensorRT version: (7, 0, 0)

 

-------20.8.6 오류 노트 -------

**만약 cp: cannot stat '/usr/include/x86_64-linux-gnu/NvInferRTSafe.h': No such file or directory 에러 발생시 해결법
~/tensorflow/third_party/tensorrt/ 폴더로 이동
tensorrt_configure.bzl 열어서 30번 줄 수정

 

**만약 bazel-out/host/bin/external/local_config_tensorrt/_virtual_includes/tensorrt_headers/third_party/tensorrt/NvInfer.h 에러 발생시 해결법
~/tensorflow/tensorflow/ 폴더로 이동
BUILD 파일에 594번 줄 수정

tf_cc_shared_object(
         "//tensorflow/cc:scope",
         "//tensorflow/cc/profiler",
         "//tensorflow/core:tensorflow",
+        "//tensorflow/compiler/tf2tensorrt:trt_conversion",
+        "//tensorflow/compiler/tf2tensorrt:trt_op_kernels",
+        "//tensorflow/compiler/tf2tensorrt:trt_engine_op_op_lib",
     ] + if_ngraph(["@ngraph_tf//:ngraph_tf"]),
 )

~/tensorflow/tensorflow/compiler/tf2tensorrt/convert/ 폴더로 이동
convert_node.cc 파일에 764번 줄 수정

class TRT_TensorOrWeights::SimpleITensor : public nvinfer1::ITensor {
 
   nvinfer1::TensorFormats getAllowedFormats() const override { return 1; }
 
-  bool isShape() const override { return false; }
+  bool isShapeTensor() const override { return false; }
+
+  bool isExecutionTensor() const override { return true; }
 #endif