본문 바로가기

Machine Learning

Ubuntu 16.04 LTS 기반 TensorFlow 개발 환경 셋업 (with GPU)

기반 시스템 정보:


System memory: 8G

Processor: Intel core i5-2500K 3.3GHz x 4

Graphics: Geforce GTX 970/PCIe/SSE2

OS type: Ubuntu 64-bit (영문)



본 내용은 예람님의 블로그 내용(Refer)을 참고하여 작성되었음.


기타 참고 사이트


http://bit.ly/2aIcOXw

http://bit.ly/2aTDiVc

http://bit.ly/2a93SNg

http://bit.ly/2ar2ilL

http://bit.ly/2adltyT

http://bit.ly/2aTCJeg

http://bit.ly/2a930rD

http://bit.ly/2alSU8q






0. 그래픽 카드 드라이버 설정 (작업 편의성을 위함, 이미 설치되어 있다면 Skip 해도 됨)


1) 터미널을 실행시키고, Ubutu 에  GPU Drivers PPA를 추가하고 소프트웨어 소스를 업데이트 함


sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update


2) System settings 을 실행시키고, System 카테고리의 Software & Updates 를 실행함. Additional Drivers 탭에서 최신 바이너리 드라이버 항목을 선택하고 "Apply Changes" 선택. 해당 드라이버가 자동으로 다운로드되고 설치됨. 시스템을 리부팅하면 설치 완료.








1. Anaconda 설치


1) https://www.continuum.io/downloads 에서 Anaconda for Linux Python 2.7 Linux 64-bit 버전 다운로드 함.



2) 터미널에서 다운로드 받은 폴더로 이동하고, 다음을 입력하여 Anaconda를 설치함


bash Anaconda2-4.1.1-Linux-x86_64.sh 


(버전명은 다를 수 있으므로 다운로드 받은 파일에서 확인할 것)


중간 중간에 나오는 질문에는 모두 "yes" 한다.


home으로 나와서 (cd ~ 입력) gedit .bashrc 입력. 맨 하단에 Anaconda path 가 다음의 형태로 잘 적용되어 있는지 확인함.


# added by Anaconda2 4.1.1 installer
export PATH="/home/사용자명/anaconda2/bin:$PATH"



Terminal 을 종료하고 재실행 후 python 을 입력. 다음과 같은 형태의 문구가 보이고, import matplotlib 를 입력했을 때 에러가 없다면 성공.











2. CUDA Toolkit 설치


공식 TensorFlow 설치 페이지를 보면, 현재까지는 Cuda Toolkit 7.5와 cuDNN v4 를 반드시 설치하여야 함.



1) https://developer.nvidia.com/cuda-downloads 에 접속하여 Linux 용 runfile(local) 파일 다운로드.





2) cuda 7.5와 호환되는 gcc 컴파일러 설치


sudo apt-get install gcc-4.9 g++-4.9


3) 추가 패키지 설치


sudo apt-get install nvidia-modprobe freeglut3-dev libx11-dev libxmu-dev libxi-dev libglu1-mesa-dev


4) 다운로드 받은 폴더로 이동하여, 런파일을 이용한 CUDA 설치


-EULA 동의 : accept

-You are attempting to install on an unsupported configuration. Do you with to continue? : yes

-Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 352.39 ? no (이미 설치했음)

-Install the CUDA 7.5 Toolkit? yes

-Enter Toolkit Location : Enter (default)

-Do you want to install a symbolic link at /usr/local/cuda ? yes

-Install the CUDA 7.5 Samples? no

-Enter CUDA Samples Location : Enter (default)


sudo sh cuda_7.5.18_linux.run --override


5) cd ~ 입력 후 홈으로 이동. gedit .bashrc 입력/실행. 맨 마지막 줄에 다음을 입력 후 저장


export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
export CUDA_HOME=/usr/local/cuda









3. CUDNN 설치


1) https://developer.nvidia.com/cudnn 접속. Download 버튼을 통해 설치 (NVIDIA 가입 필요)

2) 다운로드 받은 파일을 우클릭하여 압축을 품. CUDA 폴더가 생성됨.

3) 다음을 입력하여 관리자 권한으로 탐색기 실행. usr/local/cuda 로 진입

sudo nautilus

4) CUDA/include 폴더 내에 들어있는 파일을 usr/local/cuda/include 에 복사

5) CUDA/lib64 폴더 내에 들어 있는 파일을 usr/local/cuda/lib64 에 복사

6) 다음 명령어 수행 (CUDNN을 전체 사용자가 사용)


sudo chmod a+r /usr/local/cuda/lib64/libcudnn*









4. TesnsorFlow 설치


1) Bazel 컴파일러 설치 (from Google)


- 자바 설치

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

- 압축 프로그램 for Bazel 설치

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip


- Bazel 다운로드 (현재 버전 0.3.1) : https://github.com/bazelbuild/bazel/releases



- 다운로드 받은 폴더에서 하기의 내용을 입력하고 Bazel 설치

chmod +x bazel-0.3.1-installer-linux-x86_64.sh
./bazel-0.3.1-installer-linux-x86_64.sh --user

- cd ~ 으로 홈으로 이동. gedit .bashrc 를 입력/실행하고 맨 하단에 다음을 입력 및 저장

