다운로드
작성자: donotgetgreed@gmail.com 작성일시: 2018-09-05 22:30:55 조회수: 545 다운로드: 60
카테고리: 기타 태그목록:

아마존 클라우드 사용법

대부분의 딥러닝 모형은 GPU가 없어도 동작을 하지만 모형이 복잡할수록 학습속도가 느려진다. 딥러닝 모형을 빠르게 학습시키기 위해서는 GPU가 필요하다. 그러나 GPU는 가격이 비싸고 설치와 사용환경 설정도 어렵다. 그러나 아마존 클라우드 서비스를 사용하면 미리 설치된 GPU를 저렴한 가격에 바로 사용할 수 있다. 여기에서는 아마존 클라우드 서비스에서 GPU를 사용하는 기본적인 방법을 설명한다.

우선 아마존 클라우드 서비스와 관련된 기본적인 용어를 소개한다.

  • AWS(Amazon Web Service): 아마존이 제공하는 클라우드 컴퓨팅 서비스.
  • EC2(Elastic Compute Cloud): AWS에서 제공하는 클라우드 컴퓨팅 서비스. 인스턴스(instance)라는 가상 컴퓨터를 사용할 수 있다.
  • AMI(Amazon Machine Image): 운영체제와 소프트웨어가 미리 설치되어 있는 EC2 인스턴스의 이미지.

AWS는 인스턴스를 사용한 시간만큼만 요금을 지불하므로 학습용으로 적당하다. 본 내용을 학습하려면 AWS에 가입을 해야 한다. 가입을 위한 자세한 사항은 AWS 홈페이지를 참조한다. AWS를 사용할 때는 보안을 위해 반드시 MFA(Multi Factor Authentication) 설정을 해두기를 권장한다.

Deep Learning AMI 사용법

DLAMI(AWS Deep Learning AMI)는 AWS에서 제공하는 딥러닝용 AMI이다. DLAMI에는 최신 버전의 Apache MXNet, Caffe, Caffe2, Chainer, CNTK, Keras, PyTorch, TensorFlow, Theano 패키지가 설치되어 있고 각각 별도의 conda 환경으로 구성되어 사용자가 선택하여 사용할 수 있다.

DMAMI를 사용하려면 AWS 콘솔을 통해 EC2 인스턴스를 만들어야 한다. 홈페이지에서 로그인 한 후 서비스 메뉴에서 "EC2"를 선택한다.

그림 3.1.15 : EC2 검색 화면

아래와 같은 화면이 나올 것이다. 다음으로 박스 표시안의 "인스턴스" 메뉴를 클릭한다.

그림 3.1.16 : EC2 대시보드

다음으로 "인스턴스 시작" 버튼을 클릭한다.

그림 3.1.17 : 인스턴스 시작

AMI 선택 화면에서 사이드바 메뉴의 "AWS Marketplace"를 클릭하고 DLAMI를 검색한다.

그림 3.1.18 : AMI 선택 화면

나열된 이미지 중에서 "Deep Learnin AMI(Ubuntu)"를 선택한다.

그림 3.1.19 : AMI 선택 화면 2

다음으로 인스턴스 유형을 선택한다. GPU가 지원되는 인스턴스 유형만 보고 싶다면, 필터링 기준을 "GPU compute"로 설정한다. 범용 GPU 지원 인스턴스 유형으로는 p2 인스턴스나 p3 인스턴스가 있다. 여기서는 P3.2xlarge를 선택한다. P3.2xlarge는 NVIDIA Tesla V100 GPU를 1개 포함하는 인스턴스이다.

그림 3.1.20 : 인스턴스 유형 선택 화면

인스턴스 유형을 선택한 뒤 일단 모든 것을 기본 설정으로 두고 "시작"을 클릭하여 인스턴스를 가동한다.

그림 3.1.21 : 인스턴스 시작 검토

인스턴스를 가동한 후에는 키페어(key pair)를 선택하는 화면이 나온다. 키페어는 여러분의 노트북에서 원격으로 인스턴스를 접속할 때 필요한 암호파일로 pem 확장자를 가진다. 처음 AWS를 사용한다면 키페어를 생성하고 기존에 사용하던 키페어 파일이 있다면 이를 선택한 뒤 인스턴스 시작을 클릭한다. 인스턴스 상태가 "pending"에서 "running"이 되면 인스턴스를 사용할 수 있다. 새로 키페어를 생성하면 다운로드 받았다면 다음 명령으로 키파일의 권한을 바꿔야 한다.

$ chmod 400 my_keypair.pem

