© 2017 by Doran Bae 

Subscribe!
You are reading Coding Otter, stuffed with articles about big data, data science development, ML in production, managing data science projects, and many more. ​
About the host
I'm Doran Bae, Data Scientist @TVB turning data into products and stories. More about me.

GPU-backed Google Compute Engine Instance - Part 3 of 3

Updated: Nov 27, 2018

내가 처음 data science를 배우고 있을때, 세상에서 가장 어려운 것이 environment setting 이었다. 숙제를 하거나 프로젝트를 하기 위해선 required environment을 세팅해야 했는데 (줄줄이 copy & paste 하도록 cheat sheet가 제공되었음에도 불구하고), 새벽 4시까지 울면서 shell을 쳐다보며 한숨을 푹푹 쉬었던 기억이 난다 😰. Data science에서 가장 어려운 것이 data cleansing이라면, programming에서 가장 어려운것은 당연히 installation일 것이다. Computer Science BS가 없거나, 처음 하는 사람들에게setting 만큼 부담되는 것도 없다 (GUI가 왜 위대하고 소중한 것인지 새삼 Microsoft의 존재에 대하여 감사하게 생각하게 된다).

Google Compute Engine

Part 1 - Setting up your VM instance

Part 2 - Log into VM instance

Part 3 - Setting up environment - You are here!


4. Set up environment

4-1. 시스템 소프트웨어 업데이트

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install -y build-essential

다행히도 Ubuntu는 Python 2, Python 3 pre-installed 되어 있다. 그래서 python install 없이 conda를 설치하면 된다.

4-2. Conda

Python environment를 설치하기 위한 첫 단계이다. Miniconda나 Conda에 대해 알고싶다면, 인문계를 위한 Python environment를 참고하자.

$ cd /tmp
$ wget http://repo.continuum.io/archive/Anaconda3-4.0.0-Linux-x86_64.sh
$ bash Anaconda3-4.0.0-Linux-x86_64.sh

엔터 키를 쭉 몇 번 누르다 보면 아래와 같이 메세지가 뜬다.

Thank you for installing Anaconda3

4-2. Source .bashrc file

아래 script를 execute 한다.

$ source ~/.bashrc

Miniconda가 잘 설치 되었는지 확인하려면, conda list를 execute 한다. 아래처럼 보이면 성공!

$ conda list
# packages in environment at /home/<USER_NAME>/anaconda3:
#
asn1crypto                0.22.0                   py36_0
cffi                      1.10.0                   py36_0
conda                     4.3.21                   py36_0
conda-env                 2.6.0                         0
...

conda: command not found

conda list를 실행했을 때 위와 같이 에러 메세지가 뜰 수도 있다. 분명 여러분이 뭔가 잘못 했을 것이지만 (Anaconda 설치 시 PATH 설정을 실수로 잘못 했을 수도 있다), 이렇게 고쳐주면 된다.

$ export PATH=/home/<USER_NAME>/anaconda3/bin:$PATH
$ conda list

4-3. Installing CUDA Toolkit

Tesla K80을 좀 더 효율적으로 쓰려면 NVIDIA CUDA Toolkit을 사용하여야 한다. 일단 GPU가 잘 붙었는지 확인해 본다.

$ lspci | grep -i nvidia
00:04.0 3D controller: NVIDIA Corporation GK210GL [Tesla K80] (rev a1)

그리고 tmp폴더로 가서 CUDA Toolkit을 다운 받는다. curl -O 뒤에 오는 버전은 여길 보고, 새로운 버전으로 바꾸어도 상관 없다.

$ cd /tmp
$ curl -O https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb

그 다음엔 install을 시작한다. 이 과정은 꽤 오래 걸리니, 걱정하지 말고 침착히 기다리면 된다.

$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install -y cuda-9-0 -y

성공했다면 이런 메세지가 보인다.

Running hooks in /etc/ca-certificates/update.d...

done.
done.

4-4. Installing cuDNN

cuDNN은 GPU-accelerated library로 GPU가 붙은 Tensorflow를 사용하려면 필수조건이다. NVIDIA developer account를 만든 뒤, 로컬 컴퓨터에 다운받는다. 꼭 본인이 받은 CUDA 버전과 맞는 버전을 다운 받도록 하자. (cuDNN v7.1.4 Library for Linux)

Download cuDNN

