Python, MLflow, FastAPI로 시작하는 MLOps 입문: 모델 생성부터 추론 API 구축까지
요약
본 글은 Python, scikit-learn, MLflow, FastAPI를 활용하여 MLOps의 기본적인 흐름을 단계별로 안내합니다. 데이터셋으로 모델 학습 및 파라미터 실험 방법을 익히고, MLflow를 이용해 실험 결과와 모델을 체계적으로 관리하는 과정을 다룹니다. 마지막으로 FastAPI를 사용하여 학습된 모델을 외부에서 호출할 수 있는 추론 API를 구축하는 실습 가이드입니다.
핵심 포인트
- MLOps는 모델 개발 외에 배포 및 관리가 중요합니다.
- scikit-learn과 MLflow로 실험 관리 및 모델 레지스트리를 구현합니다.
- FastAPI를 사용해 학습된 모델을 RESTful 추론 API로 구축할 수 있습니다.
Python・MLflow・FastAPI로 시작하는 MLOps 입문: 모델 생성부터 추론 API 구축까지
1. 서론
기계 학습 모델을 만드는 것뿐만 아니라, 학습 결과를 관리하고 외부에서 이용할 수 있는 시스템을 구축하는 것도 중요합니다.
이번 글에서는 Python을 사용하여 기계 학습 모델을 만들고, MLflow로 학습 실험을 관리한 다음, FastAPI를 사용하여 추론 API를 구축합니다.
실제로 직접 손으로 작업하면서 MLOps의 기본적인 흐름을 배워보겠습니다.
2. 사용 기술
이번에 사용할 기술은 다음과 같습니다.
| 기술 | 용도 |
|---|---|
| Python | 기계 학습 모델 구현 |
| ... |
3. scikit-learn으로 기계 학습 모델을 생성하기
3.1 Iris 데이터셋
이번에는 기계 학습 입문에서 자주 사용되는 Iris 데이터셋을 사용합니다.
Iris 데이터셋에는 붓꽃의 꽃받침이나 꽃잎의 길이・너비 등의 특징량이 포함되어 있습니다. 이 특징량으로부터 붓꽃의 종류를 분류하는 모델을 만듭니다.
3.2 모델 학습
scikit-learn의 LogisticRegression을 사용하여 모델을 학습합니다.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
...
이 코드에서는 데이터셋을 학습용과 테스트용으로 분할하고, 학습한 모델의 예측 정확도를 확인합니다.
3.3 파라미터를 변경하여 실험하기
다음으로, LogisticRegression의 C 파라미터를 변경하면서 예측 정확도가 어떻게 변하는지 확인합니다.
C는 정규화의 강도와 관련된 파라미터입니다. 일반적으로 C가 작을수록 정규화가 강해집니다.
이번 실험에서는 C=1.0이나 C=0.1에서는 높은 정확도를 얻었지만, C=0.000001에서는 정확도가 약 30%까지 떨어졌습니다.
이처럼 파라미터에 따라 모델의 성능이 변할 수 있다는 것을 알 수 있습니다.
4. MLflow로 학습 실험을 기록하기
4.1 MLflow란?
MLflow는 기계 학습의 실험 관리 및 모델 관리를 지원하는 플랫폼입니다.
기계 학습에서는 파라미터나 데이터 조건을 바꾸면서 여러 번 실험을 진행합니다. 이때, 실험별 설정이나 평가 결과를 기록해 두면 결과를 비교하기가 쉬워집니다.
4.2 MLflow의 주요 기능
이번에 사용할 주요 기능은 다음과 같습니다.
- Experiment: 관련 실험을 모아서 관리하는 단위 -
- Run: 1회 학습 실험의 실행 기록 -
- Model Registry: 학습 완료된 모델을 등록・관리하는 기능
이것들을 사용함으로써, 학습 조건이나 평가 결과를 기록하고 모델을 관리할 수 있습니다.
4.3 MLflow를 사용한 학습 코드
MLflow를 사용하여 학습 파라미터나 평가 지표를 기록합니다.
import mlflow
import mlflow.sklearn
from sklearn.datasets import load_iris
...
이 코드에서는 학습한 모델의 파라미터나 정확도를 기록하고, 모델을 MLflow의 Model Registry에 등록합니다.
4.4 MLflow 화면에서 확인하기
MLflow를 실행하고 브라우저에서 실험 결과를 확인합니다.
mlflow server --port 5000
브라우저에서 다음 URL에 접속합니다.
Experiment 목록이나 Run 상세 화면에서 파라미터나 평가 지표를 확인할 수 있습니다. 또한, Model Registry에서는 등록한 모델을 확인할 수 있습니다.
5. FastAPI로 추론 API를 만들기
5.1 왜 API로 만드는가?
학습 완료된 모델을 Python 스크립트에서 실행할 뿐만 아니라, API로 공개하면 다른 애플리케이션으로부터 HTTP 요청을 통해 예측을 이용할 수 있게 됩니다.
이번에는 FastAPI를 사용하여 특징량을 받아 예측 결과를 반환하는 API를 만듭니다.
5.2 추론 API 구현하기
다음은 학습 완료된 모델을 불러와서 추론을 수행하는 API의 예시입니다.
이 API에서는 /predict에 특징량(feature)을 전송하면, 모델에 의한 예측 결과가 반환됩니다.
참고로, model.pkl은 사전에 학습하여 저장한 모델 파일입니다.
5.3 API를 실행하기
다음 명령어로 FastAPI를 실행합니다.
uvicorn app:app --reload --host 0.0.0.0
실행 후, 브라우저에서 다음 URL에 접속합니다.
FastAPI가 제공하는 Swagger UI에서 API 사양 확인이나 추론 실행을 할 수 있습니다.
5.4 추론 결과를 확인하기
Swagger UI에서 /predict를 열고, 테스트하고 싶은 특징량을 입력하여 실행합니다.
예를 들어, 다음 특징량을 입력합니다.
[5.1, 3.5, 1.4, 0.2]
이 입력에 대해 예측 결과로 0이 반환되었습니다.
Iris 데이터셋에서는 클래스 번호 0이 Setosa를 나타냅니다.
이처럼 학습된 모델을 API를 통해 이용할 수 있음을 확인할 수 있었습니다.
6. 이번에 해보고 알게 된 점
이번 핸즈온(hands-on)에서는 기계 학습 모델의 생성부터 추론 API 구축까지를 실시했습니다.
특히, 다음 점들을 배울 수 있었습니다.
- scikit-learn을 사용하여 모델을 학습 및 평가할 수 있다
- MLflow를 사용하여 실험의 파라미터(parameter)나 평가 지표(evaluation metric)를 기록할 수 있다
- Model Registry를 사용하여 학습된 모델을 관리할 수 있다
- FastAPI를 사용하여 모델을 외부에서 이용할 수 있는 API로 공개할 수 있다
기계 학습 모델을 만드는 것뿐만 아니라, 실험 결과를 관리하고 API로 활용할 수 있는 형태로 만드는 것이 MLOps를 배우는 데 중요하다고 알게 되었습니다.
7. 다음에に取り組むこと (앞으로 다룰 내용)
이번에는 로컬 환경을 중심으로 모델 생성부터 추론 API 구축까지를 실시했습니다.
다음 단계로, 다음 내용에도 도전해보고 싶습니다.
- Docker를 사용한 컨테이너화(Containerization)
- GitHub Actions에 의한 CI/CD (지속적 통합/지속적 배포)
- AWS EKS에 배포
- Amazon S3를 사용한 모델 파일 관리
- 추론 API의 모니터링 및 로그 정비
앞으로도 실제로 손을 움직이면서, 기계 학습 모델을 지속적으로 관리하고 운영하기 위한 시스템을 배워가고 싶습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기