티스토리 뷰

[업데이트 2018.09.28 11:40]


Deep learning 학습을 위해 개발환경 구축에 대해 고민하던 중, AWS에 deep learning 환경을 구축해보기로 하였습니다. 최근에는 EC2 인스턴스를 생성시 제공되는AMI(Amazon Machine Images)를 사용하면, deep learning 라이브러리, CUDA 등 필요한 환경 구축을 할 필요없이 바로 사용할 수 있습니다. 먼저 EC2 인스턴스를 On-Demand 형태로 구축해보는 것을 포스팅 하려고 합니다.


1. Gmail 계정 생성

먼저 AWS에서 사용될 root 계정을 위해 Gmail 이메일을 생성합니다.

(생성 절차는 본 포스팅에서 생략합니다.)


2. AWS 계정 생성

이제 이전에 만들었던 Gmail로 AWS 계정을 생성합니다.

(생성 절차는 본 포스팅에서 생략합니다.)


3. EC 서비스로 이동

AWS 서비스에서 EC2 인스턴스를 생성하기 위해 EC 서비스로 이동합니다.



4. EC2 인스턴스 제한 해제

deep learning을 위해 만들 p2.xlarge 타입의 인스턴스의 경우 처음에는 생성 할 수 있는 인스턴스 개수가 0으로 되어 있어 생성이 되지 않습니다. 아래와 같이 제한 매뉴로 이동후 사용량 제한 증가를 원하는 인스턴스 타입에 대해 사용량 제한 증가 요청을 클릭합니다.



아래와 같이 입력후 제출하게 되면 몇분후 해당 인스턴스 타입에 대해 On-Demand 형태로 생성이 가능하게 됩니다. 루트 계정 이메일로 완료가 되면 자동 회신이 옵니다.


5. 인스턴스 시작

아래와 같이 인스턴스 매뉴로 이동후 인스턴스 시작 버튼을 클릭합니다.



6. 인스턴스 생성 

1) AMI 선택

아래의 그림처럼 커뮤니트 AMI 탭 선택 및 deep learning으로 검색해보면 deep learning AMI 목록이 표시됩니다. 저는 Ubuntu O/S를 지원하고, 다양한 deep learning 라이브러리 등이 설치되어 있는 Deep Learning AMI(Ubuntu) Version 13.0을 선택하였습니다.



2) 인스턴스 유형 선택

이제 인스턴스 유형을 선택하는데, GPU compute로 필터링하여 원하는 타입을 선택합니다. 저는 가장 저렴한 p2.xlarge를 선택하였습니다.



3) 인스턴스 구성

인스턴스의 세부 정보를 구성하는데, 기본 default로 하여 진행합니다. (여기서 스팟 인스턴스를 체크하면 스팟 인스턴스로 생성합니다)



4) 스토리지 추가

스토리지 추가에서 원하는 사양으로 설정을 진행하며, 인스턴스 종료시 스토리지가 삭제되지 않도록 아래와 같이 종료 시 삭제 부분을 언체크합니다.



5) 태그 추가

해당 단계는 생략합니다.


6) 보안 그룹 구성

EC2 인스턴스 생성후, SSH나 Jupyter Notebook 접근을 위해 아래와 같이 보안 그룹을 생성합니다.


<SSH>

SSH / TCP / PORT 22 / SOURCE 0.0.0.0/0 (전체 허용)


<Jupyter Notebook>

사용자 지정 TCP / TCP / PORT 8888 / SOURCE 0.0.0.0/0 (전체 허용)



7) 검토

입력한 정보들에 대해 최종 확인 후 오른쪽 하단의 시작버튼을 누릅니다. 시작 버튼을 누르게 되면, 키 페어를 선택하도록 되어 있는데 아직 만들지 않았다면 새 키 페어를 생성합니다. 키 페어 이름 입력 후, 키 페어 다운로드 버튼을 클릭하게 되면 프라이빗 키(pem 파일)가 다운로드 됩니다. 향후 ssh 접속시 해당 키파일을 사용하여 접속합니다.



7.인스턴스 확인

이제 생성된 후 인스턴스 매뉴에서 생성된 EC2 인스턴스를 확인합니다. 아래와 같이 정상적으로 만들어졌음을 확인할 수 있습니다.


8. SSH 및 Jupyter notebook 접속

1) SSH

아래의 링크를 참고하여 Windows에서 PuTTY를 사용하여 Linux 인스턴스에 연결할 수 있습니다.

AWS PuTTY 설정 가이드 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html


여기서 접속을 위해 pem파일을 ppk파일로 변환해야 하는데, 위의 절차를 참고하시면 됩니다. 혹시 proxy를 통해 접근해야하는 네트워크 환경인 경우 아래와 같이 proxy 정보를 입력합니다.



SSH를 통해 접속시 보이는 첫 화면입니다. 해당 AMI 버전의 경우 conda를 통해 딥러닝 프레임워크를 변경하여 사용할 수 있도록 구성되어 있습니다.
Using username "ubuntu".
Authenticating with public key "imported-openssh-key"
=============================================================================
       __|  __|_  )
       _|  (     /   Deep Learning AMI (Ubuntu) Version 14.0
      ___|\___|___|
=============================================================================

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-1066-aws x86_64v)

