[졸업프로젝트 4탄, 알고리즘 학습] AWS EC2로 딥러닝 모델 학습하기
Projects/Graduation Project

[졸업프로젝트 4탄, 알고리즘 학습] AWS EC2로 딥러닝 모델 학습하기

[졸업프로젝트 4탄, 알고리즘 학습] AWS EC2로 딥러닝 모델 학습하기

본 글은 졸업프로젝트에 필요한 개념들을 담은 시리즈 글로, 졸업프로젝트와 관련된 글은 다음과 같이 시리즈로 되어있습니다.

본 글은 위의 시리즈 중 마지막 버전으로, 위에서 만든 알고리즘들을 연결해 하나의 시스템으로 만들고, 완성도를 높이기 위한 여러 시도들을 담아보았습니다. 내용은 AWS Cloud를 통해 딥러닝 모델 돌려보기 입니다!

AWS Cloud를 통해 딥러닝 모델 돌려보기

Motivation

딥러닝 모델을 이용시, train과 test 과정을 거쳐 괜찮은 모델을 고르는 과정은 필수입니다. epoch를 많이 설정하였지만, 돌려볼 수 있는 상황이 딱히 되지 않다면(gpu 부족이나 낮은 cpu 사양 등등의 이유로) 다른 서버에서 돌려보고 싶은 마음이 생길 것이다. 이때 클라우드 컴퓨팅 서비스를 추천한다!

클라우드 컴퓨팅이란?

이미지 출처: https://smartcontentcenter.tistory.com/344

클라우드 컴퓨팅은 사용자의 직접적인 활발한 관리 없이 특히, 데이터 스토리지와 컴퓨팅 파워와 같은 컴퓨터 시스템 리소스를 필요 시 바로 제공하는 것을 말한다. -위키백과

말그대로, 다른 서비스의 데이터와 컴퓨팅 서비스를 사용하는 서비스이다. 대표적인 예로, Microsoft Azure, Amazon Web Service, Google Cloud가 있다. 제일 대중적인 서비스는 Amazon Web Service이다. AWS 페이스북 그룹도 있어서 활성화가 잘되어있다.

필자는 프로젝트에 적용될 딥러닝 모델을 학습시키기 위해 AWS 서비스를 사용하기로 하였다. 순서는 다음과 같다.

1. AWS 회원가입 + 카드 등록

AWS 회원가입과 더불어 카드 등록을 해야 한다. 메인 홈페이지에 접속해 위의 (콘솔에 로그인) 버튼을 누른후, (AWS 계정 새로 만들기)를 눌러 회원가입을 진행한다.

카드 등록도 같이 해서 바로 AWS 서비스를 시작해보자. (카드 등록을 해놓지 않으면, AWS 서비스를 이용할 수 없으니 생각나는 대로 바로 하자)

2. EC2 instance 등록하기

우리가 사용하는 클라우드 컴퓨팅 서비스는 Amazon 서비스 위에 나만의 컴퓨터(instance라고 불린다.)를 올려놓고 사용하는 개념이다. 이 과정을 통해 나만의 instance를 생성하게 된다.
본 프로젝트는 딥러닝에 걸맞는 프로젝트이므로, 딥러닝 사용할 때 많이 사용되는 EC2 서비스를 이용해보기로 한다. EC2에 관한 설명은 여기를 보면 자세히 알 수 있다.

사용할 instance 버전은 Ubuntu 18.04, c5.large instance를 사용할 예정이다. 다른 버전을 사용하고 싶다면 밑에 고를 때 다른 버전을 고르면 된다.

먼저 console로 들어가서, (솔루션 구축란)에 (EC2를 사용하여) 로 접속한다.

접속하게 되면 다음과 같이 자신이 사용할 instance의 세부 정보를 고르는 창이 뜨게 된다. 여기서 운영체제를 고르게 되는데 필자는 Ubuntu 18.04에 해당되는 가장 위의 버전을 이용하기에 여기에 맞는 선택을 고르게 된다.

해당 instance 를 고르면 이것의 세부 정보를 보여주는 창이 뜬다. 가격 책정 방식이나 세부 정보들을 보고 맞다면 (continue)를 누르면 된다. (instance 유형에 따른 가격 내용도 나오니깐 자세히 보면 된다.)

다음 페이지를 가면 자신에게 맞는 인스턴스 유형을 고르라고 나와있다. 필자는 가장 보편적인 (c5.large)를 골랐는데 원하는 버전이 따로 있다면 그걸 골라도 좋다. 약 6가지의 조건들이 나와있으니 세세히 확인해보고 사용하는 걸 추천한다. 맞는 인스턴스 유형을 골라주고 (검토 및 시작)을 눌러 인스턴스를 만들자.

이제 자신이 고른 선택에 대한 instance 전체 정보를 보여준다.

(AMI 세부 정보)와 (인스턴스 유형)을 확인해주고 (시작하기) 버튼을 누르면 나만의 instance가 생성되었다. (3.instance 생성 완료하기)를 통해 완전히 만들어진다.

3. instance 생성 완료하기

instance는 로컬 컴퓨터의 키 페어를 통해 접속하게 된다. 이를 위해서 로컬 컴퓨터에 키 페어를 등록하는 과정이 필요하다. 다음과 같이 키 페어를 등록하라는 창이 뜰 것이다.
자신만의 비밀번호를 입력해주고 다운로드하면 된다. 당연한 소리지만 짧지만 강력하게 작성하는 것을 추천한다.

instance 구축을 위한 한단계를 앞두고 모든 걸 완성했다. 다음과 같은 창이 뜨면, 스크롤 후 밑으로 내려가서 (인스턴스 보기) 버튼을 눌러준다.

