AI service를 위한 현실적인 접근 방법 (1): Memory Capacity Limitation
NLP 모델이 커지면서 GPU의 Memory Capacity 제한이 학습 뿐만이 아니라 추론에서도 문제가 되고 있다. 현실적으로 이 문제를 해결하는 방법론에 대해서 알아보기로 하자.
**Massive AI serving의 이해를 돕기 위해 내가 Startup을 창업하였다고 가정한다. 그리고 그동안 펀딩 받았던 자금도 부족하여 최대한 절약해야 하는 상황임을 가정한다.**
연재 순서는 다음과 같다.
- AI service를 위한 현실적인 접근 방법 (1): Memory Capacity Limitation
- AI service를 위한 현실적인 접근 방법 (2): Model Lightweight
- AI service를 위한 현실적인 접근 방법 (3): Massive AI Inference
나는 챗봇 서비스를 사업화하기로 하였으며 페이스북이 공개한 BlenderBot을 기반으로 베타 서비스를 개발하였다. (이때 사용된 BlenderBot은 최신 2.0 버전이 아닌 1.0 버전) BlenderBot은 파라미터의 개수에 따라 다른 5 종류의 모델이 있다.
- 90M(small)
- 400M(medium)
- 1B(large)
- 3B(xlarge)
- 9B(xxlarge)
테스트 결과, 그 중에서 가장 만족스러운 품질을 보여준 9B로 챗봇 베타 서비스를 개발하였다. BlenderBot-9B와 같은 챗봇은 순수하게 모델만 17.6GB이고 실제 추론을 위해 Input Vector, Activation Memory 등의 용량을 고려하며 실제 추론을 위해 필요한 메모리 용량은 22~23GB이다.
BlenderBot-9B 기반으로 만든 챗봇을 빠르게 서비스하기 위해서 클라우드를 이용하기로 하였다. 가장 먼저 구글 클라우드의 GPU 인스턴스 가격을 알아보니 다음과 같다.
23GB 이상 메모리 용량을 가진 GPU를 찾아보니 A100이 유일하다. 하지만 한달 사용료만 약 487만원이다. 1년 약정으로 사용해도 1865만원. 오히려 A100 GPU 서버를 구입하는 것이 합리적으로 보일 정도이다. 하지만 몇 달내로 투자금이 바닥이 날 수 있어 A100 GPU는 꿈도 꿀 수 없다.
그렇다고 다른 GPU를 사용하자니 A100에 비해 가격은 저렴하지만 메모리 용량이 모두 8GB~16GB로 Single GPU로 23GB 모델을 실행시킬 수 없다. 일단 자금 사정을 고려하여 한달 사용료가 29만원인 가장 저렴한 T4를 사용하기로 결정하였다.
그렇다며 내가 취할 수 있는 방법은 2 가지 있다.
1.분산 추론(Distributed Inference)
23GB 모델을 2개로 분할(12.5GB + 12.5GB)하여 2개의 T4 GPU로 서비스하는 방법
2.모델 경량화(Model Lightweight)
모델을 T4 GPU의 16GB의 메모리 용량에 맞게 모델을 줄이는 방법
몇 달 파일럿으로 베타 서비스하는 것이기 때문에 분산 추론보다는 모델 경량화를 통해 서비스를 진행하기로 결정했다.
베타 서비스가 성공하면 모델의 크기를 더 확장하여 서비스의 품질을 높일 생각이며 그때는 Multi-GPU를 이용한 분산 추론으로 서비스할 계획이다.
베타 서비스 방향을 결정하였으니 챗봇 모델 경량화 방법에 대해서 스터디하기로 하자. (To Be Continued…)
레퍼런스
[1] [AI 모델 탐험기] #2 챗봇이 뭐지? NLP 기술을 활용한 Open chat
[2] GCP: GPU 가격 책정