그림 3.1.22 : 인스턴스 시작

인스턴스가 가동을 시작하면 ssh(secure shell)를 사용하여 인스턴스에 접속할 수 있다. 이 때 그림 3.1.8 박스표시 안의 IPv4 퍼블릭IP를 를 알고 있어야 한다. 또한 방금 만들었던 키페어 파일도 필요하다.

맥 OS X에서 인스턴스 접속

맥 OS X에서는 다음 명령으로 인스턴스에 접속할 수 있다.

$ ssh -i my_keypair.pem ubuntu@퍼블릭IP

비밀번호를 묻는 프롬프트가 나오면 키페어 파일을 만들 때 지정한 비밀번호를 입력한다.

그림 3.1.23 : 인스턴스 접속

윈도우에서 인스턴스 접속

윈도우 운영체제에서는 PuTTY라는 프로그램으로 인스턴스에 접속한다. 우선 최신 버전의 PuTTY를 다운로드하여 설치한다.

그림 3.1.24 : PuTTY 설치 과정

SSH client 프로그램인 PuTTY는 AWS 키페어 파일인 pem 파일을 사용하지 못하므로 같이 설치되는 PuTTYgen이라는 프로그램으로 .ppk 파일로 변환한다.

우선 시작 메뉴에서 "모든 프로그램" > "PuTTY" > "PuTTYgen"를 선택하여 PuTTYgen을 실행한 후 "Type of key to generate"에서 "RSA"를 선택하고 "Load" 버튼을 클릭한다. 기본적으로 PuTTYgen에는 확장명이 ppk인 파일만 표시되기 때문에, pem 파일을 찾으려면 모든 유형의 파일을 표시하는 옵션을 선택한다. 마지막으로 my_keypair.pem 키파일을 선택하고, "Save private key" 버튼을 클릭하여, my_keypair.ppk 파일을 생성한다. 이름은 원래의 pem 파일과 같은 이름으로 한다.

그림 3.1.25 : PuTTYgen 실행 화면과 키페어 파일 변환

ppk 키 파일을 만들었으면 시작 메뉴에서 "모든 프로그램" > "PuTTY" > "PuTTY"를 선택하여 PuTTY를 실행 시킨다. Host Name(or IP address) 텍스트 박스에 "ubuntu@퍼블릭IP"를 입력하고 "Connection type:"에 "SSH"를 선택한다.

다음으로 "Category:" 트리에서 "Connection" > "SSH" > "Auth"를 클릭한다. 오른쪽 "Private key file for authentication" 입력에서 "Browse"를 클릭하고 .ppk 파일을 선택한 다음 "Open"을 실행하면 인스턴스에 접속할 수 있다.

그림 3.1.26 : PuTTY를 이용해 실행 중인 인스턴스에 접속하는 과정

conda 환경 사용법

DLAMI 인스턴스에 접속하면 그림 3.1.27에서 보이는 것처럼 사용할 수 있는 conda 환경의 목록과 각 환경을 실행시키는 명령어가 나온다.

그림 3.1.27 : DLAMI에서 사용할 수 있는 환경 목록

이 중 "TensorFlow(+Keras2) with Python3(CUDA 9.0 and Intel MKL-DNN)"을 실행시켜보자. 접속한 쉘에서 그림 3.1.27에 나와 있는대로,다음의 명령어를 입력하여 환경을 설정한다.

$ source activate tensorflow_p36

환경이 설정되면 그림 3.1.28에서와 같이 프롬프트 앞에 (tensorflow_p36)라는 글자가 생겨난다.

그림 3.1.28 : Tensorflow_p36 환경 실행 화면

환경 설정후에는 ipython에서 다음 명령을 실행하여 동작을 확인한다.

$ ipython 

In [1]: import tensorflow as tf
   ...: hello = tf.constant('Hello, TensorFlow!')
   ...: sess = tf.Session()
   ...: print(sess.run(hello))

그림 3.1.29 와 같이 잘 실행된다면 환경이 제대로 구성되어 있는 것이다.

그림 3.1.29 : Tensorflow_p36 환경 테스트 코드 결과

주피터 노트북 실행하기

마지막으로 AWS의 EC2 인스턴스에서 주피터 노트북(Jupyter notebook) 서비스를 실행하고 사용자의 노투북에서 웹으로 접속하여 개발할 수 있는 환경을 만든다. 지금부터 나오는 명령어는 SSH로 인스턴스에 접속한 상태에서 입력한다.

(1) 주피터 설정 파일 생성

아래의 명령어를 입력하여, 설정 파일을 생성한다.

