[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 세팅 고려- 외부 노출은 필요 없음 (내부 통신만)
- GCP
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
등에 요청 전달
- GCP
🛠️ 구성 시 고려 사항
- 두 서버는 동일한 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