AWS에서 GPU서버를 저렴하게 사용해보자 - 1

Y_Sevin·2023년 10월 18일
2
post-thumbnail

글을 시작하기 앞서 GPU가 필수적이고 최소한의 금액으로 서버를 운영하고 싶었기에 이런 아키텍처를 구현한 것이니 허점이 있을 수 밖에 없다는 사실을 미리 말하고 시작하고 싶다.. 😥😥
또한 시행착오를 중심으로 경험에 대해 글을 작성할 것이기에 배운다기보다는 구경하는 느낌으로 보면 좋을 것 같다..

hairbe 서비스를 개발하며 가장 어려웠던 부분 중 하나는 서버 아키텍처부분이였다.
제한된 금액으로 프로젝트의 모든 비용을 운용해야했기에, 서버에만 많은 비용을 할당할 수 없었고 서버비용을 최소한으로 지출할 수 있도록 서버를 구축해달라는 팀원의 요청이 지속적으로 있었다...😭😭

물론 비용을 고려해 서버를 구축하는 방법은 여러가지가 존재한다.
Lambda같은 서버리스 프레임워크나 CPU만 사용해서 AI를 실행하는 방법 등이 고려되었지만, 문제는 너무너무 느리다는 것이였다.

우리가 사용하는 diffusion AI는 고성능의 GPU를 요구한다. 특히 우리 프로젝트의 핵심은 실시간으로 AI를 활용하여 헤어스타일을 변화시키는 것이였기 때문에 더욱이 GPU서버를 구축하는 것이 필요했다.
그렇다고 banana와 같은 외부 GPU 서버리스 프레임워크를 사용하자니 AWS를 제외한 기타 서비스는 지원받을 수 없었기에 더욱 어려움이 존재했다.

초기에 서버비용을 생각하지않고 구축한 아키텍처는 정말 간단했다.

1차 구축 - 그냥 EC2🧨

Ec2에 docker를 이용해 서버를 구축하고 구축된 spring과 AI서버가 비동기로 통신하는 방식이였다. 조금 다른점이라고 한다면 FastAPI서버에 대기열을 만들어 AI 결과값이 return되면 다시 대기열에 쌓여있는 요청을 처리하는 방식으로 구축했다.

서버에 API를 한 번 보내면 GPU 사용률이 즉시 100%에 도달했고 GPU가 이미 최대 성능을 발휘하고 있기 때문에, 추가 요청이 들어오면 기존에 처리 중이던 요청의 처리속도가 저하됨..

하지만 이와 같은 방식에는 치명적인 단점이 있었다.
바로 서버비가 어마어마 하다는 것....
한번 우리가 사용한 g4dn서버의 비용을 확인해보자

0.647 * 24 * 30 = 481 달러
481 * 1300 = 625300원✨

625300.........
...
ㅎㅎ...

위와 같은 이유때문에 on demand-ec2를 사용하는 것은 불가능에 가까웠다.
때문에 AWS에서 제공하는 GPU 서버리스 프레임워크가 있는지 알아보았고 모델을 서빙하는데에 특화된 SageMaker에 대해 알게 되었다!!

2차 구축 - SageMaker🧨

2번째 방법으로 생각한 SageMaker는 머신 러닝 모델을 훈련하고 배포하는 데 사용되는 서비스이다.

비용 측면과 사용 편의성에서 SageMaker가 ec2로 서버를 구축하는 것에 비해 저렴하다고 들었기에 SageMaker로 구축하는 것을 고려했다.
하지만 이는 TCO 관점에서의 비용 효율이라는 것이다.. 예를 들어 EC2에 DB를 구축하면 RDS보다 저렴한 비용을 낼 수 있지만 관리하는데 드는 TCO는 더 높다는 말이다..

결과적으로 생각했을 때 sageMaker는 시간당 비용이 EC2보다 무려 40%나 비쌌다. 😥

https://www.reddit.com/r/aws/comments/hyr7b3/aws_sagemaker_or_ec2_for_deep_learning/?rdt=35451&onetap_auto=true&one_tap=true

그렇다면 어떻게 해야할 것인가 EC2로 서버를 구축해야하나..? 라는 고민을 하며 다시 AWS의 서비스들을 살펴보았다.

그러던 중 내 눈에 띄었던 것이 하나 존재했는데 바로 Spot 인스턴스였다.

3차 구축 (1) - ✨Spot 인스턴스✨

Spot인스턴스를 처음 본 것은 아니였다.
필자가 아는 Spot인스턴스의 용도는 보통 트래픽이 증가하여 빠르게 서버의 확장이 필요할때 예비 컴퓨팅 리소스용으로 사용하거나 배치작업을 할때 사용하는 것으로 알고있었다.

왜냐하면 Spot인스턴스는 ondemand 인스턴스에 비해 70~90%정도 저렴한 가격으로 EC2 인스턴스를 이용할 수 있게 해주는 기능이기 때문이다.

그렇다면 굳이 ondemand말고 Spot으로만 구성하면 되는 것 아닌가?라는 생각을 할 수 있다.

하지만 Spot인스턴스는 치명적인 단점을 가지고 있는데, 바로 사용 가능한 인스턴스 리소스가 부족해지면 AWS는 구동되고있는 Spot인스턴스를 종료시킨다는 것이다.
다시말해 나의 서버가 예상치못한 순간에 종료될 수 있다는 말이다.


Spot 단점 극복하기...🥴

Spot 인스턴스를 생각해낸 순간 이것을 이용해 서버를 구축해야겠다는 확신이 들었다. 때문에 예상치못한 순간에 종료되는 이 spot을 잘 컨트롤해서 우리의 AI로 서버로 활용해야만 했다.

다음 글에서는 어떻게 이 spot을 이용해 아키텍처를 구성했는지, 필자가 겪었던 시행착오를 포함한 내용을 적어보려한다.

AWS에서 GPU서버를 저렴하게 사용해보자 - 2

다시 이야기하지만..❗❗ 해당 아키텍처는 좋은 형태의 아키텍처는 아닌것 같다.
이후 나올 글까지 모두 보고나면, 관리해야하는 영역이 넓어질뿐더러 고가용성측면에서도 좋아보이지 않는 다는 사실을 알 수 있을 것이다.
하지만!! 본인이 학생이라던가 필자와 같은 백수이기에 어쩔 수 없는 상황이라면 한번쯤 사용해도 나쁘지 않을 것같다.

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

0개의 댓글