누르게 되면 instance가 뜨는 걸 알수 있다. 이건 (EC2 대시보드)에 들어가면 바로 나오는 창으로 다음과 같은 정보를 알려주는 걸 볼 수 있다.

  • 인스턴스 ID
  • 퍼블릭 IPv4 주소/DNS
  • 프라이빗 IPv4 주소/DNS
  • VPC/서브넷 ID

를 알려주고 외에 (보안), (네트워킹), (스토리지), (상태 검사), (모니터링), (태그)를 보면 자신의 instance에 대해 자세히 알 수 있다.

아직 끝난게 아니다. 자신의 키 체어에 대해 권한을 바꿔주는 일이 남았다.
터미널을 열어 다음과 같이 명령어를 작성해주자.

cd /Users/<your_username>/Downloads/

chmod 0400 <your .pem filename>

이렇게 권한을 수정하면, 준비는 완료되었다!

*여기서부터는 혹시 모를 개인정보 유출을 방지하기 위해 모든 이미지는 아마존 공식 홈페이지인 여기에서 사용되었습니다.

4. ssh로 자신의 instance 에 접속해보기

터미널에 ssh 명령어를 통해 자신의 instance에 접속해볼 수 있다.
위의 terminal을 끄지 말고 다음과 같이 입력해보자.

ssh -L localhost:8888:localhost:8888 -i <your .pem filename> ubuntu@<your instance DNS>

여기서 말하는 "<your .pem filename>"은 위에서 말한 키페어 이름을 말하고, ""는 위에 instance 정보에 나온 (퍼블릭 IPv4 DNS)를 말한다.
복붙해서 넣고, 입력해보자.

완료되어 여러 확인 메시지가 뜰텐데 yes를 눌러주면 된다.
다음과 같은 창이 뜬다면 로딩을 완료한 것이다.

이 창은 내가 만든 instance 정보를 다 보여준다. 자세히 보면 내가 원하는 딥러닝 instance에 맞게 Tensorflow, Keras, Pytorch, Python3가 설치된 걸 볼 수 있다.
이제 환경은 다 세팅된 것이다. 여기서 자신이 원하는 딥러닝 모델을 돌리면 된다.

5. Amazon ECR에 로그인

AWS Deep Learning Container 이미지는 개발자가 Docker 컨테이너 이미지를 손쉽게 저장, 관리 및 배포할 수 있게 해주는 완전관리형 Docker 컨테이너 레지스트리인 Amazon Elastic Container Registry(ECR)에 호스팅된다. 이 단계에서는 Amazon ECR에 로그인하여 액세스 권한을 확인한다.

AWS 액세스 키 ID와 보안 액세스 키를 생성해 권한을 확인할 수 있다. 생성한 적이 없다면 다음 링크를 눌러 생성할 수 있다.


다음과 같이 키 ID와 액세스 키를 제공받았다면 Amazon ECR에 로그인해야 한다.

$(aws ecr get-login --region us-east-1 --no-include-email --registry-ids 763104351884)

다음과 같이 명령어를 입력하여 로그인이 된다면 '로그인 성공'이 표시된다.

6. Deep Learning Container를 사용한 MNIST CNN 모델 돌려보기

지금까지 작동되고 있는 EC2 인스턴스 환경 위에서 말한 AWS Deep Learning Container 이미지를 실행해야 한다. 다음과 같은 명령어를 입력하여 작동한다.

docker run -it 763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-training:1.13-cpu-<python version>-<ubuntu version>

이 단계는 실행하는 데 시간이 꽤 오래 걸린다. GPU 인스턴스를 사용할 때 'docker' 대신 'nvidia-docker'를 사용한다. 이 단계가 완료되면 컨테이너에 대한 bash 프롬프트 상태가 된다.

딥러닝 모델을 교육하기 위해 Keras 레파지토리를 복제하자.

git clone https://github.com/fchollet/keras.git

돌리게 되면 다음과 같은 창이 뜬다.

다음과 같은 명령을 입력해 정식 MNIST CNN 모델을 돌려보자.

python keras/examples/mnist_cnn.py

AWS Deep Learning Container를 통해 교육이 시작된 것이다! 다음과 같이 학습이 되는 모습을 볼 수 있다.

7. Github 모델 돌려보기

찾아본 결과, 딥러닝 모델을 돌리기 위해서는 자신의 딥러닝 모델 코드가 적힌 github 레파지토리를 clone 후에 파일로 접속해 들어가는 편이 대부분이다.

git clone <자신의 저장소 이름>
//원하는 파일 실행 눌러서 실행

여기서 25MB 이상의 파일은 올리기 힘든 Github의 특성 때문에, 원격으로 파일을 전송하는 필요가 있을 것이다. 이때는 vsftpd와 fileZilla를 통해 가능하다.

 

8. 환경 종료

우리가 지금까지 돌려본 Amazon EC2 인스턴스를 종료해보자. (종료하지 않으면 요금이 청구되기 때문에 꼭 종료해줘야 한다.)

먼저 Amazon EC2 콘솔에서 실행중인 인스턴스를 선택후, 인스턴스 실행을 눌러준다.

 

여기서 "작업 > 인스턴스 상태 > 종료"를 선택한다.

 

이후에 종료 확인 메시지가 뜰것이다. "예, 종료합니다"를 눌러주면 몇 분 프로세싱 후에 최종적으로 종료가 된다. 인스턴스가 종료되면, EC2 콘솔에서 인스턴스 상태가 종료됨으로 변경되었는지 꼭 확인하고 창을 닫아준다.

 

지금까지 AWS 환경에서 EC2 인스턴스를 생성하고, Deep Learning Container를 생성하여 그 위에서 CNN 모델을 학습한 일련의 과정을 보았다. 자율주행에 관심이 있다면 밑의 졸업프로젝트 관련 다른 게시물도 보는 것을 추천한다.