Ubuntu 16.04 에서 Docker 를 사용하여 Cuda 9.0, Cudnn 7.0 으로 환경 설정하고 Tensorflow 1.8 을 Source에서 설치하기
Installing Tensorflow 1.8 from source by setting cuda 9.0 and cudnn 7.0 using Docker in Ubuntu 16.04
요약
도커세팅 >> ubuntu16.04 cuda 9.0 image pull >> nvidia-docker 설치 >> 그래픽카드 드라이버 설치확인 >> 텐서플로우 버전호환 체크 >> Cudnn 7.0 설치 >> Tensorflow1.8-gpu 소스에서 설치 >> 설치확인 >> ROS설치
1. Docker Setting
도커는 환경설정을 편리하게 관리하기 위해서 많이 쓰이는 도구이다. 자세한 정보는 도커 홈페이지에서 확인하기 바란다. 본 단락에서는 도커의 설치부터 도커 불러오기 그리고 불러온 이미지를 실행시키는것까지를 목표로 한다.
https://docs.docker.com/engine/install/ubuntu/
1.1 도커 설치하기
# Installing Docker
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo docker run hello-world
1.2 도커 시작 후 우분투 16.04 설치하기
$ sudo service docker start
$ docker pull nvidia/cuda:9.0-devel-ubuntu16.04
$ sudo docker images # pull을 한 후 추가된 이미지를 확인할 수 있을것.
REPOSITORY TAG IMAGE ID CREATED SIZE
874 latest f8acc071683a 2 days ago 23.5GB
tensorflow1.14.0 cuda-10.0cudnn7.4anacondapy3.6 874461a8d9e3 5 days ago 2.29GB
369 latest 937745e8c58d 5 days ago 2.29GB
nvidia/cuda 10.0-devel-ubuntu16.04 369515955235 3 weeks ago 2.29GB
nvidia/cuda 9.0-devel-ubuntu16.04 6e5221b2f465 2 months ago 1.82GB
meadml/cuda10.0-cudnn7-devel-ubuntu16.04-python3.6 latest 04aa3c76f9ca 20 months ago 3.34GB
tensorflow/tensorflow 1.14.0-gpu-py3 a7a1861d2150 2 years ago 3.51GB
restrd/tensorflow1.8-cuda9.0-cudnn7-devel-ubuntu16.04 latest 7ad839790e4a 3 years ago 8.41GB
$ sudo docker run -it 6e5
root@98952d3f9752:/#
아래의 명령어를 통해 이미지로부터 받아온 우분투 버전을 확인해보자.
# cat /etc/issue
Ubuntu 16.04.7 LTS \n \l
Cuda9.0 가 설치되어있는 image 파일을 받아왔기 때문에 cuda가 설치되어있다. 명령어를 통해 확인해보자.
# nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Sep__1_21:08:03_CDT_2017
Cuda compilation tools, release 9.0, V9.0.176
2. Nvidia-docker 를 통해 그래픽 드라이버를 도커 컨테이너에 입력하기
기존 환경에서의 그래픽 드라이버가 설치되어있어야 한다. 기존 환경에서 그래픽 드라이버가 설치되어있다고 해서 도커 컨테이너 환경에서도 그래픽 드라이버가 적용된다는 것은 아니다. 그것을 이어주는 툴이 바로 Nvidia-Docker이다.
$ nvidia-smi
Thu Sep 2 15:08:07 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.78 Driver Version: 410.78 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 1060 Off | 00000000:01:00.0 On | N/A |
| N/A 52C P3 17W / N/A | 382MiB / 6078MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 1609 G /usr/lib/xorg/Xorg 262MiB |
| 0 3215 G compiz 49MiB |
| 0 4226 G /usr/lib/firefox/firefox 19MiB |
| 0 18995 G ...AAgAAAAAAAAACAAAAAAAAAA= --shared-files 48MiB |
+-----------------------------------------------------------------------------+
호환이 되는지를 확인할 필요가 있다.
현재 필요로 하는 Cuda 버전은 9.0 이다. 384.81 과 차이가 많지 않은 410.48을 사용하고 있는데, 인덱스 상에선 일정 수준 이상의 드라이버를 사용하면 된다고 하니 그대로 사용하고 문제가 생기면 다운그레이드를 해주도록 하자.
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
https://www.tensorflow.org/install/source?hl=ko
본 포스트에서는 텐서플로우를 소스에서 빌드할 것이기 때문에 Bazel, Python, Cudnn, Cuda의 버전에도 신경을 써주어야 한다. 도커에서 이미지를 pull 할 때 cudnn의 버전이 7.0 인 것이 없었기 때문에 cudnn은 따로 설치하는 방향으로 진행할 것이다.
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
3. CuDNN 7.0 설치하기
http://ejklike.github.io/2017/03/06/install-tensorflow1.0-on-ubuntu16.04-2.html
먼저 김 은지 님의 블로그에서 큰 도움을 받았다. 자세한 설명을 위해서는 본 글을 참고하기 바란다.
Cudnn v7.0을 설치해보자. CuDNN의 경우 파일을 다운로드하기 위해서는 Nvidia 회원가입이 필요하다.
https://developer.nvidia.com/rdp/cudnn-archive
wget을 통해서 컨테이너의 폴더 안에 다운로드하여주자. 다운로드한 파일의 이름은 원본과 약간의 차이를 보인다. (크롬으로 다운로드를 진행하다 정지한 후 링크를 복사해서 wget으로 다운로드하면 이런 현상을 보임) 터미널 mv명령어로 이름을 바꿔준 후 압축을 푼 뒤 직접 Cuda 경로에 넣어주면 된다.
# mv cudnn-9.0-linux-x64-v7.tgz\?Uz9lsrUIiIQRpm-cgBA95QNfiGqgV7CFh5Tu0f9AyOE8SgnWVzpdjLMabaNu721ykauPCVtlBnifpCjrAqw9uk64cy39mSGj7ekSUt2sLt0SCSRw8ROy4rQWvM9-w-arBkIzYeAgY9btuNOuS085RBitazJr3hZD6iyHnUg89BevKpe6gnZxWhEcO8fBja38WZsnkAWNliQ /home/Downloads/cudnn-9.0-lunux-x64-v7.tgz
# ls
Anaconda3-4.3.0-Linux-x86_64.sh cudnn-9.0-lunux-x64-v7.tgz
# tar xzvf cudnn-9.0-lunux-x64-v7.tgz
cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
...
# which nvcc
/usr/local/cuda/bin/nvcc
*여기에서 나온 주소로 변경하여 밑의 명령어를 통해 복사 붙혀넣기 및 권한 설정을 해주어야 함.
# sudo cp cuda/lib64/* /usr/local/cuda/lib64/
# sudo cp cuda/include/* /usr/local/cuda/include/
# sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
# sudo chmod a+r /usr/local/cuda/include/cudnn.h
설치 확인 명령어는 다음과 같다.
# cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 5
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h
마지막으로 NVIDIA CUDA Profiler Tools Interface를 설치한다.
# sudo apt-get install libcupti-dev
# apt update && apt install -y lsb-core
추가) ros 설치를 먼저 하길 권장
http://wiki.ros.org/kinetic/Installation/Ubuntu
4. Anaconda, Bazel을 이용한 텐서플로 설치 준비
4.1 Anaconda 3.6 설치하기
먼저 Anaconda 아카이브에서 필요한 파일을 다운로드한다.
https://repo.anaconda.com/archive/
마지막에 .bashrc 에 환경설정을 추가할지 물어보는데 yes 해줘야 설치가 된다.
# apt install wget
# wget https://repo.anaconda.com/archive/Anaconda3-4.3.0-Linux-x86_64.sh
# bash Anaconda3-4.3.0-Linux-x86_64.sh
# source ~/.bashrc
# python
Python 3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 12:22:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
파이썬 설치를 완료했음을 확인할 수 있다.
4.2 Bazel 설치하기
https://docs.bazel.build/versions/4.2.1/install.html
바젤 공식 설치 문서를 참고하여 설치를 진행하도록 한다.
텐서플로우 1.8의 경우 Bazel 0.10.0의 버전을 필요로 한다. 때문에 아카이브에서 그 파일을 찾는다.
https://github.com/bazelbuild/bazel/releases/tag/0.10.0
공식 설치 페이지에서 제시되어 있는 대로 설치를 진행해준다.
# sudo apt install g++ unzip zip
# sudo apt-get install openjdk-8-jdk
# wget https://github.com/bazelbuild/bazel/releases/download/0.10.0/bazel-0.10.0-without-jdk-installer-linux-x86_64.sh
# chmod +x bazel-0.10.0-without-jdk-installer-linux-x86_64.sh
# ./bazel-0.10.0-without-jdk-installer-linux-x86_64.sh --user
마찬가지로 ~/.bashrc 에 아래의 구문을 추가해준다.
export PATH="$PATH:$HOME/bin"
아래의 구문을 통해 설치를 마쳐줄 수 있다.
# source ~/.bashrc
# bazel version
Extracting Bazel installation...
Build label: 0.10.0
Build target: bazel-out/k8-fastbuild/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Thu Nov 9 04:43:10 +50056 (1517474666590)
Build timestamp: 1517474666590
Build timestamp as int: 1517474666590
5. Tensorflow 1.8 Source에서 빌드하기
# wget https://codeload.github.com/tensorflow/tensorflow/zip/refs/tags/v1.8.0-rc1
# mv v1.8.0-rc1 v1.8.0-rc1.zip
# unzip v1.8.0-rc1.zip
# cd tensorflow-1.8.0-rc1/
# ./configure
# ./configure
You have bazel 0.10.0 installed.
Please specify the location of python. [Default is /root/anaconda3/bin/python]:
Found possible Python library paths:
/root/anaconda3/lib/python3.6/site-packages
Please input the desired Python library path to use. Default is [/root/anaconda3/lib/python3.6/site-packages]
Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]: Y
jemalloc as malloc support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Google Cloud Platform support? [Y/n]: N
No Google Cloud Platform support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Hadoop File System support? [Y/n]: N
No Hadoop File System support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Amazon S3 File System support? [Y/n]: N
No Amazon S3 File System support will be enabled for TensorFlow.
Do you wish to build TensorFlow with Apache Kafka Platform support? [Y/n]: N
No Apache Kafka Platform support will be enabled for TensorFlow.
Do you wish to build TensorFlow with XLA JIT support? [y/N]: N
No XLA JIT support will be enabled for TensorFlow.
Do you wish to build TensorFlow with GDR support? [y/N]: N
No GDR support will be enabled for TensorFlow.
Do you wish to build TensorFlow with VERBS support? [y/N]: N
No VERBS support will be enabled for TensorFlow.
Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: N
No OpenCL SYCL 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.
Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 9.0]:
Please specify the location where CUDA 9.0 toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]:
Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]:
Do you wish to build TensorFlow with TensorRT support? [y/N]: N
No TensorRT support will be enabled for TensorFlow.
Please specify the NCCL version you want to use. [Leave empty to default to NCCL 1.3]:
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. [Default is: 3.5,5.2]
Do you want to use clang as CUDA compiler? [y/N]: N
nvcc will be used as CUDA compiler.
Please specify which gcc should be used by nvcc as the host compiler. [Default is /usr/bin/gcc]:
Do you wish to build TensorFlow with MPI support? [y/N]:
이와 같이 탠서 플로 1.8 소스에서 설치하는 것을 정리할 수 있었다. 이왕이면 pip설치를 권하고 싶다. 시간을 너무 많이 버렸다. 원하는 버전이 확고하지 않은 분들은 설치되어있는 이미지를 pull 받을 수 있기 때문에 잘 이용하여 환경설정에 많은 시간을 쏟지 않길 바라며...
컨테이너는 끄면 저장되지 않기 때문에 commit 명령어를 통해서 저장해줘야 함을 잊지 말도록 하자.
https://eungbean.github.io/2018/12/03/til-docker-commit/
추가) Tilix 설치
sudo add-apt-repository ppa:webupd8team/terminix
sudo apt update
sudo apt install tilix
<참고문헌>
1. Installation Guide of Nvidia-Docker
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
2. nvidia-docker GPU 할당하여 사용하는 방법 3가지
https://kyumdoctor.co.kr/18
3. Release 1.8.0 of Tensorflow
https://github.com/tensorflow/tensorflow/releases/tag/v1.8.0-rc1
4. Install CUDA 10.0 and cuDNN v7.4.2 on Ubuntu 16.04
https://gist.github.com/matheustguimaraes/43e0b65aa534db4df2918f835b9b361d
5. Segmap
https://github.com/ethz-asl/segmap
6. Anaconda archive
https://repo.anaconda.com/archive/
7. Tensorflow Installation Guide from EunJi Kim
http://ejklike.github.io/2017/03/06/install-tensorflow1.0-on-ubuntu16.04-2.html
8. Docker - commit
https://eungbean.github.io/2018/12/03/til-docker-commit/
9. Compatibility of gpu and cuda
https://kyumdoctor.tistory.com/68
10. Trouble shooting for the ROS Installation (lsb_release: command
not found in latest Ubuntu Docker container)
https://stackoverflow.com/questions/58395566/lsb-release-command-not-found-in-latest-ubuntu-docker-container
11. Check version of cuda and cudnn
https://medium.com/@changrongko/nv-how-to-check-cuda-and-cudnn-version-e05aa21daf6c
12. Bazel build 0.24.1
https://github.com/bazelbuild/bazel/releases/tag/0.24.1
13. Bazel Installation Guide (official)
https://docs.bazel.build/versions/4.2.0/install-ubuntu.html
14. Cudnn archive
https://developer.nvidia.com/rdp/cudnn-archive
https://hub.docker.com/r/nvidia/cuda/tags?page=1&ordering=last_updated&name=10.0
https://docs.bazel.build/versions/main/install-ubuntu.html
https://www.tensorflow.org/install/source#linux
https://medium.com/@dun.chwong/the-simple-guide-deep-learning-with-rtx-3090-cuda-cudnn-tensorflow-keras-pytorch-e88a2a8249bc
http://ejklike.github.io/2017/03/06/install-tensorflow1.0-on-ubuntu16.04-3.html
'Autonomous Vehicle > ROS programming' 카테고리의 다른 글
Docker 많이 쓰는 명령어 기록지 (외장디스크, 디스플레이, GPU 등 설정) (0) | 2022.06.09 |
---|---|
Segmap Installation History 정리 (Trouble Shooting) (0) | 2021.09.23 |
ROS TOPIC 이름, Frame id 바꾸기 BAG_TOOLS 활용하기 (0) | 2021.03.02 |
ROS에서 UART 통신하기 (아두이노, GPS) (0) | 2021.02.05 |
KITTI Data set 이용하여 ROSBAG 파일 만들기 (0) | 2020.08.26 |