본문 바로가기

Enginius/Python&TensorFlow

JupyterHub on AWS EC2

1. Amazon EC2

아마존은 서버 수입으로 가장 큰 돈을 버는 회사다. 물류 회사가 아니다. 

- https://console.aws.amazon.com/



- sungjoon.choi@cpslab.snu.ac.kr / adsl

- EC2

엘라스틱 컴퓨팅 / 많이 쓰면 더 많은 자원을 할당시키고, 더 많은 돈을 가져간다. 

- Launch Instance 

- Ubuntu Server 14.04 LTS

- m4.large 로 하는게 좋다고 하는데.. 이 역시도 느리다. 

- Number of instances: 1

이것도 조금 문제인 것 같다. 정식 수업에 쓸 땐 더 늘릴 필요가 있다. 

- Step6: Configure Security Group

 : HTTP - TCP - 80

 : HTTPS - TCP - 443

- Elastic IP를 발급 받아서 인스턴스와 연결 // 

일종의 고정 IP를 받는 느낌이다. 


2. Amazon Route 53



- Elastic IP를 발급 받아야한다.. How? 

- 52.38.26.137 를 받았다. 이걸 인스턴스와 연결을 해야한다. 

- 내 인스턴스의 public IP는 54.187.103.136 이다. 

- 현재 인스턴스의 elastic IP에 빈칸을 클릭하고, Associate Address를 누르고, Instance에 running instance를 클릭하니, Associate이 되는 것 같다. 

- 이렇게 하니, 현재 만든 AWS의 public IP가 elastic IP와 같아졌고, 이 값은 52.38.26.137 이다. 즉 앞서 받은 Elastic IP와 같다. 

- 이제 Services를 누르고 Route 53으로 가보자. 



3. Route 53

- 왠지 모르게 Domain registration이 맘에 든다. 해보자. 

- enginius.io 를 샀다!!! 1년에 53달러이다.. 1달에 3천원

- 아직은 pending이다. 돈이 없어서 실패..

- https://enginius.me 를 신청, 기다리고 있다. 이건 좀 더 싸다. 

- 오래걸린다. 돈은 빠져나갔는데... 

- 오 되었다!! enginius.me 가 생겼다. 이제 이걸 52.38.26.137와 연결시키면 될 것 같다. 

- Go to Record Sets

- Create Record Set

- Value에 52.38.26.137를 넣었다. 제발 되었길..



4. JupyterHub 설치하기 

- 먼저 우리가 만든 서버 인스턴스로 들어가야 한다. 

- 터미널을 연다. 

- ssh -i /Users/human/Dropbox/AWS/keypair_aws.pem ubuntu@52.38.26.137

- 위의 커맨드를 치고 들어가면 서버에 접속이 된 것이다. 


vi ~/.ssh/known_hosts

(여기서 기존에 설정되어있던 호스트, 아이피를 지워야한다. in case IP has changed)


vi ~/.ssh/config

(없으면 만들자)

# Personal Howepage

Host fc.enginius.me

  HostName fc.enginius.me

  Port 22

  User ubuntu

  IdentityFile /Users/human/Dropbox/AWS/seoul_reg_keypair.pem

위와같이 세팅을 해놓으면 터미널에서 다음과 같이 들어갈 수 있다. 


그리고 퍼미션 파일은 

chmod 400 ~/.ssh/config

으로 바꿔야 한다. 


ssh fc.enginius.me




파이썬을 설치해야 한다고 합니다. 

- 일단은 pip를 설치해보자. 

vim start.sh

sudo apt-get update -y

sudo apt-get upgrade -y

sudo apt-get install python-pip -y

sudo apt-get install python3-pip -y

sudo apt-get install npm nodejs-legacy -y

sudo pip3 install jupyter

sudo npm install -g configurable-http-proxy

sudo pip3 install jupyterhub

sudo apt-get install get -y

chmod +x start.sh

./start.sh



쥬피터 허브를 설정

jupyterhub --generate-config

vim jupyterhub_config.py


