[python 인공지능] Deploy ML models with FastAPI, Docker, and Heroku | Tutorial
[python 인공지능] Deploy ML models with FastAPI, Docker, and Heroku | Tutorial
🔧 머신러닝 모델 배포 전반
-
(00:00) FastAPI + Docker + Heroku 조합으로 머신러닝 모델을 프로덕션 수준으로 배포하는 전체 과정을 설명.
-
다양한 프레임워크(Scikit-learn, TensorFlow, PyTorch)에서도 동일한 접근 방식으로 활용 가능.
🧠 모델 개발 및 저장
-
(01:03~03:53)
-
Google Colab에서 언어 감지 모델 개발 (Scikit-learn 기반 Naive Bayes + CountVectorizer).
-
모델은
Pipeline으로 결합하여 추론을 단일 객체로 수행. -
pickle로 모델 저장, 버전 관리(major.minor.patch) 권장. -
텐서플로나 파이토치 사용 시 zip 압축하여 다운로드하는 팁 소개.
-
🏗️ FastAPI 애플리케이션 구성
-
(05:10~08:11)
-
app/main.py에서 FastAPI 엔드포인트 구현 (헬스 체크 및/predictPOST API). -
model.py에서 저장된 모델 로드 및 전처리/예측 로직 구현. -
pydantic.BaseModel기반 입력/출력 유효성 검사 적용 (타입 안전성 보장).
-
🐳 Docker 컨테이너화
-
(08:46~11:27)
-
FastAPI 컨테이너화를 위한
Dockerfile,.dockerignore,requirements.txt생성. -
공식 FastAPI + Gunicorn 기반 Docker 이미지 활용.
-
의존성은 scikit-learn만 추가 설치 (
==1.0.2등 버전 고정 권장). -
docker build,docker run명령어로 로컬 실행 및 포트 매핑 확인.
-
📋 FastAPI 자동 문서화
-
(12:50~13:34)
-
/docs경로에서 Swagger 기반 API 문서 자동 생성. -
입력 텍스트에 따른 언어 예측 테스트 가능 (Postman 없이도 가능).
-
☁️ Heroku 배포
-
(14:17~17:51)
-
heroku login,heroku create,git push heroku main으로 CLI 기반 배포 진행. -
heroku.yaml파일 작성 필수 (Heroku Dev Center 문서 참고). -
heroku stack:set container로 Docker 기반 스택 설정. -
배포 후 Heroku URL에서 API 접근 가능.
-
✅ 배포 후 테스트
-
(17:51~18:38)
-
Postman으로 GET
/→Health Check OK, POST/predict→"language": "german","language": "italian"확인. -
실시간 언어 감지 API 배포 완료!
-
필요 시 각 섹션별로 관련 코드/구성요소를 다시 정리해드릴 수 있습니다.
나의 말:
ChatGPT의 말:
아래는 영상에서 설명한 FastAPI + Docker + Heroku를 활용한 머신러닝 모델 배포 과정을 섹션별로 코드 및 구성요소 중심으로 재정리한 내용입니다:
1️⃣ 모델 개발 및 저장 (Colab)
✅ 사용 기술:
-
scikit-learn,pandas,re,pickle
📄 주요 코드:
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
import pickle
# 데이터 준비 및 전처리
label_encoder = LabelEncoder()
y_encoded = label_encoder.fit_transform(df['language'])
# 모델 파이프라인 정의
pipeline = Pipeline([
('vectorizer', CountVectorizer()),
('classifier', MultinomialNB())
])
# 훈련
pipeline.fit(df['text'], y_encoded)
# 저장
with open('model_v0.1.0.pkl', 'wb') as f:
pickle.dump(pipeline, f)
# 레이블 저장 (선택)
label_classes = label_encoder.classes_
2️⃣ FastAPI 앱 구성
📁 디렉터리 구조:
app/
├── main.py # FastAPI 엔트리포인트
├── model/
│ ├── model.py # 모델 로딩 및 예측 함수
│ └── model_v0.1.0.pkl # 저장된 모델 파일
📄 model/model.py (모델 로딩 및 예측)
import pickle
import os
import re
BASE_DIR = os.path.dirname(__file__)
MODEL_PATH = os.path.join(BASE_DIR, "model_v0.1.0.pkl")
with open(MODEL_PATH, "rb") as f:
model = pickle.load(f)
label_classes = ["english", "german", "italian", ...] # 실제 label list
def predict_pipeline(text: str) -> str:
text = re.sub(r"[^\w\s]", "", text)
pred = model.predict([text])[0]
return label_classes[pred]
📄 main.py (FastAPI 엔드포인트)
from fastapi import FastAPI
from pydantic import BaseModel
from app.model.model import predict_pipeline
app = FastAPI()
class TextIn(BaseModel):
text: str
class PredictionOut(BaseModel):
language: str
@app.get("/")
def health_check():
return {"status": "ok", "model_version": "0.1.0"}
@app.post("/predict", response_model=PredictionOut)
def predict(payload: TextIn):
language = predict_pipeline(payload.text)
return {"language": language}
3️⃣ Docker 구성
📄 Dockerfile
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.8
WORKDIR /app
COPY ./app /app/app
COPY requirements.txt /app
RUN pip install --no-cache-dir -r /app/requirements.txt
📄 requirements.txt
scikit-learn==1.0.2
📄 .dockerignore
__pycache__/
*.pyc
*.pkl
*.zip
.venv
4️⃣ 로컬 Docker 테스트 명령어
# 빌드
docker build -t language-detection-app .
# 실행 (포트 매핑)
docker run -p 8080:80 language-detection-app
5️⃣ FastAPI 자동 문서화
접속:
http://localhost:8080/docs
자동 생성된 Swagger UI에서 /predict POST API 테스트 가능
6️⃣ Heroku 배포 구성
📄 heroku.yml
build:
docker:
web: Dockerfile
run:
web: uvicorn app.main:app --host=0.0.0.0 --port=${PORT:-5000}
🧪 Heroku CLI 명령어:
heroku login
heroku create language-detection-app123
heroku stack:set container
git add .
git commit -m "Deploy to Heroku"
git push heroku main
7️⃣ 배포 확인
-
배포 URL 예시:
https://language-detection-app123.herokuapp.com -
GET
/→ 헬스체크 -
POST
/predict→ 언어 예측
![]()
Copyright 2021. All rights reserved.