본문 바로가기
프로그래밍/AI

upstage: mlops 프로젝트

by slowin 2025. 2. 3.

프로젝트 소개

  • 기상 데이터를 기반으로 MLOps를 설계하고 운영하는 데 중점을 둠
  • MLOps의 실제 적용 사례를 통해 데이터 활용에서 서비스 배포까지의 전 과정을 경험해보기
  • 기간: 2025. 01. 16 ~ 2025. 02.03
  • 팀원: 5명
  • 역할: MLOps 엔지니어링 & CI/CD 파이프라인 구축

주요 작업

  • 데이터 수집 및 전처리
  • 모델 개발 및 학습
  • MLOps 파이프라인 구축
  • 모니터링 및 유지보수

아키텍처 설계 다이어그램

많은 MLOps 도구들

프로젝트 초기에는 다양한 MLOps도구들이 있다는것을 알 수 있었습니다.

하지만, 많은 도구들이 왜 나왔고 어떠한 용도로 사용되어야 하는지 알기 힘들었습니다.

 

저희 팀은 단순히 MLOps 도구들을 경험해보는 것보다, 작은 단계부터 직접 구축하며 전체적인 흐름을 이해하는 것이 훨씬 더 실질적이라고 판단했습니다.

 

MLOps Level 0구현

프로젝트 초기부터 다양한 도구를 검토하기보다는, 수동으로 실행할 수 있는 어플리케이션을 먼저 구현해야 한다고 판단했습니다.
이에 'Data Pipe', 'Train', 'Model'이라는 세 가지 핵심 테마를 중심으로 실행 가능한 어플리케이션 개발을 시작했습니다.

 

프로젝트 기본환경 구축

  • 환경 설정 (.env 관리): 환경 변수 파일을 활용하여 개발, 테스트, 운영 환경을 분리하고, 민감한 정보를 안전하게 관리합니다.
  • 버전 관리 (.gitignore 설정): 불필요한 파일이나 민감한 정보를 .gitignore에 추가하여 Git 저장소를 깔끔하게 유지합니다.
  • GitHub 형상 관리: 브랜치 전략을 수립하고 PR 및 코드 리뷰 프로세스를 통해 협업 효율을 극대화합니다.
  • 공통 환경 변수 관리 (Config Class 설계): 환경 변수 및 설정 값을 일관되게 관리할 수 있도록 공통 Config 클래스를 구현하여 유지보수성을 높입니다.

Data Pipeline

데이터셋: 

기상청 API Client

외부 API 채널의 스펙에 대한 의존성을 줄이기 위해 추상 클래스를 구현하였고,
프로젝트 내부에서는 해당 추상 클래스를 활용하도록 설계했습니다.

날씨 API 추상클래스
기상청 API 구현체

CLI 데이터 수집 구축

데이터 수집 CLI 구축

Fire 커맨드 생성
CLI 수집
수집된 파일

Feature Data

저희가 선택한 모델은 지난 30일간의 기온 데이터를 활용하여 다음 날의 기온을 예측하는 모델이었습니다.
그러나 기상청에서 수집한 데이터는 시간 단위였기 때문에, 이를 일 단위 데이터로 변환하는 과정이 필요했습니다.

 

Feature Data 또한 CLI로 구축했습니다.

원본 데이터
Feature Data

 

사용한 모델

  • LSTM (Long Short Term Memory)
    • 장기적인 의존성을 학습할 수 있음
    • 안정적인 학습이 가능함
    • 기상 데이터는 시간에 따라 변화하는 연속적인 패턴을 가짐
    • ➡️ 과거 데이터를 학습하여 미래 값을 예측하는 데 적합함

 
모델 코드를 팀원에게 받았지만, 실제 어플리케이션 레벨에서 구현 가능하도록 리팩토링이 필요했습니다.
저는 코드의 흐름을 명확하게 정리하기 위해 다이어그램으로 각 단계를 시각화하였습니다.
시각화 1

최종 다이어그램

최소한의 기능과 범위로 코드를 분류한 후, 어플리케이션 레벨에서 동작할 수 있도록 리팩토링을 진행했습니다.

모델 학습 CLI

수동 처리 가능 0단계 구축

여기까지 0단계를 완료하여 우선 실행 가능한 상태로 만들었습니다.

 

실제 날씨 예측 API 배포

수동으로 "Data Pipe → Train → Model" 단계를 구현해보았으며, 이를 예측 API로 구축해야 비로소 완성된다고 판단했습니다

 

 

외부접속 테스트

 

Data Pipe 자동화

Airflow LOGO

Data Pipe를 매번 수동으로 실행하거나 리눅스 스케줄러를 활용할 경우, 관리의 복잡성과 오류 발생 등의 다양한 문제가 발생할 수 있습니다. 이에 따라 워크플로우 자동화를 위해 Airflow를 도입하였습니다.

 

팀원들과의 동일한 환경 구축을 위해 Docker 컨테이너 환경을 구축했습니다.

 

Airflow DAGs 구성

Airflow Dataset 캡처

모델 추적 관리

모델을 배포한 후 추적 및 관리와 관련된 이슈가 발생하였습니다.
이에 따라 MLflow를 도입하여 실험 추적, 모델 관리, 그리고 배포 프로세스를 체계적으로 운영할 수 있도록 하였습니다.

모델 저장을 위한 Storage로는 S3를 선택하였습니다.
이를 통해 모델의 버전 관리와 배포 과정에서의 접근성을 효율적으로 관리할 수 있도록 하였습니다.

mlflow 코드 및 저장

model

mlflow 로 모델 성능 비교

mlflow 모델 버전관리

모델 서빙

모델 서빙 API는 최신 버전을 Load하여 구동하는형태로 하였습니다.

배포 자동화(CI/CD)

 

배포 자동화는 GitHub Actions를 활용하였으며,
이를 통해 Docker 이미지를 빌드하고 배포 프로세스를 자동화하였습니다.

 

github Actions

최종 MLOps 구조

 

아쉬운점

  • 모델 재학습 자동화가 구현되지 않아, 일정 주기별 자동 업데이트가 필요함
  • 모델 성능 모니터링 체계가 부족하여, 실시간 성능 저하 감지 및 대응이 어려움

 

'프로그래밍 > AI' 카테고리의 다른 글

업스테이지 서울특별시 아파트 가격 모델 경진대회  (0) 2025.01.12
Git 활용 전략  (1) 2024.12.16
Git 학습  (1) 2024.12.16
멀티 쓰레드와 멀티 프로세스  (1) 2024.12.11
Python List  (0) 2024.12.11