아래 내용을 추가한다. 

# jupyterhub_config.py 

c.JupyterHub.ip = '0.0.0.0' 

c.JupyterHub.port = 443

: 이때는 vim을 쓴다. (i: 편집, /: 검색, n: 다음번검색, wq!: 저장하고 닫기)

- 어디까지 된건지 모르겠지만.. 일단 되었다. 



5. SSL을 적용하자.

git clone https://github.com/letsencrypt/letsencrypt

cd letsencrypt

./letsencrypt-auto --help

./letsencrypt-auto certonly --standalone -d fc.enginius.me

- 이렇게 하면 개인키와 인증키가 다음 폴더에 생긴다고 한다. 

(짜증나서 sudo -s 로 root로 왔다.)

/etc/letsencrypt/live/fc.enginius.me/privkey.pem

/etc/letsencrypt/live/fc.enginius.me/fullchain.pem


- 그럼 다시 jupyterhub 폴더로 가서 파일은 변경한다. 


# jupyterhub_config.py

c.JupyterHub.ssl_cert = '/etc/letsencrypt/live/fc.enginius.me/fullchain.pem'

c.JupyterHub.ssl_key = '/etc/letsencrypt/live/fc.enginius.me/privkey.pem'


sudo jupyterhub 

이걸 치니까 몬가 된다. ㅜㅜㅜ

아래와 같이 LD_LIBRARY_PATH를 넣어줘야지 쿠다가 된다. 

in "jupyterhub_config.py"

add

c.Spawner.env_keep.append('LD_LIBRARY_PATH')

___________________________________________

sudo -s => Get root account

jupyterhub -f ./jupyterhub_config.py


이제 유저를 추가해야 한다. 

- sudo useradd -m enginius

- sudo passwd enginius

 // 그리고 123로 하였다고 한다. 


연구실 서버에 연결할 때는 


sudo adduser --ingroup users sungjoon


JupyterHub에서 python2를 쓰기! 

sudo pip install ipython 

- ipython을 깐다. 


sudo jupyter kernelspec list

- 이걸 하면 어떤 커널들이 있는지 나온다. (python3만 나온다.)


sudo python -m pip install ipykernel

- 이걸 하면 이것저것 설치를 오래 한다. 설치가 끝나도 몬가 여전히 작동은 잘 되는 듯 하다. 


sudo python2 -m ipykernel install

- 이걸 하면 Installed kernelspec python2 in /usr/local/share/jupyter/kernels/python2와 같이 나온다. 



https://enginius.me



6. 텐서플로우를 설치하자!

sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.7.1-cp34-none-linux_x86_64.whl

잘 된다. 

하하하,,,ㅠㅠㅠㅠ 



7. 아마존 서버 터미널 종료 후에도 돌아게 하자.

sudo apt-get install screen

cd /jupyterhub

sudo screen jupyterhub

ctrl + a + d : 이렇게 하면 screen에서 나온다. 

: 즉 그냥 터미널이 보이지만, 뒤에서는 jupyterhub가 돌고 있는 것이다. 이제 ssh에서 나와도.. 되겠지? 

스크린 활용법 

screen 

이러면 스크린이 켜져있다. 

Ctrl + a

- c: virtual console

- n: switch to next

- p: switch back

- ": lists all available consoles 

- d: 돌아간다. (이전에 돌던 프로그램은 계속 돈다. 이게 포인트!)



추가 패키지 설치 


이걸로 해보자.

sudo apt-get build-dep python-matplotlib

이러면 matplotlib를 설치를 하는건다. 그리고 여기에 추가적으로 dependency까지 설치를 한다. 

무언가 많은 일들이 일어나고 있다. 좀 불안하다. .... 

일단 이거까지 수행을 하고, cnn코드를 돌렸을 때는 잘 돌아간다. 

sudo apt-get install python-matplotlib

위의 라인까지 수행을 해야지 실제로 matplot lib가 설치가 된다!! 