export PATH="$PATH:$HOME/bin"



2) numpy 설치

sudo apt-get install python-numpy swig python-dev


3) TensorFlow 다운로드 및 설치



- Git 설치

sudo apt-get install git

- TensorFlow 소스 다운로드

git clone --recurse-submodules https://github.com/tensorflow/tensorflow

- TensorFlow 설정. tensorflow 폴더 진입 및 configure 설정

cd ~/tensorflow
./configure

Please specify the location of python. - Enter (default)

Do you with to build TensorFlow with Google Cloud Platform support? N

Do you wish to build TensorFlow with GPU support? y

Please specify which gcc should be used by nvcc as the host complier. : /usr/bin/gcc-4.8

Please specify the Cuda SDK version you want to use: 7.5

Please specify the location where CUDA 7.5 toolkit is installed. Refer to README.md for more details. : Enter (default)

Please specify the Cudnn version you want to use. : 4

Please specify the location where cuDNN 4.0 library is installed. Refer to README.md for more details. : Enter (default)

Please note that each additional compute capability significantly increases your build time and binary size. : 3.5






- TensorFlow 소스 컴파일 (상기 tensorflow 폴더에서)


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

- 컴파일 중 에러 발생 시 확인 사항


  컴파일러 호환 문제라면 gcc 4.8 설치 (예. #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!)

sudo apt-get install gcc-4.8 g++-4.8


  기타 여러 에러 발생시, 홈폴더 이동하여, tensorflow/third_party/gpus/crosstool/ 내 CROSSTOOL 파일에서,


  * cxx_builtin_include_directory: "/usr/local/cuda-7.5/include" (cxx_builtin_ 등이 있는 부분에 모두 삽입)

 

 * cxx_flag: "-std=c++11" 하단에  (두 군데 존재) 삽입

 

     cxx_flag: "-D_FORCE_INLINES"
     cxx_flag: "-D_MWAITXINTRIN_H_INCLUDED"




- TensorFlow 설치 패키지 생성

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


- 패키지 확인: tmp/tensorflow_pkg 내 tensorflow-0.9.0-py2-none-any.whl 파일이 있는지 확인 (버전명은 상이할 수 있음)



- Anaconda에 TensorFlow 설치 (버전명은 상이할 수 있음)


pip install /tmp/tensorflow_pkg/tensorflow-0.9.0-py2-none-any.whl



- Tensorflow 설치 확인: 하기의 소스코드를 실행하여 결과 확인 (터미널 실행 후 python 입력)


python

import matplotlib
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))


- 다음과 같이 출력되면 성공. CUDA 관련 library들이 제대로 로딩되고, GPU가 제대로 인식되면 됨




- 만일 modprobe: ERROR: could not insert 'nvidia_xxx_uvm': Invalid argument 와 같은 에러와 함께 GPU 인식이 되지 않는다면 그래픽 드라이버 호환의 문제일 가능성이 높음.




이 경우 필자의 경우엔, nvidia cuda toolkit 을 설치하고 해당되는 에러의 그래픽 드라이버 버전으로 재설치 하였음.



Toolkit 설치

sudo apt install nvidia-cuda-toolkit

드라이버 재설치

sudo apt-get purge nvidia*
sudo killall nvidia-persistenced (없다고 나오면 그냥 skip)
sudo apt-get update
sudo apt-get install nvidia-358 nvidia-prime
sudo reboot










5. IDE 설치 (여기서는 PyCharm 설치)


1) PyCharm 다운로드 (https://www.jetbrains.com/pycharm/download/#section=linux)


- Community 의 경우 무료

- Professional 의 경우, 학생이라면 1년간 무료 이용 가능


2) 다운로드 받은 폴더로 가서 압축을 품. Pycharm 디렉토리를 적당한 위치에 복사 (여기서는 Home에 복사)


3) cd pycharm-2016.2/bin 이동 (폴더명은 상이할 수 있음)


4) gedit pycharm64.vmoptions 으로 해당 파일을 메모장에 열고, Xmx750m 을 부분을 수정한다. 최대 메모리를 설정하는 것으로 여기서는 4096m 으로 수정 (4GB)





5) bash pycharm.sh 를 입력하여 설치 및 실행





6) PyCharm 아이콘을 우클릭하여, lock from launcher를 클릭하여 런처에 고정함.



7) 터미널을 열고 다음을 입력함 (경로는 상이할 수 있으니 확인할 것)


sudo ldconfig /usr/local/cuda/lib64


8) Pycharm 종료 후 다시 실행시키고 프로젝트 생성 후 다음의 코드를 통해 실행 여부 확인


- 처음 실행시, Updating indicies, Updating python interpreter 작업으로 첫 코딩 가능 시간까지 시간이 걸림.


- GPU Test (다음의 코드 입력 후 실행시키면 반드시 하기 스크린 샷과 같은 결과가 도출되어야 함) : Google TensorFlow 관련 내용 참고(링크)


import tensorflow as tf

# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print sess.run(c)

- 결과





- 최종적으로 Linear regression 예제가 GPU 연산으로 제대로 돌아가는 지 확인한다. (관련 소스 링크)