[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 엔드포인트 구현 (헬스 체크 및 /predict POST 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)

    경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
    어린이용이며, 설치가 필요없는 브라우저 게임입니다.
    https://s1004games.com

    • /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 배포 완료!


필요 시 각 섹션별로 관련 코드/구성요소를 다시 정리해드릴 수 있습니다.

 

나의 말:

섹션별로 관련 코드/구성요소를 다시 정리

아래는 영상에서 설명한 FastAPI + Docker + Heroku를 활용한 머신러닝 모델 배포 과정을 섹션별로 코드 및 구성요소 중심으로 재정리한 내용입니다:


1️⃣ 모델 개발 및 저장 (Colab)

✅ 사용 기술:

  • scikit-learn, pandas, re, pickle

???? 주요 코드:

 
python
 
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 앱 구성

???? 디렉터리 구조:

 
bash
 
app/ ├── main.py # FastAPI 엔트리포인트 ├── model/ │ ├── model.py # 모델 로딩 및 예측 함수 │ └── model_v0.1.0.pkl # 저장된 모델 파일

???? model/model.py (모델 로딩 및 예측)

 
python
 
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 엔드포인트)

 
python
 
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

 
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

 
txt
 
scikit-learn==1.0.2

???? .dockerignore

 
txt
 
__pycache__/ *.pyc *.pkl *.zip .venv

4️⃣ 로컬 Docker 테스트 명령어

 
bash
 
# 빌드 docker build -t language-detection-app . # 실행 (포트 매핑) docker run -p 8080:80 language-detection-app

5️⃣ FastAPI 자동 문서화

접속:

 
bash
 
http://localhost:8080/docs

자동 생성된 Swagger UI에서 /predict POST API 테스트 가능


6️⃣ Heroku 배포 구성

???? heroku.yml

 
yaml
build: docker: web: Dockerfile run: web: uvicorn app.main:app --host=0.0.0.0 --port=${PORT:-5000}

???? Heroku CLI 명령어:

 
bash
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 → 언어 예측

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» [python 인공지능] Deploy ML models with FastAPI, Docker, and Heroku | Tutorial 졸리운_곰 2025.07.08 27
56 [python 인공지능] [VSCode] VSCode에서 ipynb 파일을 HTML(PDF 등..)로 졸리운_곰 2025.05.27 20
55 [Python 인공지능] [파이썬을 이용한 한글 NLP] 03. 간단한 키워드 추출기 졸리운_곰 2025.01.29 86
54 [Python 인공지능] [ 한글 키워드 시각화 ] 파이썬 python 텍스트 마이닝 한글 ( 워드 클라우드 WordCloud, squrify 트리맵으로 빅데이터 마스터) file 졸리운_곰 2025.01.29 66
53 [Python 인공지능] 기계 학습의 A to Z : IPython notebook과 scikit-learn을 활용한 기계 학습 file 졸리운_곰 2024.08.10 227
52 [python] 인공지능 python : 한글 문서 자동 요약 - lexrank 졸리운_곰 2023.07.06 96
51 [python] 인공지능 katiehouse / django-scikit-learn-tutorial file 졸리운_곰 2023.06.03 239
50 [python] [Anaconda]가상환경 설치,삭제 file 졸리운_곰 2022.12.03 61
49 [python][머신러닝] Scikit-learn Tutorial: Machine Learning in Python file 졸리운_곰 2022.11.29 149
48 [python] 파이썬(sklearn) 사이킷런(sklearn) 기초 졸리운_곰 2022.08.20 132
47 [python] scikit-learn이란 file 졸리운_곰 2022.08.20 124
46 [anaconde3][python] Create environment for tensorflow 1.4 in Anaconda 3 졸리운_곰 2022.07.02 166
45 [python][인공지능] [TensorFlow] Anaconda 가상환경 이용하여 TensorFlow GPU 설치 졸리운_곰 2022.01.20 142
44 [Python 인공지능] TextRank 를 이용한 키워드 추출과 핵심 문장 추출 (구현과 실험) file 졸리운_곰 2021.11.22 161
43 [python][인공지능] FLASK를 이용하여 PYTHON에서 PYTORCH를 REST API로 배포하기 졸리운_곰 2021.03.20 146
42 [python 파이썬] Creating REST API for TensorFlow models file 졸리운_곰 2021.02.01 147
41 [python 파이썬 인공지능] Keras 모델을 REST API로 배포해보기 file 졸리운_곰 2021.02.01 148
40 [파이썬 머신러닝] Scikit-learn 기초 졸리운_곰 2020.01.31 217
39 파이썬으로 간단한 뉴럴 네트워크 만들기 How to Create a Simple Neural Network in Python file 졸리운_곰 2020.01.29 347
38 Keras를 활용한 주식 가격 예측 file 졸리운_곰 2019.02.25 601
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED