Hugging Face 모델을 FastAPI로 API 서버 배포하기
이 문서는 이전 실습에서 사용한 Hugging Face 모델을 기반으로,
FastAPI 웹 프레임워크와 연동하여 API 서버 형태로 배포하는 방법을 안내합니다.
이를 통해 단순한 모델 테스트를 넘어, ECI GPU/CPU VM을 실제 운영 서버처럼 활용하는 방법을 확인할 수 있습니다.
실습 목표
이 문서를 완료하면 다음을 할 수 있습니다.
- Hugging Face 모델을 서버 프로세스로 로딩
- FastAPI 기반 추론 API 구현
- 외부에서 HTTP 요청으로 모델 추론 결과 확인
- 실제 서비스와 유사한 API 서버 구조 이해
전체 구조 개요
Client (curl / Browser)
|
v
FastAPI API Server
|
v
Hugging Face Transformers
|
v
CPU / GPU (ECI VM)
사전 준비 사항
- 이전 가이드 완료:
- ECI VM
- CPU 또는 GPU VM (본 가이드는 CPU 기준, GPU에서도 동일)
- Public IP 설정
- Python 3.10 이상
- API에 대한 이해
Step 1. 기존 실습 환경 확인
이전 가이드에서 생성한 프로젝트 디렉토리로 이동합니다.
cd hf-text-cls
source .venv/bin/activate
라이브러리 설치 상태를 확인합니다.
pip list | grep transformers
Step 2. FastAPI 및 웹 서버 라이브러리 설치
API 서버 구성을 위해 FastAPI와 ASGI 서버(Uvicorn)를 설치합니다.
pip install fastapi uvicorn
Step 3. API 서버 코드 작성
1️⃣ 프로젝트 구조
hf-text-cls/
├─ app.py
└─ text_cls_infer.py
2️⃣ FastAPI + Hugging Face 코드 작성
nano app.py
from fastapi import FastAPI
from pydantic import BaseModel
from transformers import pipeline
# FastAPI 앱 생성
app = FastAPI()
# Hugging Face sentiment-analysis 파이프라인 로딩
# 서버 시작 시 한 번만 로딩됨
clf = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english"
)
# 요청 스키마 정의
class TextRequest(BaseModel):
text: str
# 헬스 체크 엔드포인트
@app.get("/")
def health_check():
return {"status": "ok"}
# 감정 분석 API
@app.post("/predict")
def predict(req: TextRequest):
result = clf(req.text)[0]
return {
"text": req.text,
"label": result["label"],
"score": result["score"],
}
Step 4. API 서버 실행
uvicorn app:app --host 0.0.0.0 --port 8000
Step 5. API 동작 확인
1️⃣ 서버 상태 확인
curl http://<VM_PUBLIC_IP>:8000/
응답 예시:
{"status":"ok"}
2 ️⃣ 추론 API 호출
curl -X POST http://<VM_PUBLIC_IP>:8000/predict \
-H "Content-Type: application/json" \
-d '{
"text": "I really like this product!"
}'
응답 예시:
{
"text": "I really like this product!",
"label": "POSITIVE",
"score": 0.9998123049736023
}
🎉 Hugging Face 모델이 API 서버 형태로 정상 배포되었습니다.
현재 구조의 의미
이 구성은 다음을 의미합니다.
- Hugging Face 모델을 서버 프로세스로 상시 로딩
- API 요청마다 모델을 재로딩하지 않음
- ECI VM을 실제 서비스 서버처럼 활용 가능
- CPU / GPU 환경 모두 동일한 방식 적용 가능
문제 해결 (Troubleshooting)
모델 로딩이 느린 경우
- 서버 시작 시 한 번만 로딩되는 것이 정상
- 워커 수 증가 시 메모리 사용량 주의
외부 접속이 안 되는 경우
- Public IP 설정 여부 확인
- 보안 그룹 / 방화벽 규칙 확인
다음 단계
- GPU VM에서 대형 LLM API 서버 배포
- vLLM 기반 OpenAI 호환 API 서버
- FastAPI + LLM 기반 서비스 아키텍처
- ECI 멀티 GPU / 멀티 노드 서빙 구성