[V2] AI 인프라 구성 (vLLM 서버 및 FastAPI 서버 분리 운영) - 100-hours-a-week/6-nemo-ai GitHub Wiki

📌 목적

AI 모델 서빙(vLLM)을 GPU 서버에서 전담하고, 실제 서비스 요청을 처리하는 FastAPI 서버는 CPU 기반으로 분리하여 운영하려고 합니다. 이를 통해 모델 추론과 애플리케이션 로직의 리소스 충돌을 방지하고, 유연한 스케일 아웃 구성을 가능하게 합니다.


🎯 구성 개요

1. GPU 서버 (모델 추론 서버)

  • 목적: vLLM 기반의 LLM 추론 처리 (1~2개의 양자화 모델 컨테이너 실행 예정)
  • 주요 요구 사항:
    • GCP g2-standard-8 인스턴스 (8 vCPU / 32GB RAM)
    • NVIDIA L4 GPU (24GB VRAM) 1개
    • Ubuntu 22.04 + NVIDIA 드라이버 + Docker 환경
    • 포트 분리된 컨테이너 운영 (예: 8001, 8002)
    • gpu-memory-utilization, max-model-len 등 vLLM 세팅 고려
    • 외부 노출은 필요 없음 (내부 통신만)

2. CPU 서버 (FastAPI 기반 라우터)

  • 목적: 사용자의 API 요청 처리 및 추론 요청 중계
  • 주요 요구 사항:
    • GCP e2-standard-2 또는 n2-standard-4 인스턴스 (2 vCPU / 4~8GB RAM)
    • Ubuntu 22.04 + Python FastAPI 실행 환경
    • GPU 서버와 동일 VPC 또는 Subnet 상에 위치
    • 외부 HTTP 요청 수신 (ex: 8000 포트 허용)
    • 내부적으로 GPU 서버 컨테이너의 /v1/completions 등에 요청 전달

🛠️ 구성 시 고려 사항

  • 두 서버는 동일한 VPC/Subnet에서 운영되어야 하며, 내부 IP 기반 통신이 가능해야 합니다.
  • GPU 서버는 각 컨테이너별로 포트가 분리되어야 하며, 필요한 경우 간단한 docker-compose 운영이 필요합니다.
  • FastAPI 서버는 stateless하게 설계되어 있어 이후 필요시 수평 확장(scale out) 이 용이한 구조입니다.
  • 보안을 위해 FastAPI 서버 외부 포트(예: 8000)는 최소한의 허용 IP 범위로 제한하거나, 인증 체계를 적용할 예정입니다.
  • GPU 서버는 필요시 일정 조건 하에 자동 중지/재시작될 수 있도록 스크립트 구성 가능성 고려 중입니다.

🔄 향후 확장 가능성

  • GPU 서버에 복수 모델 컨테이너 운영 (예: Gemma 4B, Mistral 3B 등) 또는 모델 버전 스위칭을 위한 포트 매핑 구조 확장
  • FastAPI 서버에 Redis 또는 DB 캐시 연동 예정
  • 추후 WebSocket 기반의 streaming 응답 기능 고려 중 (FastAPI 기준 SSE 또는 WebSocket 핸들링 가능)

🤝 참고 목적

이 구성은 모델 추론 로직과 서비스 라우팅을 분리하여 안정성과 성능을 높이기 위한 구조적 전환입니다. 리소스 제약, 보안 정책, 운영 방식 등 고려해야 할 요소가 있다면 조율하여 반영할 예정입니다.

vLLM 막간 코드

pip install vllm

vllm serve chaerheeon/nemo-chatbot-v3
python3 -m vllm.entrypoints.openai.api_server \
  --model google/gemma-3b-it \
  --dtype float16 \
  --gpu-memory-utilization 0.7 \
  --max-concurrent-requests 5 \
  --max-model-len 2048 \
  --port 8000 \
  --host 0.0.0.0