PagedAttention: 메모리 효율적인 어텐션 메커니즘으로, 긴 시퀀스를 처리할 때 메모리 사용량을 최적화합니다.
연속 배치 처리: 요청을 동적으로 배치 처리하여 처리량을 향상시킵니다.
분산 추론: 여러 GPU와 노드에 걸쳐 모델을 분산하여 대규모 모델을 처리할 수 있습니다.
양자화: INT8/INT4 양자화를 지원하여 메모리 사용량을 줄이고 처리량을 향상시킵니다.
OpenAI 호환 API: OpenAI API와 호환되는 인터페이스를 제공합니다.
시스템 요구 사항
vLLM을 EKS에 배포하기 위한 시스템 요구 사항은 다음과 같습니다:
하드웨어:
NVIDIA GPU(Volta, Turing, Ampere, Hopper 아키텍처)
최소 GPU 메모리: 모델 크기에 따라 다름
7B 모델: 최소 16GB GPU 메모리
13B 모델: 최소 24GB GPU 메모리
70B 모델: 최소 80GB GPU 메모리(또는 여러 GPU에 분산)
소프트웨어:
CUDA 11.8 이상
Python 3.8 이상
PyTorch 2.0.0 이상
EKS 노드 유형:
p4d.24xlarge: 8x NVIDIA A100 GPU, 각 40GB 또는 80GB
p3.16xlarge: 8x NVIDIA V100 GPU, 각 16GB
g5.12xlarge: 4x NVIDIA A10G GPU, 각 24GB
g4dn.12xlarge: 4x NVIDIA T4 GPU, 각 16GB
EKS 인프라 구성
스토리지 구성
vLLM은 대규모 모델 가중치를 로드해야 하므로 고성능 스토리지가 필요합니다:
FSx for Lustre 설정
FSx for Lustre는 고성능 병렬 파일 시스템으로, 대규모 모델 가중치를 빠르게 로드하는 데 적합합니다:
S3에서 모델 다운로드
Hugging Face 모델을 S3에 저장하고 FSx for Lustre로 다운로드하는 작업:
vLLM 배포
배포 아키텍처
다음 다이어그램은 EKS에서 vLLM을 배포하는 두 가지 주요 아키텍처를 보여줍니다:
단일 노드 배포
단일 GPU 또는 단일 노드의 여러 GPU에서 vLLM을 실행하는 배포:
다중 노드 분산 배포
여러 노드에 걸쳐 대규모 모델을 분산 배포하는 방법:
성능 최적화
GPU 메모리 최적화
vLLM의 GPU 메모리 사용량을 최적화하는 방법:
GPU 메모리 사용률 조정:
양자화 적용:
스왑 공간 활용:
처리량 최적화
vLLM의 처리량을 최적화하는 방법:
배치 크기 조정:
KV 캐시 최적화:
텐서 병렬 처리 조정:
네트워크 최적화
분산 배포에서 네트워크 성능을 최적화하는 방법:
EFA(Elastic Fabric Adapter) 활용:
NCCL 설정 최적화:
노드 배치 최적화:
모니터링 및 로깅
Prometheus 메트릭
vLLM 서버에서 Prometheus 메트릭을 수집하는 방법:
로그 수집
vLLM 서버의 로그를 CloudWatch로 수집하는 방법:
오토스케일링
HPA(Horizontal Pod Autoscaler)
요청량에 따라 vLLM 서버를 자동으로 스케일링하는 방법:
Karpenter를 사용한 노드 오토스케일링
GPU 노드를 자동으로 프로비저닝하는 방법:
보안 구성
네트워크 정책
vLLM 서버에 대한 네트워크 액세스를 제한하는 방법:
보안 컨텍스트
컨테이너의 보안 컨텍스트를 구성하는 방법:
클라이언트 통합
API 게이트웨이
vLLM 서버 앞에 API 게이트웨이를 배포하는 방법:
클라이언트 예제
Python 클라이언트를 사용하여 vLLM 서버에 요청을 보내는 방법:
모범 사례
리소스 관리
메모리 오버헤드 고려:
GPU 메모리 외에도 CPU 메모리를 충분히 할당합니다.
모델 크기의 약 2배 정도의 CPU 메모리를 할당하는 것이 좋습니다.
CPU 코어 할당:
GPU당 최소 4개의 CPU 코어를 할당합니다.
텐서 병렬 처리를 사용하는 경우 더 많은 CPU 코어가 필요할 수 있습니다.
노드 선택:
모델 크기에 맞는 적절한 노드 유형을 선택합니다.
메모리 대역폭이 높은 노드를 선택합니다.
고가용성
다중 가용 영역 배포:
여러 가용 영역에 걸쳐 vLLM 서버를 배포합니다.
각 가용 영역에 충분한 용량을 확보합니다.
로드 밸런싱:
여러 vLLM 서버 인스턴스 간에 요청을 분산합니다.
세션 어피니티를 구성하여 동일한 사용자의 요청이 동일한 서버로 라우팅되도록 합니다.
장애 복구:
상태 확인을 구성하여 장애가 발생한 서버를 감지합니다.
자동 복구 메커니즘을 구현합니다.
비용 최적화
Spot 인스턴스 활용:
비용을 절감하기 위해 Spot 인스턴스를 사용합니다.
중단 허용 워크로드에 적합합니다.
모델 양자화:
INT8 또는 INT4 양자화를 적용하여 메모리 사용량을 줄입니다.
정확도와 성능 간의 균형을 고려합니다.
오토스케일링:
요청량에 따라 서버를 자동으로 스케일링합니다.
유휴 시간에는 서버를 축소하여 비용을 절감합니다.
결론
EKS에서 vLLM을 배포하는 것은 대규모 언어 모델을 효율적으로 제공하기 위한 강력한 방법입니다. 적절한 하드웨어 선택, 스토리지 구성, 성능 최적화, 모니터링 및 로깅, 오토스케일링, 보안 구성 등을 통해 안정적이고 확장 가능한 LLM 추론 서비스를 구축할 수 있습니다. 또한, 모범 사례를 따르면 리소스 관리, 고가용성, 비용 최적화 측면에서 더 나은 결과를 얻을 수 있습니다.
참고 자료
AI on EKS - AWS에서 제공하는 EKS 기반 AI/ML 워크로드 배포 가이드 및 예제