DevOps를 위한 LLM 서빙 도입 가이드
Amazon EKS + vLLM + RayServe를 활용한 프로덕션 레벨 LLM 추론 인프라 구축 | 1시간 세션
총 60min 세션
| 프레임워크 | tok/s | 강점 |
|---|---|---|
| vLLM ⭐ 권장 | ~12,500 | 범용, 최대 HW 지원 |
| SGLang | ~16,200 | RAG, Agent 최적화 |
| TGI | ~11,000 | HuggingFace 통합 |
| TensorRT-LLM | ~18,000 | NVIDIA 전용 최고 성능 |
github.com/awslabs/ai-on-eks
— AWS Solution Architects가 관리하는 프로덕션 레퍼런스 (Apache 2.0)
Inference-Ready Cluster 구성, GPU 스택, Karpenter 동작 원리
| 배포 패턴 | 적합 시나리오 | 복잡도 | 스케일링 | GPU |
|---|---|---|---|---|
| Ray-vLLM ⭐ 권장 | 프로덕션, 자동 스케일링 | 중간 | RayServe 내장 | 1+ |
| vLLM Standalone | PoC, 빠른 시작 | 낮음 | HPA | 1+ |
| Triton-vLLM | 멀티모델, A/B 테스트 | 높음 | HPA + Custom | 1+/모델 |
| AIBrix-vLLM | 관리형, 라우팅 최적화 | 낮음 | 내장 옵티마이저 | 1+ |
| LWS-vLLM | 초대형 모델 (405B+) | 높음 | 멀티노드 | 4+ 노드 |
| Dynamo-vLLM | KV-aware 라우팅 | 매우 높음 | SLA 기반 | 2+ |
| 인스턴스 | GPU | VRAM | $/hr | 적합 모델 | 비고 |
|---|---|---|---|---|---|
| g5.xlarge | 1× A10G | 24 GB | ~$1.01 | 7B (Mistral, Llama-3.2) | 가장 경제적 |
| g6.xlarge | 1× L4 | 24 GB | ~$0.80 | 7B | g5 대비 저렴 |
| g5.12xlarge | 4× A10G | 96 GB | ~$5.67 | 13B~34B | TP=4 분산 |
| g6e.12xlarge | 4× L40S | 192 GB | ~$8.49 | 34B~70B | 차세대 GPU |
| p4d.24xlarge | 8× A100 | 320 GB | ~$32.77 | 70B | 고성능 |
| p5.48xlarge | 8× H100 | 640 GB | ~$98.32 | 405B+ | 최대 성능 |
Helm Chart, RayService 매니페스트, 파라미터 튜닝, 모델별 최적 설정
| 파라미터 | 기본값 | 권장 범위 | 설명 | 영향 |
|---|---|---|---|---|
| GPU_MEMORY_UTILIZATION | 0.9 | 0.85~0.95 | vLLM 엔진 전체가 사용할 VRAM 비율 (가중치+KV Cache+Activation) | 높을수록 동시처리↑, OOM↑ |
| MAX_MODEL_LEN | 8192 | 2048~32768 | 최대 입출력 시퀀스 길이 | 길수록 메모리↑, 유연성↑ |
| TENSOR_PARALLEL_SIZE | 1 | 1/2/4/8 | 모델을 분산할 GPU 수 | GPU 수에 맞게 설정 |
| MAX_NUM_SEQ | 256 | 32~256 | 동시 처리 시퀀스 수 | 높을수록 처리량↑, 레이턴시↑ |
| dtype | auto | bfloat16 | 추론 정밀도 | bfloat16 권장 (H100+) |
--enable-prefix-caching 추가
terraform apply -var-file=blueprint.tfvars
helm repo add ai-on-eks https://awslabs.github.io/ai-on-eks-charts/
helm install deepseek ai-on-eks/inference-charts --values values-deepseek-r1.yaml
kubectl get rayservice -n default && curl http://localhost:8000/v1/chat/completions
| 모델 | 크기 | 권장 인스턴스 | TP | GPU MEM | MAX LEN | 특이사항 |
|---|---|---|---|---|---|---|
| DeepSeek-R1-8B | 8B | g5.xlarge (1×A10G) | 1 | 0.90 | 32768 | CoT 추론, 긴 출력 필수 |
| Llama-3.1-8B | 8B | g5.xlarge (1×A10G) | 1 | 0.90 | 8192 | 기본 채팅, 범용 |
| Llama-3.1-70B | 70B | p4d.24xlarge (8×A100) | 8 | 0.90 | 8192 | TP=8 필수, 고성능 |
| Qwen3-7B | 7B | g5.xlarge (1×A10G) | 1 | 0.90 | 32768 | Thinking mode 지원 |
| Mistral-7B | 7B | g5.xlarge (1×A10G) | 1 | 0.90 | 8192 | Function Calling 강점 |
| DeepSeek-R1 671B | 671B | LWS: 2×p5.48xlarge | 16 | 0.85 | 32768 | 멀티노드 필수 |
모니터링, 비용 최적화, 장애 대응, OpenAI 마이그레이션
vllm:time_to_first_token_seconds
vllm:time_per_output_token_seconds
vllm:request_queue_time_seconds
vllm:num_preemptions_total
| 비교 항목 | OpenAI GPT-4o | Claude 3.5 Sonnet | vLLM Llama-3 70B | vLLM Llama-3 8B |
|---|---|---|---|---|
| 입력 토큰 (1M) | $5.00 | $3.00 | ~$0.35 | ~$0.07 |
| 출력 토큰 (1M) | $15.00 | $15.00 | ~$0.35 | ~$0.07 |
| 일 1억 토큰 | ~$500/day | ~$400/day | ~$84/day | ~$17/day |
| 월 비용 | ~$15,000 | ~$12,000 | ~$2,520 | ~$510 |
| 월 절감액 (vs GPT-4o) | — | $3,000 | ~$12,480 | ~$14,490 |
| 증상 | 원인 | 진단 | 해결 |
|---|---|---|---|
| Pod OOMKilled | GPU VRAM 초과 | kubectl describe pod | GPU_MEM_UTIL 0.9→0.85 MAX_LEN 축소 |
| TTFT > 10초 | 요청 큐 과부하 | vllm:request_queue_time | max_replicas 증가 target_requests 낮춤 |
| Preemptions 급증 | MAX_MODEL_LEN 실제 사용 초과 | vllm:num_preemptions | MAX_LEN 실측에 맞춤 MAX_NUM_SEQ 줄임 |
| GPU 노드 미생성 | EC2 가용성 부족 | kubectl get nodeclaim | NodePool에 인스턴스 타입 추가 Multi-AZ 확장 |
| ImagePullBackOff | ECR 권한 없음 | kubectl describe pod | IRSA 역할 권한 확인 ECR 이미지 존재 확인 |
| 모델 로딩 실패 | HF Token 없음 | kubectl logs <pod> | K8s Secret 확인 모델 ID 오타 확인 |
| RayService Unhealthy | Worker CrashLoop | kubectl get rayservice | ray status 확인 Head Pod logs 분석 |
github.com/awslabs/ai-on-eks
genai.eksworkshop.com
github.com/awslabs/ai-on-eks-charts
vllm-dashboard.json (ai-on-eks 레포 포함)
github.com/awslabs/ai-ml-observability-reference-architecture
감사합니다
github.com/awslabs/ai-on-eks | genai.eksworkshop.com