로컬 컴퓨터의 Downloads 폴더에서 (또는 다운받은 폴더) 해당 파일을 VM으로 업로드 한다.

$ cd ~/Downloads/
$ scp -i ~/.ssh/<MY_SSH_KEY> cudnn-9.0-linux-x64-v7.1.tgz <USER_NAME>@<EXTERNAL_IP_ADDRESS>:/tmp

잘 했으면 다시 VM으로 돌아가서 아래와 같이 execute 한다.

$ cd /tmp
$ tar -xzvf cudnn-9.0-linux-x64-v7.1.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
Install이 끝났다면 PATH variable을 세팅해야 한다.
$ echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc
$ echo 'export PATH=$PATH:$CUDA_HOME/bin' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc

4-5. Downloading TensorFlow

난 여기에서 에러가 굉장히 많이 있었다 😫. 이유를 설명할 수는 없지만, 에러 해결 방법도 함께 적어 놓았다. 원래 대로라면 아래 두 command만으로 tensorflow가 성공적으로 import 되어야 한다.

$ sudo apt-get install python3-dev python3-pip libcupti-dev
$ pip install --upgrade pip
$ pip install --upgrade tensorflow-gpu==1.4.0 

4-6. Tensorflow가 GPU를 사용하는지 Test!

Python을 실행 시킨다.

$ python3
>> 

아래와 같이 테스트 코드를 run 해본다.

$ import tensorflow as tf
with tf.device('/cpu:0'):
    a_c = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a-cpu')
    b_c = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b-cpu')
    c_c = tf.matmul(a_c, b_c, name='c-cpu')


with tf.device('/gpu:0'):
    a_g = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a-gpu')
    b_g = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b-gpu')
    c_g = tf.matmul(a_g, b_g, name='c-gpu')


with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
    print (sess.run(c_c))
    print (sess.run(c_g))

print('DONE!')

아래와 같이 결과가 잘 나오면 성공!


Tensorflow 다운로드가 안 될 때

1) 이게 문제인가? (여기서 참고함)




$ export LANGUAGE=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ export LC_ALL=en_US.UTF-8
$ sudo locale-gen en_US.UTF-8
$ sudo dpkg-reconfigure locales

2) pip upgrade

ImportError: No module named 'tensorflow'

왜 그런지 이유는 모르겠지만, 여러가지 리소스를 확인하고 아래와 같은 순서로 차례대로 했더니, 결국 고쳐졌다 (?). 1) 에러 메세지를 보고 .bashrc file의 LD_LIBRARY_PATH를 조정한다. 2) Instance 껏다 다시 켜기오호라! 문제 해결


4-7. Jupyter notebook setting

믿기지 않겠지만 Jupyter도 설치를 해야 한다. 난 잠시 진짜 Jupyter가 필요할 지 고민을 했다. 그런데 이왕 여기까지 왔으니, Jupyter도 설치를 해본다. 생각보다 어렵지 않다 (몇 번 에러 나온건 비밀..). 우선 Jupyter configuration file을 만든다.

$ jupyter notebook --generate-config

그러면 /home/<USER_NAME>/.jupyter/jupyter_notebook_config.py 이라는 파일이 만들어 지는데, vim을 이용해서 파일을 연다. 여기다 새로운 라인 몇 개를 더 더해줄 것이다.

$ vim /home/<USER_NAME>/.jupyter/jupyter_notebook_config.py

파일 아무데나 (난 어디 특별한 곳에 넣어야 하는지 알고 몇 번 확인했는데, 별 거 없더라) 아래 4개 라인을 더한다.

c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = <port_number>

<port_number>라고 쓰여진 부분엔 2번에서 사용했던 port 번호를 넣으면 된다. 그리고 시작해 본다.

$  jupyter notebook --ip=0.0.0.0 --port=<port_number> --no-browser &

그럼 익숙한 화면이 보이면서 토큰 한개를 줄 것이다.

브라우저에 가서 아래 주소에 접속을 하면, 익숙한 주황색 로고가 보일 것이다.

http://<EXTERNAL_IP>:<PORT_NUMBER>

화면에서 요구하는데로 token을 넣고 로그인을 한다.

축하합니다! 가서 쿠키라도 하나 드세요. 수고했어요 :)

Part 1 - Setting up your VM instance

Part 2 - Log into VM instance

Part 3 - Setting up environment - You are here!


Source: