brunch

You can make anything
by writing

C.S.Lewis

by 무명 Mar 31. 2021

[AWS] Graviton2 EC2로 BERT 돌리기?

경량의 ec2 cpu 인스턴스로 BERT서빙서버를돌리려면?

[발단]

우연히 클럽하우스에서 AWS의 윤석찬 님이 진행하시는 방에 들어갔습니다. 

ARM 기반, Graviton2 프로세서가 들어간 ec2 인스턴스들에 대해서 소개해주셨는데요. 내용 중에 BERT를 돌리는데 퍼포먼스가 좋다는 언급이 잠깐 있었습니다. 


저는 ec2 t2.medium을 이용해서 bert 서빙서버를 실서비스에 적용하고 있는지라 관심이 갔고 좀 찾아봤는데요. 석찬님과 질답 하고 찾아본 내용을 간단하게 정리해볼까 합니다. 


[graviton ec2 인스턴스 정보들]

방이 열린 배경은 EC2 T4g 인스턴스 소개 및 홍보였던 것 같고요. 상세한 내용은 아래 링크와 같습니다.

https://aws.amazon.com/ko/blogs/korea/amazon-ec2-t4g-instance-seoul-region/


graviton2 프로세서가 들어간 인스턴스들은 이런 것들이 출시되었었습니다. 


2020년 링크들인데요. 상세한 내용을 살펴보실 수 있습니다. 

https://aws.amazon.com/ko/blogs/korea/new-m6g-ec2-instances-powered-by-arm-based-aws-graviton2/

https://aws.amazon.com/ko/blogs/aws/new-m6g-ec2-instances-powered-by-arm-based-aws-graviton2/

https://aws.amazon.com/ko/about-aws/whats-new/2020/07/announcing-new-amazon-ec2-instances-powered-aws-graviton2-processors/

https://aws.amazon.com/ko/blogs/korea/coming-soon-graviton2-powered-general-purpose-compute-optimized-memory-optimized-ec2-instances/


BERT inference에 있어서 

M6g 인스턴스가 M5보다 25% 퍼포먼스가 좋다고 합니다. 

https://www.forbes.com/sites/moorinsights/2019/12/03/aws-goes-all-in-on-arm-based-graviton2-processors-with-ec2-6th-gen-instances/?sh=4f8077f42c89

34페이지에도 나와있네요. 

https://d1.awsstatic.com/events/reinvent/2019/REPEAT_1_Deep_dive_on_Arm-based_EC2_instances_powered_by_AWS_Graviton_CMP322-R1.pdf



[우리의 케이스와 고민들]

그런데 저희는 GPU인스턴스, M, C 타입 인스턴스를 쓰기에는 비용이 부담되었고, 그 정도의 퍼포먼스는 필요 없는 상황이었습니다. t2.medium으로 놀랍게도(?) 잘 돌리고 있습니다. (메모리 때문에 micro에서 medium으로 변경했습니다.) 많은 요청양이 있는 것도 아니고, 아주 특정적인 b2b 검색 서비스 중에서도 일부 로직에 사용되거든요. 쿼리 시 cpu 사용률도 1%가 넘어가지 않고요. 그래서 고민한 지점은 graviton2 인스턴스 중 가장 저렴한 t4g를 쓰면 어떨까? 였습니다. 



https://aws.amazon.com/ko/blogs/korea/new-t4g-instances-burstable-performance-powered-by-aws-graviton2/


[전문가분들의 조언]

AWS에 계시는 분들과 대화했을 때, 또 공식적인 문의로 컨설팅을 받을 때 공통으로 듣는 이야기는

t2는 너무 옛날 프로세서/인스턴스고 t3를 쓰는 걸 추천한다. 가성비가 월등하다-였습니다. 그래서 인스턴스를 t3로 가느냐, t4g로 가느냐가 문제였습니다. 


석찬님께서는, t3보다는 t3a가 좋다, t시리즈는 m이랑 사실 같은데 cpu 버스팅이 다른 점이라고 하시더군요. 어차피 사용량이 많지 않기 때문에 버스팅-크레딧소진이나 이 때문에 발생하는 서버 장애를 고민하진 않아도 되었습니다. (t3a 솔깃)


[인스턴스 비교분석]

그래서 t3, t3a, t4g를 비교해봐야겠나 싶어서 자료를 찾아봤는데요. 

https://aws.amazon.com/ko/about-aws/whats-new/2019/04/amazon-ec2-t3a-instances-are-now-generally-available/

https://aws.amazon.com/ko/ec2/faqs/

Q: Amazon EC2 T4g 인스턴스란 무엇인가요?

Amazon EC2 T4g 인스턴스는 Arm 기반 AWS Graviton2 프로세서로 구동되는 범용 버스트 가능 인스턴스의 차세대 버전입니다. T4g 인스턴스는 T3 인스턴스보다 최고 40% 향상된 가격 대비 성능을 제공합니다. 이러한 인스턴스는 전용 하드와 Nitro 하이퍼바이저의 조합인 AWS Nitro System을 기반으로 구축됩니다.

Q: T4g 인스턴스에 가장 적합한 사용 사례는 무엇인가요?

T4g 인스턴스는 마이크로 서비스, 지연 시간이 짧은 대화식 애플리케이션, 중소형 데이터베이스, 가상 데스크톱, 개발 환경, 코드 리포지토리 및 비즈니스 크리티컬 애플리케이션 같은 다양한 버스트 가능 범용 워크로드를 위해 T3 인스턴스보다 최대 40% 향상된 가격 대비 성능을 제공합니다. 오픈 소스 소프트웨어에서 구축된 애플리케이션을 T 인스턴스 패밀리에 배포하는 고객에게 T4g 인스턴스는 인스턴스 패밀리 내에서 최상의 가격 대비 성능을 실현할 수 있는 매력적인 옵션입니다. 또한 Arm 개발자는 네이티브 Arm 하드웨어에서 바로 애플리케이션을 구축할 수 있습니다.


T4g가 T3보다 40% 정도의 향상된 가성비를 제공한다고 하고요. 


https://www.learnaws.org/2020/12/19/t3-t3a-t4g/

이 자료의 결론에 의하면 

t4g가 t3, t3a보다 가성비 좋다고 하네요. (t4g 솔깃)


[결론..?]

물론 t4g에서 bert inference퍼포먼스에 대해 벤치마킹해놓은 자료는 못 찾았습니다만.. 일단 cpu 퍼포먼스로 가성비가 월등하다고 하니 오래된 t2를 유지할 이유는 딱히 없겠네요. 시간이 되면 t3, t3a, t4g bert 서빙서버를 만들어놓고 동일 쿼리에 대한 응답속도를 비교해봐야겠습니다. 


여하튼 결론은.. t4g가 좋다! 입니다. 



[기타]

gravition2에 대한 더 자세한 내용은 링크를 참조해주세요. 30분부터 시작이네요. 

http://blog.creation.net/channy-cloud-clinic-ep26?fbclid=IwAR0Auj1na29zXLGP1SeKy4YQiySfnN8ZOYET-VyPjWPR7KHuAM8mS5THNp4


이하는 제가 BERT 서빙서버를 만들기 위해서 삽질하고 고민한 내용들입니다. 지금은 이 서빙모델을 10여개가 넘는 검색 api에서 사용하고 있습니다. 검색 속도와 결과도 만족스럽고요. 저는 의도적으로 브런치에 남을 위한, 타인이 읽기 편한 글을 쓰지 않아서 보기는 불편하실 수 있습니다. 관련 테스크를 진행하고 계시는 분들은 참고만 해주세요. 

https://brunch.co.kr/@ueber/223

거의 모든 내용들을 다 테스트해봤습니다.. 눈물의 삽질기는 상세하게 적지 않았는데요. 결국 "bert as service"를 선택했습니다. 


https://brunch.co.kr/@ueber/222

https://brunch.co.kr/@ueber/230

https://brunch.co.kr/@ueber/251


매거진의 이전글 통계공부 자료 정리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari