1. 프로젝트 개요 및 제목
- 프로젝트명: B2B 상용 서비스를 위한 고정 자원 기반 고밀도 LLM 랜딩존(Landing Zone) 구축 프로젝트
- 프로젝트 성격: B2B 고객사의 제한된 하드웨어 예산(고정 리소스) 내에서, 상용 서비스 등급의 자원 유연성과 99.99% 고가용성을 보장하기 위한 구축 및 검증 프로젝트
2. Part 1. 시나리오 및 운영 정책
A. 네트워크 대역 정의 (자원 격리 및 외부 노출 영역 분리)
고정된 단일 물리 GPU 서버 내에 독립된 가상화 슬롯 및 네트워크 프리픽스를 매핑하여 테넌트 간 간섭을 원천 차단합니다.
- 외부/Ingress 영역 (외부 유저 진입망): 10.100.0.0/16
- 상용 서비스 엔드포인트 및 외부 API 요청이 진입하는 대역입니다.
- 인프라 관리 및 제어 영역 (Control Plane): 10.200.0.0/16
- Kubernetes 마스터 노드, KEDA, Prometheus, API 게이트웨이 등의 제어 컴포넌트가 상주합니다.
- LLM 데이터 영역 (Data Plane - 가상 GPU 슬롯): 10.244.0.0/16 (Pod CIDR)
- 슬롯 1 (Active 인프라 대역): 10.244.1.0/24 — 실시간 유저 트래픽 처리를 위한 메인 vLLM Pod가 점유합니다.
- 슬롯 2 (Standby/Backup 및 스왑 대역): 10.244.2.0/24 — 평시에는 Pause Pod(더미)가 자원을 선점하며, 스파이크 트래픽 발생 시 고속 확장용 백업 vLLM Pod가 점유합니다.
- 스토리지 캐시 영역 (Storage Fabric): 172.16.0.0/24
- MinIO(S3 호환) 오브젝트 스토리지 및 JuiceFS 고속 가속 캐시 파이프라인 전용 대역입니다.
B. 시스템 운영 정책
- 고정 자원 고밀도 활용: 새로운 물리 노드를 추가 증설하지 않고, 확보된 고정 물리 GPU(예: 단일 노드) 내에서 NVIDIA MPS 기술을 사용하여 가상 슬롯 비율을 50:50으로 영구 고정 분할하여 운영합니다.
- PagedAttention 및 KV 캐시 튜닝: 동시 대화 처리량(Throughput) 최적화를 위해 vLLM 내부의 최대 VRAM 점유율(--gpu-memory-utilization)을 0.45(45%)로 제한하여 OOM(메모리 초과 에러)을 원천 차단합니다.
- 상용 등급 서버리스 구현: 야간이나 비활성 시간대에는 자원 낭비를 막기 위해 백업 인프라를 유연하게 스왑하되, 메인 상용 서비스 모델은 최소 1대 이상 상시 활성화(Warm-pool) 상태를 유지합니다.
C. 보안 운영 정책
- 네트워크 격리 및 접근 통제 (NetworkPolicy): 외부 유저 진입은 Envoy Gateway 및 API 게이트웨이 영역으로만 제한하며, LLM 데이터 영역(Pod)은 관리 영역 외의 비인가 IP 또는 타 네엄스페이스와의 직접 통신을 전면 차단합니다.
- API Key 기반 Rate Limiting: 상용 서비스 보호를 위해 유저 및 부서별 토큰 발급 체계를 구축하고, 초당 요청 수(RPS) 임계치를 초과하는 DDoS성 트래픽은 Gateway 단에서 즉시 Drop 처리(429 Too Many Requests)합니다.
- 가중치 보안 및 무결성 보장: 모델 가중치 파일(Weights)은 외부 인터넷망(HuggingFace)에서 실시간으로 직접 다운로드하지 않고, 내부 스토리지 영역(MinIO)에 사전 적재 후 암호화된 내부망 커넥션을 통해서만 로딩합니다.
3. Part 2. 인프라 구성도 (Topology)
아래 아키텍처 흐름에 따라 전체 컴포넌트가 유기적으로 작동합니다.
[ 🌐 외부 상용 유저 트래픽 ]
│ (HTTPS / gRPC 요청)
▼
┌────────────────────────────────────────────────────────┐
│ [ 🛠️ Envoy / API Gateway ] (Rate Limit & 라우팅) │
└────────────────────────────┬───────────────────────────┘
│
┌────────────────┴────────────────┐
▼ (트래픽 상태에 따른 라우팅 제어) ▼ (백업 자원 투입 시)
┌──────────────────────┐ ┌──────────────────────┐
│ [ 📦 vLLM Pod A ] │ │ [ 📦 vLLM Pod B ] │
│ (Active, VRAM 45%) │ │ (Standby / ScaleUp) │
└───────────┬──────────┘ └───────────┬──────────┘
│ │
└────────────────┬────────────────────┘
▼ (물리 자원 분할 관리)
┌────────────────────────────────────────────────────────┐
│ [ 🧬 NVIDIA MPS Layer ] (물리 VRAM 50:50 강제 분할) │
├────────────────────────────────────────────────────────┤
│ [ 🚀 KEDA / Prometheus ] (vLLM 큐 백로그 실시간 수집) │
├────────────────────────────────────────────────────────┤
│ [ 📂 JuiceFS + MinIO ] (Tensorizer mmap 고속 로딩) │
└────────────────────────────────────────────────────────┘
4. Part 3~6. 구축 절차 및 세부 방법
Step 1: NVIDIA MPS 기반 하드웨어 자원 분할 및 격리
- 물리 GPU 서버에 NVIDIA Container Toolkit 및 디바이스 플러그인을 설치합니다.
- 쿠버네티스 노드 단에서 NVIDIA MPS 데몬을 활성화하고 설정을 커스텀하여 물리 GPU를 논리적으로 50:50 분할 선언합니다.
- 설정 파일 매니페스트 예시 (nvidia-device-plugin-config.yaml):
-
version: v1
config:
sharing:
mps:
failRequestsWithoutMps: true
allocatableMemory: 45 # 각 슬롯당 VRAM의 45% 강제 격리 할당
Step 2: vLLM 서빙 엔진 및 KServe 배포
- KServe 및 서버리스 백엔드(Knative, Cert-manager) 시스템 인프라를 클러스터에 인젝션합니다.
- vLLM을 추론 가속 백엔드로 지정하고, Llama-3-8B 모델 가중치를 바인딩하는 InferenceService 정의서를 선언하여 상용 API 포트를 활성화합니다.
- vLLM 구동 시 메모리 충돌 방지를 위한 환경 변수 파라미터 설정을 주입합니다 (--gpu-memory-utilization 0.45, --max-model-len 4096).
Step 3: 우선순위 기반 자원 선점 체계 (Pause Pod) 구축
- 쿠버네티스 내부 스케줄링 제어를 위해 우선순위 클래스(PriorityClass) 2종을 생성합니다.
- high-priority-llm (값: 1,000,000 / 상용 vLLM 서비스용)
- low-priority-pause (값: -1 / 자원 선점 선언용 더미 Pod용)
- low-priority-pause를 장착한 Pause Pod를 배포하여, 평상시 슬롯 2번의 가상 GPU 자원을 빈틈없이 미리 선점(Hold)하도록 강제합니다.
Step 4: 고속 스토리지 파이프라인 (JuiceFS & Tensorizer) 구축
- MinIO 가상 오브젝트 스토리지를 구축하고 암호화된 가중치 바이너리를 업로드합니다.
- vLLM Pod가 뜰 때 가중치 다운로드 지연을 없애기 위해 JuiceFS 클라이언트를 쿠버네티스 CSI(Container Storage Interface)로 연동하여 가상 볼륨 마운트 속도를 최적화합니다.
- 모델 가중치 파일을 vllm-tensorizer 포맷으로 직렬화 변환하여, Pod 구동 시 디스크 상 순차 읽기(mmap) 방식으로 GPU VRAM에 직접 로딩되도록 파이프라인을 설정합니다.
5. Part 7. 시나리오 검증 방법 및 증명 로그
상용 서비스 환경에 완벽히 대응하는지 입증하기 위한 4가지 핵심 Validation 절차입니다. PPT 작성 시 각 항목별로 터미널 출력(CLI 로그) 및 Grafana 그래프 스크린샷 템플릿 영역을 배치해야 합니다.
[검증 시나리오 1] 상용 처리량(Throughput) 및 동시성 부하 테스트
- 목표: 동시 접속자가 몰릴 때 시스템이 제공하는 초당 토큰 수(Tokens/s) 성능 검증.
- 검증 방법: 대량 부하 테스트 도구(Locust)를 사용하여 상용 유저 50명의 동시 추론 요청 스파이크 트래픽을 API 게이트웨이로 인입합니다.
- 검증 결과 및 증명 로그:
- vLLM의 PagedAttention 및 MPS 분할 아키텍처 연동 결과, 테일 지연 시간(Tail Latency)이 무너지지 않고 초당 793 Tokens/s의 고성능 대역폭을 유지함 확인.
- 증명 로그 스크린샷 템플릿: Locust 실행 대시보드 캡처 (RPS 및 Response Time 안정화 그래프).
[검증 시나리오 2] 스파이크 트래픽 발생 시 Pause Pod 축출 및 0초 컷 자원 탈취 검증
- 목표: 물리 자원이 고정된 상태에서 대기 큐 백로그 상승 시, 즉시 기존 자원을 스왑하여 오토스케일링이 트리거되는지 확인.
- 검증 방법: 임의로 큐 대기 요청(vllm:num_requests_waiting) 지표를 5 이상으로 폭증시켜 KEDA 오토스케일러를 동작시킵니다.
- 검증 결과 및 증명 로그:
- 우선순위 스케줄러가 작동하여 대기 중이던 Pause Pod를 0.1초 만에 쫓아내고(Eviction), 백업 vLLM Pod에 GPU 자원을 정상 재할당함 확인.
- 증명 시스템 로그 (kubectl get events -n llm-infra):
-
00:00:01 [KEDA] HorizontalPodAutoscaler triggered ScaleUp (Max Replicas: 2)
00:00:01 [Scheduler] Preempting Pod/pause-pod-7f89d to free resource nvidia.com/gpu
00:00:02 [Kubelet] Container pause-pod killed successfully
00:00:02 [Scheduler] Successfully assigned vllm-backup-pod-5c6d to node-gpu-01
[검증 시나리오 3] Tensorizer mmap 기반 Cold Start 가속 테스트
- 목표: 오토스케일링 또는 시스템 재부팅 시 수십 GB의 대형 가중치가 상용 서비스 다운타임에 미치는 영향 최소화 검증.
- 검증 방법: 새로 할당된 백업 vLLM Pod가 최초 구동되어 유저 요청을 처리할 수 있는 상태(Ready)가 될 때까지의 시간을 측정합니다.
- 검증 결과 및 증명 로그:
- 네트워크 다운로드 방식(기존 180초 이상 소요) 대비, JuiceFS 캐시와 Tensorizer 직렬화 바이너리 매핑을 통해 단 12초 만에 VRAM 로딩 완료 및 Ready 상태 전환 검증.
- 증명 시스템 로그 (kubectl logs vllm-backup-pod-5c6d):
-
2026-06-11T10:50:00Z [tensorizer] Loading model weights from JuiceFS storage cluster...
2026-06-11T10:50:11Z [tensorizer] Serialization mmap loading completed. VRAM allocated.
2026-06-11T10:50:12Z [vllm-engine] Uvicorn server running on http://0.0.0.0:8000 (Ready)
[검증 시나리오 4] NVIDIA MPS 기반 테넌트/서비스 완벽 격리(Isolation) 테스트
- 목표: 한쪽 가상 슬롯의 인프라가 마비되거나 폭주하더라도, 상용 메인 서비스 슬롯의 안정성이 완전 격리 방어되는지 검증.
- 검증 방법: 2번 슬롯(백업/테스트 영역)에 무한 루프 쿼리 및 대량의 비정상 패킷을 주입하여 가상 GPU 부하를 100%로 강제 유지시킵니다.
- 검증 결과 및 증명 로그:
- 물리 VRAM과 컴퓨팅 코어가 하드웨어 단에서 MPS로 분할 격리되어 있으므로, 1번 슬롯 메인 모델의 사용자가 느끼는 Time-to-First-Token(TTFT) 응답 성능 변동폭이 5% 이내로 안정 유지됨 확인.
- 증명 시스템 로그 (nvidia-smi mps 출력 화면): ```text +-----------------------------------------------------------------------------+ | NVIDIA-SMI 535.103 Driver Version: 535.103 CUDA Version: 12.2 | |-------------------------------+----------------------+----------------------+ | Compute Context IDs | Memory Usage | GPU Util | | MPS Process [Slot-1: vLLM] | 24576MiB / 24576MiB | 45% (Protected) | | MPS Process [Slot-2: Attack]| 24576MiB / 24576MiB | 100% (Isolated) | +-------------------------------+----------------------+----------------------+