[Upstage AI Lab] 11주차 - MLOps 자동화
[Upstage AI Lab] 11주차 - MLOps 자동화 & 배포(MLflow, CI/CD, API) 학습 내용
들어가며
이번 글에서는 MLflow, CI/CD, REST API 등 MLOps 자동화 & 배포 도구를 살펴본다.
간단한 실습 예제와 함께 설명한다.
MLflow
1. MLflow 란?
머신러닝의 전체 Project Lifecycle을 관리할 수 있는 오픈소스 플랫폼이다.
Project Lifecycle의 모든 단계에서 적용 가능하며 개발/학습/추론/배포 등 모든 단계에서 사용 가능
구성 요소
- Tracking: 모델 학습 결과를 추적하고 다양한 프레임워크에서 동작할 수 있는 학습 코드의 재현성을 보장
- Projects: 프로젝트의 코드 환경 설정 종속성 등을 관리
- Models: 학습된 모델을 관리하고 다양한 환경에서 모델을 배포할 수 있는 기능 제공
- Registry: 모델 버전을 관리하고 공동 작업을 위한 모델 저장소를 제공
2. MLflow 실습
아래 코드는 Conda 환경에서 MLflow Tracking Server를 실행하며 다음 단계를 따라 진행한다.
- Preprocessing
- Model Training
- Model Selection
- Model Serving
2-1. 환경 구축
- 1. MLflow 설치
1
2
conda activate mlflow # 가상환경 이름
pip install mlflow # 설치
- 2.
http://127.0.0.1:5001
접속 및 확인
1
mlflow ui --port 5001 # 실행 / port는 개인 환경에 맞게 설정
2-2. MLflow loging Test
1. Jupyter file 생성
1
vi mlflow.ipynb # Test file 생성
2-2. Regression Model Test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import mlflow
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
# port
mlflow.set_tracking_uri("http://localhost:5001")
mlflow.sklearn.autolog()
# Data load
data_diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(data_diabetes.data, data_diabetes.target)
# Model
reg = RandomForestRegressor(n_estimators=50, max_depth=10, max_features=5)
reg.fit(X_train, y_train)
# predict
predictions = reg.predict(X_test)
3. 결과 확인
CI/CD
1. CI/CD 란?
CI/CD는 코드 변경 시 자동 빌드·테스트·배포로 안정적 운영을 지원하는 파이프라인이다.
CI(Continuous Integration) 란?
- 코드 변경사항을 중앙 저장소에 정기적으로 merge(병합)하는 것을 의미
- 자동화된 빌드 및 테스트가 수행되어 코드 변경이 주 저장소에 통합되기 전에 문제를 조기에 발견하고 해결
- 예시
- A, B 두 개발자가 동일 파일을 작업 후 오랜 기간 지나 merge 시도
- 코드 충돌 발생 → 충돌 해결에 더 많은 시간 소요
- 작은 단위로 자주 merge하여 리스크 최소화
CD(Continuous Deployment) 란?
- 테스트를 거친 코드를 자동으로 production 환경에 배포하는 과정
- 수동 개입 없어도 새로운 코드 변경 사항이 사용자에게 신속하게 도달하도록 함
- 예시
- feature 브랜치 머지 시 CI 통과 후 자동 배포 파이프라인 실행
- 운영 환경에 최신 코드가 즉시 반영
2. CI/CD 도구
CI/CD 도구는 코드 변경 시 자동으로 빌드·테스트·배포 워크플로우를 실행하여 피드백을 제공하는 플랫폼
종류
- Jenkins: Java로 작성된 오픈 소스 자동화 서버, SW 개발자의 연속적인 통합 및 배포를 위한 도구
- GitLab CI/CD: GitLab에 내장된 CI/CD 도구로, 웹 기반의 Devops 생명주기 도구
- GitHub Actions: GitHub 저장소에 내장된 CI/CD 기능으로, SW 워크플로우를 자동화
- Circle CI: Cloud 기반의 CI/CD 서비스로, 빠른 서비스로 빠른 빌드, 테스트 및 배포를 지원
- Travis CI: GitHub 프로젝트에 쉽게 통합되는 CI 서비스로, 오픈소스 프로젝트에 널리 사용
HTTP & REST API
1. HTTP 란?
HTTP는 웹 상에서 데이터를 교환하기 위한 Protocol(프로토콜)이다.
클라이언트-서버 구조의 요청-응답 방식이며, stateless(무상태) 를 특징으로 한다.
HTTP MEthod
- GET: 서버로부터 정보를 조회하기 위해 사용
- POST: 서버에 데이터를 전송하기 위해 사용
- PUT: 서버의 리소스를 업데이트(갱신)할 때 사용
- DELETE: 서버의 리소스를 삭제할 때 사용
HTTP 상태 코드
- 200 OK: 요청이 성공적으로 처리되었음을 뜻한다.
- 404 Not Found: 클라이언트가 요청한 리소스를 서버에서 찾을 수 없음을 뜻한다.
- 500 Internal Server Error: 서버 내부에서 예기치 못한 오류가 발생했음을 뜻한다.
2. REST API 란?
REST API는 웹 표준을 기반으로 서버와 클라이언트 간의 통신을 구현하기 위한 인터페이스다.
이는 자원의 표현에 의한 상태 전달을 의미하며, 웹의 기본 Protocol인 HTTP를 사용한다.
작동 원리
- REST API는 자원(URI), 행위(HTTP Method), 표현(Representation)의 세 가지 구성 요소로 이루어진다.
- 클라이언트는 URI를 통해 자원을 지정하고, HTTP 메서드를 통해 해당 자원에 대한 행위를 지정한다.
상태 비저장성 (Statelessness)
- REST는 상태 비저장성을 가짐
- 서버는 클라이언트의 이전 요청 상태를 유지하지 않으며, 각 요청은 독립적으로 처리된다.
- 서버 처리가 단순화되고, 시스템 확장성이 크게 향상된다.