EC2에 들어가면 사이드바에 스팟 요청이라는 메뉴를 찾을 수 있다. 클릭한다. 그리고 나면 스팟 인스턴스 요청이라는 버튼이 있는데 이를 클릭하면 아래와 같은 화면이 보인다.
1. 스팟 플릿 요청 생성
1) 시작 피라미터
미리 만들어진 템플릿이 있다면 이를 사용해도 되지만, 내 경우 없기 때문에 수동으로 만들어 사용하고자 하였다.
- AMI : 아마존 머신 이미지를 지칭하는 말로, 위의 이미지에서 그에 대한 설명을 확인할 수 있다.
- 내 경우 딥러닝을 사용하고, ubuntu 20.04 OS 환경을 사용하고자 하였다. 또한, 아래에서도 나오겠지만 g4dn.2xlarge 인스턴스를 구동하고자 한다. 그래서 아마존 ami에서 검색하여 이에 맞는 ami을 선택해주었다.
- Key Pair : 키 페어는 퍼블릭, 프라이빗 키로 구성되는데, 나중에 ssh를 통하여 인스턴스에 접속을 해야 한다. 이 때 필요한 도구이다.
- 새 키 페어 생성을 클릭하면 위와 같이 페이지 새 탭으로 뜨는데, 여기서 오른쪽 상단에 키 페어 생성을 클릭해준다.
- 내 경우 이름에 키 페어 이름을 넣고, RSA에 pem를 클릭하여 키 페어 생성해주면 끝난다. 그리고 나면 다운로드에 생성된 키 페어를 확인할 수 있는데, 이는 중요하므로 유출되지 않게 잘 보관하도록 한다. 잃어버려도 귀찮으니 어디에 저장해놨는지 잘 생각해야 한다.
2) 추가 요청 세부 정보
여기서는 그냥 기본값만 적용해도 괜찮다.
3) 목표 용량
- 목표 용량 : 돌릴 인스턴스의 수를 의미한다.
- 목표 용량 유지 : 스팟 인스턴스는 생각보다 자주 종료되는데, 이를 종료되면 계속 인스턴스를 생성해 돌리게 할 수 있다. 이를 체크하면 중단된 스팟 인스턴스를 자동으로 대체할 수 있다.
- 인터럽트 방식 : 종료, 중지, 수면 방식이 존재한다.
- 종료 : 스팟 인스턴스가 종료되면 그대로 꺼진다. 인스턴스 저장소(임시 저장소)에 저장된 모든 데이터가 손실된다 .
- 중지 : 스팟 인스턴스를 중지한다. 나중에 다시 시작할 수 있으며 인스턴스 저장소에 있는 저장소의 데이터가 손실된다.
- 수면 : 최대 절전 모드로 전환되어 중지하기 전에 현재 상태를 EBS 루트 볼륨에 저장한다. 이 옵션을 사용하면 인스턴스 상태를 잃지 않고 작업을 재개할 수 있다.
- 인스턴스 대체 전략 : 시작 전용과 종료 전 시작 옵션이 있다.
- 시작 전용 : 재조정 시간동안 두 개의 인스턴스를 운영하여 재조정을 할 수 있게 해준다.
- 종료 전 시작 : 종료 전 종료 지연 시간을 주어 꺼지기 전에 데이터를 저장할 수 있도록 하는 옵션이다.
4) 네트워크
네트워크는 변경할 것이 없어 기본으로 사용한다.
5) 인스턴스 유형 요구 사항
스팟 인스턴스를 생성할 때 요구되는 사항을 선택할 수 있다. 속성을 지정하는 방법이 있지만 내 경우 인스턴스 유형을 선택하여 생성하고자 하였다. .
여기서 내가 실수한 부분이 기본적으로 내가 유형 추가를 안 해도 위와 같은 항목이 떠 있다. 나중에 이 유형들이 스팟 인스턴스로 생성되기 때문에 이 유형에 해당되지 않는다면 모두 삭제해주자.
6) 할당 방식
비용이 제일 중요하기에 비용 기준으로 최적화하는 옵션을 선택하였다. 본인 기준에 맞는 최적화를 선택하고 시작 버튼을 누르면 생성된다.
나는 위와 같은 오류가 뜨면서 생성이 안되었는데, 수면 옵션은 내가 선택한 인스턴스 유형에 사용할 수 없기에 위와 같이 수정하라고 떴다. 그래서 수면 옵션을 선택한 부분을 중지 옵션으로 바꿔 줬더니 잘 생성되었다.
인스턴스 할당을 위한 service quota 할당하기
내 인스턴스 유형은 딥러닝을 위한 GPU가 있는 유형이다. 그래서 이는 유형과 지역에 따라 할당량이 존재치 않는다. 할당량을 주어 스팟 인스턴스가 생성될 수 있도록 해줘야 한다.
인스턴스 유형이 g4dn이므로, 이를 할당량 주기 위해서는 Service Quotas > AWS 서비스로 들어가서 Amazon Elastic Compute Cloud (Amazon EC2)를 검색해서 들어가준다. 그리고 나서 spot instance를 검색하면 아래와 같이 나온다.
g instance이므로 해당 유형을 클릭하여 오른쪽 상단의 계정 수준에 증가 요청을 클릭한다.
원하는 할당량을 클릭하여 저장하면 aws에서 할당량을 지정해준다.
내 인스턴스는 g4dn.2xlarge이므로 사양은 다음과 같다.
- vCPU : 8개 vCPU
- 메모리 : 32GB RAM
vCPU를 기준으로 넉넉잡아 10으로 할당하면 될 것 같아서 10으로 증가 요청을 하였다.
그리고 나서 root email, 즉 aws로 가입한 이메일에 들어가보면 메일이 들어온 것을 확인할 수 있다.
url이 생성되어 있는데 여기서 어느 정도 상태인지 알 수 있다. 나는 할당량을 10으로 지원했고, 그날 밤에 승인받아서 다음날 아침에 사용할 수 있었다.
장단점 비교
aws spot instance는 저렴한 가격으로 비싼 인스턴스를 할당해서 돌릴 수 있다. 그런데 사용 중이지 않은 인스턴스를 빌려 돌리는 개념이다. 그래서 갑자기 중단될 수도 있고, 중단될 때 데이터가 날아갈 수 있음을 유의해야 한다. 그래서 볼륨을 붙여 인스턴스가 중단될 것을 대비해서 붙였다가 떼어야 한다.
on-demand instance는 계속 돌리는 인스턴스다. 그래서 온디맨드 인스턴스는 정가에 내 돈을 주고 돌리는 인스턴스라면, 스팟은 할인이 많이 들어간 인스턴스라고 말할 수 있다. 그래서 갑자기 중단되는 것이나, 따로 볼륨을 안 붙여도 된다. 다만 과금이 되므로 원할 때만 중지하고 시작해서 돌리는 식으로 해서 인스턴스를 운영해도 좋을 듯하다.
👉🏻 참고 사이트
https://codingcrews.github.io/2019/01/15/deeplearning-gpu/
https://data-engineer-tech.tistory.com/21
https://tensorflow.blog/2018/01/18/aws-스팟-인스턴스-deep-learning-ami/