[CloudNeta] EKS 워크샵 스터디 (9) - EKS 위 AI/ML 워크로드 Part 2 - GenAI on EKS로 추론 서빙 운영하기

이번 게시글에서는 EKS 워크샵 스터디 제 9주차 내용을 작성합니다.

이 글은 3부로 나누어집니다.

  1. 9주차 - EKS 위 AI/ML 워크로드 Part 1 - EKSworkshop AI/ML로 Neuron 기반 다지기
  2. 9주차 - EKS 위 AI/ML 워크로드 Part 2 - GenAI on EKS로 추론 서빙 운영하기 (현재 보고 계신 글)
  3. 9주차 - EKS 위 AI/ML 워크로드 Part 3 - Agentic AI Platform으로 멀티 에이전트 플랫폼 구축하기

코드 살펴보기

들어가며

이번 편에서 다루는 워크샵은 다음과 같습니다.

워크샵 페이지(catalog.workshops.aws/genai-on-eks/ko-KR)의 워크샵 내용은 실제 코드와 청사진은 awslabs/ai-on-eks 공개 리포지터리의 infra/workshops/genai-on-eks 디렉터리를 참고하여 쫓아가면 됩니다. 여기서는 공식 docs 사이트를 기준으로 정리했습니다.

Part 1에서 EKSworkshop AI/ML 트랙이 AWS Neuron 가속기로 가는 흐름을 따라갔다면, 이번 편은 NVIDIA GPU를 전제로 한 GenAI 추론 서빙 전 과정을 다룹니다. 동시에 Part 1과 가장 크게 달라지는 운영 포인트가 둘 있습니다. 노드 프로비저닝이 수동 Karpenter NodePool이 아니라 EKS Auto Mode로 추상화된다는 점, 그리고 추론이 vLLM 단독이 아니라 Ray Serve로 감싸진 분산 서빙이라는 점입니다.

GenAI on EKS 워크샵 개요

워크샵의 실제 구성을 infra/workshops/genai-on-eks/README.md 기준으로 정리하면 다음과 같습니다.

항목
클러스터 이름 genai-workshop
인프라 베이스 EKS Auto Mode
IaC Terraform (install.shterraform init/apply를 묶어 실행)
배포 소요시간 약 20~25분
추론 엔진 vLLM + Ray Serve
모델 Ministral-3-8B-Instruct-2512
관측 스택 Amazon Managed Prometheus + Grafana + kube-prometheus-stack
권장 리전 (예시) us-east-2

워크샵이 인트로에서 보여주는 초기 아키텍처는 다음과 같습니다. 위 표의 구성요소들이 어떻게 연결되는지 한 장으로 정리됩니다.

GenAI on EKS 워크샵 초기 아키텍처

사전 도구 버전

README가 명시한 도구 요구는 다음과 같습니다.

도구 최소 버전
AWS CLI ≥ 2.32.8
Terraform ≥ 1.3.2
kubectl 최신
Docker 최신

리전·인스턴스 쿼터는 README에 명시되어 있지 않지만, GPU 노드를 띄우는 워크샵 특성상 g5/g6 패밀리 쿼터 사전 신청은 사실상 필수입니다. Auto Mode가 노드 그룹을 직접 잡지 않더라도 EC2 쿼터는 같은 한도를 따라가기 때문입니다.

인프라: EKS Auto Mode 위에 Terraform으로 올리기

워크샵 폴더는 다음과 같이 구성되어 있습니다.

infra/workshops/genai-on-eks/
├── README.md
├── genai-workshop-architecture.png
├── install.sh
└── terraform/
    ├── blueprint.tfvars
    ├── grafana-dashboards/
    ├── grafana.tf
    ├── pull.tf
    └── s3-workshop.tf

install.sh는 ai-on-eks 리포의 베이스 Terraform 모듈을 terraform/_LOCAL/로 복사한 뒤, 워크샵 전용 설정(blueprint.tfvars, grafana.tf, pull.tf, s3-workshop.tf)을 얹어 terraform apply를 실행합니다. 즉, 워크샵은 베이스 인프라 모듈을 재활용하면서 GenAI 특화 구성을 오버레이로 얹는 구조입니다. 각 파일이 정확히 무엇을 배포하는지, 베이스 install.sh가 어떤 순서로 모듈을 적용하는지에 대한 상세는 코드 살펴보기 문서에서 별도로 정리했습니다.

Auto Mode가 GPU 워크로드에서 의미하는 것

Part 1의 EKSworkshop AI/ML 트랙이 neuron·aiml 같은 Karpenter NodePool을 직접 선언했던 것과 정반대로, 이번 워크샵은 Auto Mode를 켜고 노드 정의를 EKS에 위임합니다. 운영 관점에서 변화는 두 가지로 정리됩니다.

구분 수동 Karpenter NodePool (Part 1) EKS Auto Mode (Part 2)
노드 정의 NodePool/EC2NodeClass 직접 선언 EKS가 내장 NodePool로 제공
가속기 인스턴스 선택 requirement에 인스턴스 패밀리 박음 Pod의 nodeSelector·toleration·resource 요청만으로 유도
비용 가드레일 limits.aws.amazon.com/neuron 같은 NodePool limit Auto Mode 정책 + EC2 쿼터
운영 부담 가속기 변경 시 NodePool 갱신 필요 정의 변경 없이 Pod 스펙만 조정

Auto Mode는 단순화 효과가 크지만, "어떤 GPU 인스턴스가 떴는지 사후에 확인해야 한다" 는 비대칭이 생깁니다. NodePool requirement처럼 사전 제약이 명확하지 않으므로 비용 알람과 인스턴스 사용 리포트가 함께 굴러가야 합니다.

추론: vLLM on Ray Serve

추론 스택은 단순한 vLLM 단독 배포가 아니라 Ray Serve로 감싼 분산 서빙 구조입니다.

왜 vLLM 단독이 아니라 Ray Serve인가

vLLM은 단일 프로세스 안에서 PagedAttention·KV cache·연속 배칭으로 처리량을 극대화하는 추론 엔진이지만, 그 자체로는 다음을 직접 제공하지 않습니다.

Ray Serve는 이 위에 deployment/replica 추상과 라우터를 얹어 위 항목들을 메꿉니다. 추론 요청은 Ray Serve 라우터에 도달하고, 라우터가 vLLM 워커 복제본 중 하나로 요청을 흘려보내는 구조입니다.

모델: Ministral-3-8B-Instruct-2512

워크샵은 Mistral AI의 Ministral 계열 8B 인스트럭트 모델을 사용합니다. 8B 규모는 단일 g5.2xlarge/g6.xlarge 수준의 A10G·L4 GPU 한 장에서도 동작 가능한 크기라, 워크샵 데모용으로는 비용·성능 균형이 잘 잡힌 선택입니다.

모델 다운로드는 install.sh가 아니라 클러스터 프로비저닝 이후 워크로드 단계에서 진행됩니다. Terraform apply로 클러스터·관측 스택이 다 올라온 다음, vLLM Pod가 init 단계에서 Hugging Face로부터 가중치를 받아오는 흐름입니다. 이 분리는 의미가 큽니다. 인프라 코드가 모델 라이프사이클과 결합되지 않아야 모델 교체 시 Terraform을 다시 돌리는 일이 없습니다.

인터페이스: OpenAI 호환

Ray Serve로 감쌌어도 외부에 노출되는 인터페이스는 vLLM이 제공하는 OpenAI 호환 엔드포인트입니다. 클라이언트 입장에서 openai SDK를 그대로 쓰고 base_url만 워크샵 서비스로 바꾸면 됩니다. 이 점은 Part 1의 vLLM on Neuron과도 일치하며, vLLM 인터페이스의 가속기 무관성이 다시 확인되는 지점입니다.

관측: AMP + Grafana + kube-prometheus-stack

워크샵의 관측 스택은 세 층으로 분리되어 있습니다.

역할
kube-prometheus-stack 클러스터·노드·Pod 표준 메트릭 수집 (Prometheus Operator)
Amazon Managed Prometheus (AMP) 수집된 메트릭의 장기 저장과 글로벌 쿼리
Grafana 사전 구성된 GenAI 대시보드로 vLLM·Ray·GPU 메트릭 시각화

grafana-dashboards/ 폴더에 워크샵 전용 대시보드 JSON이 미리 들어 있어, install.sh 적용 후 별도 작업 없이 Grafana에 바로 떠 있는 상태로 시작합니다.

AMP를 쓰는 이유

워크샵은 굳이 셀프호스트 Prometheus를 영구 스토리지까지 확장하지 않고 AMP로 원격 쓰기를 합니다. 운영 관점에서 AMP는 다음 두 가지를 가장 크게 해결해 줍니다.

GPU 메트릭

GPU 관측은 일반적으로 NVIDIA DCGM Exporter를 통해 Prometheus가 GPU 사용률·메모리·온도·전력 메트릭을 수집하는 경로를 따릅니다. 워크샵의 grafana-dashboards/에 GPU 패널이 포함되어 있다면 이 경로가 활성화되어 있다는 신호입니다. 실제 도입 시점에는 vLLM 자체 메트릭(요청 큐 길이, 토큰 처리량)과 DCGM 메트릭을 한 대시보드에 묶어두는 것이 "GPU가 한가한데 큐가 길다" 같은 패턴을 빠르게 잡는 데 효과적입니다.

확장 청사진: ai-on-eks 리포가 함께 들고 있는 것

워크샵 외에도 awslabs/ai-on-eks 리포는 운영 환경에서 골라 쓸 수 있는 청사진을 다수 보유합니다. 한 줄 요약과 함께 도입 시점을 정리하면 다음과 같습니다.

청사진 한 줄 요약 도입 시점
nvidia-nim NVIDIA Inference Microservices 컨테이너 기반 추론 엔터프라이즈 NIM 카탈로그를 직접 쓰는 경우
nvidia-triton-server Triton 다중 모델 서빙 모델 다양성이 크고 표준 서버가 필요할 때
nvidia-dynamo NVIDIA Dynamo 분산 LLM 서빙 대규모 분산 추론 (디스에그리게이트 prefill/decode)
aibrix vLLM 기반 OSS 분산 추론 컨트롤 플레인 OSS로 분산 LLM 서빙을 잡고 싶을 때
envoy-ai-gateway AI 트래픽 전용 게이트웨이 (인증·라우팅·rate limit) 다중 모델·다중 사용자를 외부에 노출할 때
jark-stack JupyterHub + Argo + Ray + Kubeflow 종합 ML 플랫폼 모델 연구·학습 파이프라인까지 묶을 때
trainium-inferentia Neuron 기반 추론 청사진 Part 1의 흐름을 운영 환경으로 확장할 때

GenAI on EKS 워크샵 자체는 vLLM + Ray Serve를 깊게 보여주지만, 실 운영 환경에서는 트래픽 패턴(단일 모델 vs 다중 모델, 분산 vs 단일 노드)에 따라 위 청사진 중 하나를 선택하게 됩니다.

워크샵을 따라가며 느낀 포인트

마치며

이번 편에서는 GenAI on EKS 워크샵을 따라가며 EKS 위 GPU 기반 LLM 추론 서빙을 정리했습니다. EKS Auto Mode 위에 vLLM·Ray Serve·AMP/Grafana를 얹는 한 흐름이 그 골격입니다.

Part 3: Agentic AI Platform으로 멀티 에이전트 플랫폼 구축하기에서는 이번 편에서 만든 추론 엔드포인트가 단순 API 소비 대상이 아니라, 에이전트가 호출하는 모델 백엔드로 들어가는 한 단계 위 구조를 다룹니다.