(https://github.com/jupyterhub/jupyterhub/wiki/Installation-of-Jupyterhub-on-remote-server)


sudo apt-get install python-scipy

이게 문제가 되려나? 여기까지는 잘 되는 듯 싶다. 


sudo apt-get install python-pandas

여기까지도... 제발 / 여기까진 문제가 없다. 


sudo pip install scikit-image

여기서 에러가 났다!!! 

TypeError: <method 'max' of 'numpy.ndarray' objects> is not a Python function

-해결하기 위해서 dag라는 패키지를 지웠다. .. 



sudo apt-get install libjpeg-dev

sudo apt-get build-dep python-imaging

sudo apt-get install libjpeg62 libjpeg62-dev

sudo pip install pillow

여기까진 큰 문제가 없이 되는데, 여전히 scipy.misc.imread가 제대로 동작을 안한다. 


vim python_packs.sh

(여기에 엄청난 버그가 숨어있다.ㅜㅜㅜ 몬진 모르겠다..)

- 절대 하지 말것!!! 

sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose -y


sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \

libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev

(왠지 위에 커맨드가 문제인듯.. 하지말자. )


sudo apt-get install gfortran libopenblas-dev liblapack-dev -y

(이거 하니까 밑에 sudo pip3 install scipy 가 되는듯..? 아직 안끝났다..)


# 수찬님이 알려주심


sudo pip3 install scipy

(takes a lot of time, but... 오 되었다!)


sudo apt-get install libfreetype6-dev libxft-dev -y

sudo pip3 install matplotlib

sudo apt-get install libjpeg-dev -y

sudo pip3 install pillow


sudo apt-get install python3-pandas -y

sudo pip3 install -U scikit-image

chmod +x python_packs.sh

./python_packs.sh


sudo apt-get install python-opencv ?? 

cd $HOME 

mkdir opencv_src 

cd opencv_src/ git clone https://github.com/Itseez/opencv.git cd opencv/ 

mkdir release 

cd release/ 

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 

make 

sudo make install

근데 이거 엄청 오래 걸린다.. opencv 설치는 쉽지 않다. 

sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

sudo ldconfig

sudo apt-get install libxine2-dev

sudo ln /dev/null /dev/raw1394

- python2에선 되는데 python3에선 안된다.. why? 

- 헐... OpenCV는 OpenCV3.0을 제외하고는 Python 3.x를 지원하지 않는단다...


 


8. 아마존 EC2로 파일 전송하기

ㅁhttps://www.youtube.com/watch?v=h

d4oL3WIPVM

ㅁ위의 링크를 확인하자. 

ㅁ서버: ec2-52-38-26-137.us-west-2.compute.amazonaws.com

ㅁ사용자이름: ubuntu

ㅁ공개키인증: 받아놓은 keypair_aws.pem

ㅁ연결! 

연결은 되는데 upload가 안된다.. 왜지? 

아.. ubuntu라는 이름으로 들어갔기 때문에 해당 폴더에만 올릴 수 있다. 문제는 다른 아이디로는 들어가지지 않는다... jupyterhub은 enginius로 들어가는데.. 

//

아니다. 그냥 무식하게 하자. 

sudo chmod 777 -R fastcampus/

: fastcampus란 아이디를 만들었는데, 해당 폴더를 그냥 777로 만들어버렸다. 이러면 잘 된다. 


파일 옮기기


scp -r 로컬파일경로 cpslab@147.46.122.150:~/



9. 아마존 EC2 요금


시간 당 1달러 (천원)이면 하루에 2만 4천원, 한달에 72만원? 


시간당 0.165달러이면 한달에 15만원이다... 

'Enginius > Python&TensorFlow' 카테고리의 다른 글

Install TensorFlow with GPU  (0) 2016.04.14
GitHub basics  (0) 2016.04.11
딥러닝 강의 1주차 + VirtualBox에 Ubuntu + Anaconda  (4) 2016.04.08
AWS EC2 Ubuntu 사용하기 + Jupyterhub 써보기  (0) 2016.04.07
Basic Python Usage  (0) 2016.04.06