$ jupyter notebook --generate-config

(2) 패스워드 생성

나중에 Jupyter notebook에 접속할 때 사용할 패스워드를 생성한다. sha1로 시작하는 해시코드(hash code)를 복사해 둔다.

$ ipython 

 In [1]: from notebook.auth import passwd
 In [2]: passwd()
 Enter password: 패스워드
 Verify password: 패스워드
 sha1:6600c5733ef3:b683d6afba16b3403fdf9a75ac38b7d8e7f733bb
 In [3]: exit

(3) https 적용을 위한 키파일 생성

다음 명령으로 자기인증(self-signed) 키파일을 생성한다. 혼자 사용하는 것이라면 아무렇게나 입력해도 된다.

$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout cert.pem -out cert.pem

Country Name (2 letter code) [AU]: KO
State or Province Name (full name) [Some-State]: Seoul
Locality Name (eg, city) []: Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Datascience
Organizational Unit Name (eg, section) []: datascience
Common Name (e.g. server FQDN or YOUR name) []: YourName
Email Address []: youremail@gmail.com

(4) Jupyter 설정 파일 수정

Jupyter 설정 파일을 수정하려면

  • 암호화된 패스워드
  • 생성한 키파일의 위치 정보

이 필요하다. vi 에디터로 주피터 설정 파일을 열어 준다.

$ sudo vi /home/ubuntu/.jupyter/jupyter_notebook_config.py

파일의 가장 아래로 가서 키보드 i를 누른다. 화면 가장 아래 부분에 -- INSERT --가 생기면 다음과 같이 편집한다.

c.NotebookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False 
c.NotebookApp.password = 'sha1:6600c5733ef3:b683d6afba16b3403fdf9a75ac38b7d8e7f733bb'
c.NotebookApp.certfile = '/home/ubuntu/cert.pem'
c.NotebookApp.port = 8888

마지막 줄은 주피터 노트북을 연결하기위한 포트번호다. 보안을 위해서는 디폴트 포트번호인 8888이 아니라 다른 번호로 (예: 9999) 변경하는 것이 좋다. ESC 키를 눌러 vi의 명령어 모드로 나온 다음 w 키와 q를 눌러서 저장하고 vi 에디터를 종료한다.

이제 다음 명령으로 주피터 노트북 서비스를 시작한다.

$ nohup jupyter notebook &

주피터 노트북 서비스를 시작했지만 외부에서 웹브라우저로 접속하려면 다음과 같이 방화벽에서 8888번 (또는 사용자가 지정한 다른) 포트를 열어야 한다.

  1. EC2 대쉬보드에서 "네트워크 및 보안" > "보안 그룹"을 선택한다.
  2. 보안 그룹 목록에서 설정하려는 인스턴스와 연결되어 있는 보안그룹의 박스를 체크한다.
  3. 화면 아래에 "설명", "인바운드", "아웃바운드", "태그"라는 카테고리가 보일 것이다. 이 중 "인바운드"를 클릭한다.
  4. "인바운드"를 클릭하면 22 번 포트가 열려 있는 것을 볼 수 있다. 22번 포트는 인스턴스가 만들어질 때 자동으로 설정된다.
  5. "편집"을 클릭하고 그림 3.1.31번과 같이 설정한 후 저장한다.
    • 유형 : 사용자 지정 TCP 규칙
    • 프로토콜 : TCP
    • 포트범위 : 8888
    • 소스 : 내 IP

그림 3.1.30 : 보안 그룹 화면

그림 3.1.31 : 인바운드 규칙 편집 화면

이제 인스턴스에서 사용자 노트북의 웹 브라우져 주소창에 https://퍼블릭IP:8888를 입력하면 주피터 노트북에 접속할 수 있다.

자기 인증(self-signe) 인증서를 사용하였기 때문에 그림 3.1.32처럼 접속 경고가 나올 수 있다. 경고를 무시하고 "ADVANCED"를 클릭하고 "proceed to ..."를 클릭하면 우리가 가동시킨 주피터 노트북 서비스에 접속할 수 있다.

그림 3.1.32 : 보안 경고 메세지 화면

Password를 입력하는 화면(그림 3.1.33)이 나오면 비밀번호를 넣는다.

그림 3.1.33 : Jupyter notebook 패스워드 입력 화면

이제 Jupyter notebook을 사용할 수 있다.

그림 3.1.34 : Jupyter notebook

사용이 끝난 후에는 EC2 인스턴스를 종료해서 추가적인 요금이 발생하지 않도록 주의한다.

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!