우분투 16.04 LTS에 텐서플로우 설치 (실패)

이 방법으로 된줄 알았다.
그런데.. 샘플을 돌려보니 정확도가 말도 안되게 엉터리로 나왔다. 90%가 아니라 10%의 정확도라니..
아래 있는 2개의 글을 참고한다.

듀얼 부팅 - 윈도우 10 + 우분투 16.04
텐서플로우 0.10 + 우분투 16.04 + CUDA 8.0 + 파이썬 3.5 설치

-----------------------------------------------------------------

텐서플로우 GPU 버전을 설치하기 위해 최소 50회는 설치했다 지웠다를 반복한 것 같다.
페이스북에서 누가 30번이나 했는데 안 된다고 우는 글을 봤는데,
30번쯤 하고 나니까 진짜 눈물이 날 것 같았다. 컴퓨터 집어던질려고 했다. 부자였다면..

가장 큰 실수 하나만 언급한다.
cuda를 설치하면 그래픽카드 드라이버까지 함께 설치되는 줄 알았다.
그래픽 드라이버만 별도 설치할 때는 설치도 잘 되고 했는데,
이후 cuda를 설치하는 과정에서 에러가 발생했기 때문에 누군가의 그 말을 믿어버렸다.

두 번째는 주의할 점인데.. 윈도우10을 잘 설치해야 한다.
나는 SSD와 HDD를 하나씩 달아서, 디스크가 2개였다. 우분투에서 이게 sda와 sdb로 잡힌다.
윈도우10을 첫 번째 SSD에 설치할 때, 전체 디스크에 대해 설치하는 것이 좋다.
그런 연후에 윈도우에서 "볼륨 축소" 명령을 통해 우분투 공간을 확보해야 한다.
내 느낌으로는 이렇게 하면 파티션 분할이 잘 되고, 윈도우 부트매니저가 화면에 표시됐다.
우분투 설치할 때, 윈도우 파티션은 3개로 나누어져 있어야 한다. 진짜 어려웠다.

1. 아래 사이트를 참고했다. 내 환경과 일부 다른 부분이 있긴 했는데, 순조롭게 진행할 수 있었다.
   나는 그림을 싣지 않았고, 일종의 보충 설명이기 때문에 참고 사이트를 함께 보는 것을 추천한다.

   http://www.popit.kr/tensorflow-install-ubuntu16/

2. 이 부분이 완전 달라서 사실은 여기서 울었다.
   계속 버전 14와 15에 설치하려고 하다가 16으로 넘어온 건데, 이 부분이 달랐다.

   참고 사이트에서는 그래픽카드 드라이버가 소프트웨어 업데이트에 표시된다고 했는데,
   내 화면에서는 엔비디아 관련된 것은 아무 것도 없었다. 전혀 없었다.

   수십 번의 설치가 헛된 것은 아니어서 안될 줄 알면서 드라이버를 직접 설치했다.
   이 부분은 다른 글로 저장해 두었다. ([우분투] nvidia 드라이버 설치)

3. cuda 툴킷을 설치한다. 그런데, 여기 화면도 나랑 달랐다.
   참고 사이트 화면은 굉장히 간단한데, 나는 엄청 많은 일들이 터미널에서 일어났다.
   앞에서 직접 설치하는 바람에 전부 틀어진 것 같다는 생각이 들었다.
   소프트웨어 업데이트에 표시할 수 있는 방법을 찾아야 하는 거 아닌가.. 하는 생각도 들었다.

   sudo apt-get install nvidia-cuda-toolkit

   여기서 한 가지 이전에 시도했던 방법과 비교해서 좋았던 점은 특정 버전을 지칭하지 않았던 것이다. 
   이전에는 정확하게 7.5와 같은 버전을 명시했는데, 그게 없었다.
   특정 버전을 가리키리면 파일 이름부터 그래픽 카드까지 알아야 하는 등의 번거로움이 발생한다.
   이전에 사용했던 파일은 run과 deb의 두 가지. 당연히 모두 실패했었다.

   설치가 끝나면, 마지막에 done.이라고 뜬다. 왜 그런지는 모르지만 2회 출력된다.

