CUDA + cuDNN + Tensorflow installation guide (Ubuntu)

CUDA + cuDNN + Tensorflow installation guide (Ubuntu)

My Environment

OS : Ubuntu 16.04

GPU : GT 940MX (2G)

1. Blacklist 설정

Ubuntu 16.04버전 설치시 기본으로 탑재된 그래픽카드 드라이버가 CUDA설치에 문제를 일으킬 수 있으므로 블랙리스트 설정을 통해 실행을 막습니다.

편집기로 아래 파일을 수정합니다.

1
sudo vi /etc/modprobe.d/blacklist-nouveau.conf

아래 내용을 입력하고 저장합니다.

1
2
3
4
5
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

아래 명령을 통해 커널 정보를 업데이트한 후 재부팅합니다.

1
sudo update-initramfs -u
1
sudo reboot

2. NVIDIA 드라이버 설치

NVIDIA 홈페이지에 접속하여 드라이버를 로컬에 다운로드 받습니다.

사이트 URL : http://www.nvidia.co.kr/Download/index.aspx?lang=kr

NVIDIA 드라이버 설치는 터미널 환경에서 진행하기를 권장합니다.

아래 키를 입력하여 터미널환경으로 접속합니다.

Ctrl + Alt + f1 or ~f9

아래 명령어를 입력하여 우분투 윈도우 그래픽 서비스를 중단시킵니다.

1
sudo service lightdm stop

사전에 설치된 NVIDIA 그래픽 드라이버 제거합니다.

이 부분은 넘어가셔도 상관없으나 아래 명령을 통해 사전에 설치된 그래픽 드라이버를 제거할 수 있습니다.

1
2
sudo /usr/bin/nvidia-uninstall
sudo apt-get remove --purge nvidia*

다운로드된 NVIDIA 그래픽 드라이버 설치파일 경로로 이동하여 다운로드한 파일을 실행시킵니다.

1
2
3
4
cd ~/Downloads

chmod a+x NVIDA-Linux ~.run
sudo sh NVIDIA~.run

설치가 완료되면 nvidia-smi 명령어를 실행해봅니다. nvidia-smi는 그래픽 카드 디바이스 모니터링 기능을 제공합니다.

1
nvidia-smi

nvidia-smi 샘플

2.1 apt 명령을 통한 설치

드라이버 설치파일을 다운로드하여 실행시키는 방법 외에, NVIDIA의 레포지토리를 등록하여 apt 명령으로 설치가 가능합니다.

아래 명령을 통해 그래픽 드라이버 레포지토리를 등록한 후 설치를 진행할 수 있습니다.

1
2
3
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-390

3. CUDA 9.0 설치

CUDA 설치를 진행하기 전에 사용할 딥러닝 프레임워크(keras, tensorflow, chainer 등)버전과 CUDA버전이 호환되는지 필수적으로 확인해야합니다.

현재 글을 쓰는 시점에서(2018.6.4) 최신 CUDA 버전은 9.2 이지만 2018년 4월 말에 공개된 Tensorflow 1.8 버전은 CUDA 9.0 을 지원하기 때문에 해당 버전 설치를 진행하겠습니다.

NVIDIA의 CUDA 다운로드 페이지에 접속하여 설치파일을 다운로드 받습니다.

CUDA 9.0 다운로드 URL : https://developer.nvidia.com/cuda-90-download-archive

아래 그림과 같이 Ubuntu 16.04 버전에 해당하는 설치파일을 다운로드 받습니다.

NVIDIA

CUDA도 NVIDIA 그래픽 드라이버 설치와 동일하게 윈도우 그래픽 을 중단한 상태로 진행해야합니다.

Ctrl + Alt + f1 or ~f9

1
sudo service lightdm stop

다운로드한 CUDA 설치 파일 경로로 이동하여 실행시킵니다.

1
2
3
4
cd ~/Downloads

chmod a+x cuda_9.0~.run
sudo sh cuda_9.0~.run

설명문이 나오면 Enter 혹은 space 를 입력하여 끝까지 읽고 (Ctrl + c 로 스킵 가능) 다음처럼 진행합니다.

“”Do you accept the previously read EULA? accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81? ((y)es /(n)o/(q)uit) : y

Do you want to install the OpenGL libraries? ((y)es /(n)o/(q)uit) : n

Do you want to run nvidia-xconfig?
This will update the system X configuration file so that the NVIDIA X driver
is used. The pre-existing X configuration file will be backed up.
This option should not be used on systems that require a custom
X configuration, such as systems with multiple GPU vendors.

((y)es /(n)o/(q)uit) : n

Install the CUDA 9.0 Toolkit? ((y)es /(n)o/(q)uit) : y

Enter Toolkit Location
[ default is /usr/local/cuda-9.0 ] : Enter