Please use one of the following commands to start the required environment with the framework of your choice:
for MXNet(+Keras2) with Python3 (CUDA 9.0 and Intel MKL-DNN) _______________________________ source activate mxnet_p36
for MXNet(+Keras2) with Python2 (CUDA 9.0 and Intel MKL-DNN) _______________________________ source activate mxnet_p27
for TensorFlow(+Keras2) with Python3 (CUDA 9.0 and Intel MKL-DNN) _____________________ source activate tensorflow_p36
for TensorFlow(+Keras2) with Python2 (CUDA 9.0 and Intel MKL-DNN) _____________________ source activate tensorflow_p27
for Theano(+Keras2) with Python3 (CUDA 9.0) _______________________________________________ source activate theano_p36
for Theano(+Keras2) with Python2 (CUDA 9.0) _______________________________________________ source activate theano_p27
for PyTorch with Python3 (CUDA 9.2 and Intel MKL) ________________________________________ source activate pytorch_p36
for PyTorch with Python2 (CUDA 9.2 and Intel MKL) ________________________________________ source activate pytorch_p27
for CNTK(+Keras2) with Python3 (CUDA 9.0 and Intel MKL-DNN) _________________________________ source activate cntk_p36
for CNTK(+Keras2) with Python2 (CUDA 9.0 and Intel MKL-DNN) _________________________________ source activate cntk_p27
for Caffe2 with Python2 (CUDA 9.0) ________________________________________________________ source activate caffe2_p27
for Caffe with Python2 (CUDA 8.0) __________________________________________________________ source activate caffe_p27
for Caffe with Python3 (CUDA 8.0) __________________________________________________________ source activate caffe_p35
for Chainer with Python2 (CUDA 9.0 and Intel iDeep) ______________________________________ source activate chainer_p27
for Chainer with Python3 (CUDA 9.0 and Intel iDeep) ______________________________________ source activate chainer_p36
for base Python2 (CUDA 9.0) __________________________________________________________________ source activate python2
for base Python3 (CUDA 9.0) __________________________________________________________________ source activate python3

Official Conda User Guide: https://conda.io/docs/user-guide/index.html
AWS Deep Learning AMI Homepage: https://aws.amazon.com/machine-learning/amis/
Developer Guide and Release Notes: https://docs.aws.amazon.com/dlami/latest/devguide/what-is-dlami.html
Support: https://forums.aws.amazon.com/forum.jspa?forumID=263
=============================================================================

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

7 packages can be updated.
0 updates are security updates.

New release '18.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

ubuntu@ip-xxx-xxx-xxx-xxx:~$

2) Jupyter notebook

PuTTY나 terminal 프로그램을 통해 리눅스 인스턴스에 접근합니다. 기본적으로 AMI에 Jupyter notebook이 기본 설치가 되어 있어 바로 실행이 가능합니다. 아래와 같이 --ip 옵션을 통해 어느 IP에서든 접속가능하도록 합니다. Jupyter notebook의 경우 실행시 터미널에 표시되는 token으로 로그인을 하는데, 매번 token을 입력하기 어려우므로 실행시 파라메터로 password를 주게 되면, 실행후 password를 지정할 수 있게됩니다.


jupyter notebook password --ip=*


실행후, 웹브라우져에서 생성된 EC2 인스턴스의 Public IP 또는 DNS, 그리고 포트는 8888로 접속합니다. 


2.1) Jupyter Notebook Daemon 등록하기

EC2 인스턴스를 재시작 등의 작업이 이루어지면 Jupyter Notebook을 다시 실행해야 하는데, 데몬으로 등록해놓으면 항상 자동으로 실행되도록 만들수 있습니다.


Deep Learning AMI (Ubuntu) 13.0 Version을 기준으로 데몬을 등록하였을 때의 등록 절차입니다.

1. Jupyter Notebook 설정 파일을 생성합니다. 여기에 설정 파일이 생성됩니다. (/home/ubuntu/.jupyter/jupyter_notebook_config.py)

jupyter notebook --generate-config


2. service 파일을 생성 및 편집합니다. 다음과 같이 jupyter.service 파일을 생성 및 vi 에디터를 통해 내용을 수정합니다.

sudo mkdir /usr/lib/systemd/system
sudo touch /usr/lib/systemd/system/jupyter.service

아래에서 Jupyter notebook 실행 파일 및 config 파일의 위치는 Deep Learning AMI (Ubuntu) 13.0 Version을 기준으로 다음과 같습니다. 실행 파일 위치가 틀릴 경우 데몬이 동작하지 않으니 경로 확인이 필요합니다. 

ExecStart=/usr/local/bin/jupyter-notebook --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py
[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/usr/local/bin/jupyter-notebook --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3. systemctl을 통해 데몬 등록 및 서비스를 시작합니다.

sudo systemctl enable jupyter.service
sudo systemctl daemon-reload
sudo systemctl restart jupyter.service
다음의 명령어를 사용하여 Jupyter Notebook이 데몬 등록 및 현재 실행 중인지 확인 할 수 있습니다.
systemctl -a | grep jupyter
ubuntu@ip-xxx-xxx-xxx-xxx:~$ systemctl -a | grep jupyter
  jupyter.service     loaded    active   running   Jupyter Notebook

* Ubuntu 14.04 daemon auto-start 참고 

- Ubuntu 14.04에서 systemctl 미지원

- https://cloudmaven.github.io/documentation/aws_jupyter.html


* 참고

[1] https://aws.amazon.com/ko/blogs/korea/get-started-with-deep-learning-using-the-aws-deep-learning-ami/

[2] https://docs.aws.amazon.com/ko_kr/dlami/latest/devguide/tutorial-conda.html

[3] https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html?icmpid=docs_ec2_console

[4] https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html

[5] https://tensorflow.blog/2018/01/18/aws-%EC%8A%A4%ED%8C%9F-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-deep-learning-ami/

[6] https://beomi.github.io/2018/03/18/Create_GPU_spot_EC2_for_ML/

[7] https://www.youtube.com/watch?v=orIXr5xd6P0

[8] https://docs.aws.amazon.com/ko_kr/dlami/latest/devguide/setup-jupyter.html

[9] https://cloudmaven.github.io/documentation/aws_jupyter.html

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함