4. cuDNN v4 설치
   이 부분은 이전 설치와 비슷했다. 다운로드 받아서 압축을 풀어야 한다. (여기 클릭)
   여기서 조금 번거로운데, cuDNN은 회원에 대해서만 다운로드를 허용한다.
   회원 가입 이후에도 몇 번 클릭해야 해당 페이지까지 이동할 수 있다.

   아래 그림에서 이것과 관련된 내용을 선택한다. 7.5 버전의 Linux Library를 선택한다.
   현재 버전 4가 가장 아래 버전이고, 나머지는 버전 5로 아직 시험 중에 있다.

   Download cuDNN v4 (Feb 10, 2016), for CUDA 7.0 and later.
   cuDNN v4 Library for Linux

   헐.. 첫 번째 링크는 동작하지 않는데, 두 번째는 동작한다. 회원 가입하지 않아도 된다.
   "cuDNN v4 Library for Linux"를 클릭하면 다운로드가 시작된다. 확장자는 tgz로 매우 생소하다.

   다운로드 화면을 캡쳐했다. 가장 밑에 있는 항목이다.


5. 다운로드 받은 파일의 압축을 풀어서 home 폴더로 옮긴다. 그래야 이동이 쉽다.
   할 수 있다면 압축을 풀 때 직접 /usr/local에 풀면 가장 좋다.

   나처럼 잘 모르면 home 폴더에 풀던가 풀어서 home 폴더로 옮기던가.. 한다.
   권한 문제 때문에 /usr/local 폴더로 잘 옮겨지지 않는다. 그래서, 명령어로 대신한다.

   sudo mv cuda /usr/local/

   현재 폴더에 반드시 압축 푼 결과인 cuda 폴더가 있어야 한다.
   rwx에 관련된 권한을 변경한다.

   sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

6. 경로 추가
   설치한 모듈에 접근할 수 있도록 환경변수에 경로를 추가한다.
   .bashrc와 .bash_profile 중에서 아무 거나 사용해도 된다. 난 .bashrc 사용

   sudo gedit ~/.bashrc

   gedit 프로그램이 열린다. 아래 내용을 파일 맨 아래에 추가한다.

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

   추가했으면, 저장하고 종료한다.

7. 참고 사이트에서는 이 부분에서 파이썬 가상환경을 사용한다.
   여러 개의 파이썬 환경을 구축할 수 있는게 장점인데, 나는 그런 게 번거로워서 일부 수정했다.

   우분투 16.04에는 2.7과 3.5가 모두 설치되어 있고, python은 2.7을 가리킨다.
   아래 명령어를 사용하지만 가상환경은 사용하지 않았다. 나중을 위해 설치한 것일 뿐.

   sudo apt-get install python3-pip python3-dev python-virtualenv

8. 텐서플로우 연동
   이번 내용은 tensorflow.org에 있는 내용과 같다. (텐서플로우 홈페이지)

   CPU 버전을 비롯해서 윈도우, 맥, 우분투 등의 여러 가지 버전이 존재한다. 그 중에 우분투 + GPU + 파이썬 3.5 사용.
   터미널에서 아래 명령을 입력한다.

   export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl
   pip3 install --upgrade $TF_BINARY_URL

9. 여기까지 왔으면 무조건 되야 한다.
   텐서플로우 홈페이지에 있는 소스코드를 가져왔다. 터미널에 입력하고 결과를 확인한다.
   텐서플로우가 설치된 경로를 화면에 표시해야 한다.

   python3 -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'

   이거 때문에 여기까지 온 셈이다. mnist 예제를 돌려본다.
   
   python3 -m tensorflow.models.image.mnist.convolutional

   여기서 cuDNN 에러가 발생할 수도 있다. 이것만 3번 설치했는데, 뒤에 두 번은 계속 에러가 났다.
   컴퓨터를 껐다가 켠다. mnist 예제를 다시 구동하면 정상 동작했다.
   1시간 이상 걸리던 것이 3분으로 줄었다. 잘 했다. ^^


'이것저것' 카테고리의 다른 글

텐서플로우 GPU 버전 설치 문제점  (0) 2016.08.10
우분투 16.04 설치 이후 작업  (0) 2016.08.10
[우분투] nvidia 드라이버 설치  (0) 2016.08.10
mnist 데이터셋 정리  (0) 2016.08.02
도커 사용법  (0) 2016.07.30