Do you want to install a symbolic link at /usr/local/cuda? ((y)es /(n)o/(q)uit) : y

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: y

Enter CUDA Samples Location
[ default is /home/khk ] : Enter

위 까지 진행하시면 설치가 시작되며 다음으로 cuDNN 설치를 진행하시길 바랍니다.

4. cuDNN 설치

cuDNN은 GPU 가속을 이용할 수 있도록 NVIDIA에서 제공하는 라이브러리입니다.

NVIDIA의 cuDNN 다운로드 링크를 접속하여 간단한 멤버십 가입을 통해 다운로드를 진행합니다.

다운로드 URL : https://developer.nvidia.com/rdp/cudnn-download

CUDA 9.0 버전의 제일 상단의 cuDNN v7.1.4 Library for Linux 을 선택하여 다운로드합니다. (tgz 파일)

NVIDIA cuDNN

다운로드 받은 파일 경로로 이동하여 압축을 해제합니다.

1
2
3
cd Downloads

tar xvf cudnn-9.0-linux-x64-v7.1.tgz

압축을 해제하면 cuda 폴더가 생성되는데, 내부 파일들을 다음과 같이 복사합니다.

1
2
3
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+x /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

모든 과정이 끝나면 메인으로 이동하여 .bashrc 파일에 CUDA의 PATH를 등록합니다.

1
2
3
4
sudo vi ~/.bashrc

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

내용을 저장하고 닫습니다.

bashrc의 변경사항을 바로 반영하도록 다음 명령을 실행합니다.

1
source ~/.bashrc

5. Tensorflow 환경 구축

5.1 Python 설치

아래와 같이 파이썬 3, 2 버전 별로 Anaconda 배포판 설치 스크립트 다운로드 받습니다.

Python3.6.x 버전 (x64)

1
wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
1
chmod u+x Anaconda3-5.1.0-Linux-x86_64.sh
1
bash Anaconda3-5.1.0-Linux-x86_64.sh

Python 2.7.x (x64)

1
wget https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86_64.sh
1
chmod u+x Anaconda2-5.1.0-Linux-x86_64.sh
1
bash Anaconda2-5.1.0-Linux-x86_64.sh

본 가이드에서는 /optanaconda3 설치했다는 가정하에 진행하겠습니다.

vi 편집기로 .bashrc 파일에 아래와 같이 내용을 입력하고 저장합니다.

1
2
3
4
5
vi ~/.bashrc

export PATH=/opt/anaconda3/bin:$PATH

source ~/.bashrc

5.3 Jupyter notebook

주피터 노트북을 실행하기 앞서 홈디렉토리로 이동하여 파이썬을 실행합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
python
```

주피터 노트북의 비밀번호를 생성하기 위해 아래와 같이 코드를 실행시킵니다.

output으로 생성된 `sha1:xxx` 값을 복사해둡시다.

```python
ln [1]: from notebook.auth import passwd
ln [2]: passwd()
Enter password: [비밀번호입력]
Verity password: [비밀번호입력]
Out[2]: [sha1: xxx 를 복사 후 별도로 메모 or 복사할 것]
ln [3]: exit()
```



아래 명령어를 통해 홈디렉토리에 주피터 노트북의 설정파일을 생성시킵니다.

```bash
jupyter notebook --generate-config
```

설정파일을 편집기로 열어서 아래와 같이 입력시킵니다.

```sh
vi ~/.jupyter/jupyter_notebook_config.py

...
c.NotebookApp.password = '복사한 sha1:xxx 붙여넣기'
...
c.NotebookApp.ip = 'IP 입력'
...
c.Notebook_open_browser = False

```

편집 내용을 저장시키고 아래 명령어를 통해 주피터 노트북을 실행시킬 수 있습니다.

```bash
jupyter notebook
```



웹 브라우저를 실행시키고 주피터 설정파일에 입력한 `ip`와 포트번호 `8888`을 통해 주피터에 접속할 수 있습니다.

http://ip:8888



###5.2 Tensorflow 설치

Tensorflow는 CPU를 이용한 `tensorflow` 버전과 GPU를 이용한 `tensorflow-gpu` 가 따로 존재합니다.

우분투 터미널로 돌아와서 아래 명령어를 실행시킵니다.

```bash
pip install tensorflow-gpu
```



설치가 완료되면 주피터 접속하여 노트북을 실행시키고 아래 코드를 통해 설치된 그래픽 카드를 확인하실 수 있습니다.

```python
from tensorflow.python.client import device_lib

device_lib.list_local_devices()
```

![gpu](https://drive.google.com/uc?id=1K7t1gvo1XEf5gT_QcywuwIlHnH7qcchu)

unsplash-logoFredrick Tendong

댓글