AWS에서 GPU Instance 사용하기

2020. 2. 29. 00:08AWS Study

시작하기 전, 이 글은 나름의 이해에서 나오는 개념들을 본인이 보기 편하게 작성하는 것이지 틀린 부분이 있을 수도 있음을 미리 명시합니다.

AWS?

AWS(Amazon Web Services)는 아마존닷컴에서 개발한 클라우딩 컴퓨팅 서비스이다. 네트워킹을 기반으로 가상컴퓨터가상스토리지, 네트워크 인프라등, 다양한 서비스를 제공하고 있다. 비즈니스와 개발자가 웹 서비스를 사용하여 확장 가능하고 정교한 애플리케이션 구축하도록 지원하여 준다. 소규모 법인(회사) 및 개인을 포함한 다양한 사용자들이 사용하고 있으며, 클라우드 컴퓨팅의 장점을 이용하기 위해 많은 거대기업들도 활용하고 있다.

Cloud Computing

인터넷을 통해 IT Resource와 application을 On-Demand로 제공하는 서비스이다. 종량 과금제로 운영된다. 제공되는 서비스는 몇가지 형태로 나누어져있는데, 크게 다음과 같다.

  • IaaS(Infrastructure as a Service)
    AWS, 네이버 플랫폼과 같은 인프라스트럭쳐를 제공하는 서비스로, 가상서버, 스토리지, 네트워크등의 리소스를 서비스 형태로 제공한다. 사용자가 물리적인 하드웨어를 직접 관리할 필요가 없고, 직접적인 서비스 이용을 통해 Computer Resource를 사용할 수 있다. 기본 구성요소는 Networking, Computer, Data Storage Space이다.
  • PaaS(Platform as a Service)
    DB 또는 Application 서버 등의 미들웨어를 제공한다. 사용자는 제공되는 미들웨어만 사용할 수 있는데, 주로 OS, DB, WAS, JDK 등의 개발환경과 관련한 서비스를 제공한다. 기본 인프라를 관리할 필요 없이 애플리케이션을 실행할 수 있게 해준다.
  • SaaS(Software as a Service)
    소프트웨어 또는 애플리케이션의 기능만 제공한다. 네이버클라우드, 웹메일, ERP 등과 같은 형태의 서비스가 제공된다.

내가 사용했던 AWS EC2 (spot)instance는 IaaS와 PaaS 두개 쯤에 해당하는 것 같다.

AWS GPU Instance 사용하기

사실 document나 aws blog posting과는 달리 대부분 GUI로 편하게 이용할 수 있도록 구성되어 있다. GPU 옵션이 붙은 온디맨드 인스턴스를 사용하는 것은 매우 쉽다. 그러나 아쉽게도, 이를 그대로 사용하기에는 요금이 현실적이지가 않다. 다행히도, AWS 플랫폼의 남아도는 자원을 효율적으로 소모하기 위해 Spot Instance를 제공한다. 고맙게도 평균 70% 정도의 할인가를 제공하며, 온디맨드 인스턴스에 비교해서 딱히 달라지는 것도 없다. 그렇지만, 할당제로 진행되는 서비스이므로 이따금씩 안정성을 보장받지 못할 수도 있다고는 한다(딱히 겪어보진 못했다.)
이 글에서는 간단하게 Spot Instance를 생성하기 위한 절차만 소개하고 그 절차의 의미에 대해서는 기록하지 않도록 하겠다.(2020년 2월 28일 기준) 순서는 다음과 같다.

1. AWS Console login > 서비스(좌측 상단) > EC2 선택.
2. 네트워크 및 보안 > 보안 그룹 > pem 키 생성(액세스 키와 pem키 모두 로컬에 남겨둘 것).
3. 인스턴스 > 스팟요청 선택 > "Defined duration workloads" 선택.
4. AMI 선택 ( Amazon AMI에서 'Deep learning base AMI (Ubuntu 18.04)' 선택).
5. 인스턴스 유형변경 > GPU compute > p2.xlarge 선택.
6. 키페어이름 > 2에서 생성한 것 선택.
7. 추가구성 > EBS 볼륨 > 삭제(i) 체크해제.
8. 시작버튼을 누른 후, 터미널에서 ssh -i pemkeyfile ubuntu@<ec2-address> 로 접속

눈여겨 봐야할 곳은 2번과 7번인데, 도큐먼트에는 명령어로 나와있었고 그마저도 구버전이라 제대로 된 동작을 하지 않는 경우가 다반사 -__- 저렇게 해주지 않으면 pem키를 통해 인스턴스에 접근도 할 수 없고, spot 소멸 후, 임시 meta-data가 볼륨스토리지와 함께 날아가버려 연속적인 환경을 제공하지 못한다.
나는 이런 방식으로 spot 생성 후, 일반적인 우분투 환경에서 ML/DL 실험하는 것처럼 사용할 수 있었다. 친절하게도, Deep Learning 계열 AMI를 고르면 미리 셋팅된 anaconda 환경을 제공해주므로 실험환경 설정에도 애로사항이 적은 편이었다. 한편, spot이 종료된 후, 어떻게 해야 연속적으로 쓰는가에 대한 방법은 다음과 같다.

1. 서비스 > EC2 > ELASTIC BLOCK STORE > 볼륨 > 비활성된 스토리지 선택 > Snapshot 생성.
2. ELASTIC BLOCK STORE > 스냅샷 > 이미지 생성 선택 > 이미지 생성. 
3. spot instance 생성 시, 내 AMI에서 스냅샷 선택.

이제 편안하고 저렴하게 AWS GPU Instance를 사용할 수 있다. 혹시라도 달라진 부분이 있으면 누구든 제보를 부탁드립니다.