2 minute read

MLflow 소개 글에 이어서 MLflow를 활용한 간단한 실습에 대한 글이다. 해당 글에 소개된 실험에 대한 소스코드는 여기에서 확인할 수 있다.

1. 실험 설정

해당 실습에 대한 실험 세팅은 아래와 같다.

실험 목표: MLflow를 이용하여 모델의 전체 라이프사이클을 분석한다.

실험 세부 과정:

  1. COCO 데이터셋으로 사전학습된 YOLO v11 nano 모델을 Pascal VOC 데이터셋으로 파인튜닝한다.
  2. 파인튜닝 과정에서, Optuna의 세가지 탐색 방법론을 이용하여 하이퍼파라미터 최적화(HPO)를 진행한다.
  3. HPO의 최적 결과 모델을 추후 배포 가능한 형태로 저장한다.
  4. 각 실험 내용 및 결과를 MLflow를 통해 비교 분석한다.

실험 세팅 정리

Image

2. 실험 내용

모델 로드 및 HPO 관련 코드

Image

  • COCO 데이터셋으로 사전학습된 YOLO v11 nano를 로드한다.

Image

  • Optuna에서 세 가지 탐색 방법(TPE, Random, Grid)을 설정한다.

학습 및 검증 시 MLflow 모델 서빙 관련 코드

Image

  • MLflow가 실험 결과(런, 파라미터, 메트릭, 아티팩트 등)를 저장할 위치를 지정한다.
  • 현재 실행될 실험(Experiment)의 이름을 지정한다.

Image

박스 순서대로

  • MLflow 런(run)을 시작하는 컨텍스트 매니저이다.
  • 실행 중인 런에 태그를 설정한다.
  • 학습에 사용된 하이퍼파라미터와 설정값들을 MLflow에 기록한다.
  • 검증 후에 산출된 성능 지표를 기록한다.

학습 및 검증 후 MLflow 모델 저장 관련 코드

Image

박스 순서대로

  • log_model을 통해 pytorch 모델을 저장한다.
  • ONNX와 TorchScript 포맷으로 모델을 export하여 각각의 파일을 MLflow에 아티팩트로 등록한다.

3. 실험 결과

실험은 Optuna의 세 가지 탐색 방법론에 대해서, 각각 5번의 최적화 시도를 가졌다. 따라서 총 15번의 실험이 진행되었다.

Image

아래 그림은 전체 15번의 실험의 Tag 그룹 별 메트릭 값 시각화이다.

Image


Parallel Coordinates Plot을 통해 임의의 메트릭-하이퍼파라미터 조합이 어떻게 영향을 미치는지 시각적으로 분석할 수 있다.

Image

  • 하이퍼파라미터 조합(Batch size, Initial learning rate, momentum)에 따른 메트릭(mAP50-95) 값을 나타낸다.
  • Parallel Coordinates Plot 이외에도, Scatter Plot, Box Plot, Contour Plot 등으로 시각화 가능하다.

Scatter Plot으로는 실험별 특정 하이퍼파라미터와 특정 메트릭 간의 상관관계를 파악할 수 있다.

Image

  • 위 Scatter Plot 예시는 Random 탐색과 Grid 탐색의 각 다섯 번의 실험에서 Batch size와 mAP50-95 간의 상관관계를 보여준다.
  • 나아가, Box Plot으로는 하이퍼파라미터별 성능의 중앙값 및 이상치를 확인할 수 있으며, Contour Plot으로는 다차원 공간에서 성능이 최적화되는 영역을 탐색할 수 있다.

Visualization 뿐만 아니라, Run details, Parameters, Metric, Tags 등의 실험 별 값을 표 형식으로 볼 수도 있다.

Image

  • 노란색 하이라이트는 실험이 진행됨에 따라 변동이 된 항목을 나타낸다.

이러한 다양한 도구를 통해 최적의 하이퍼파라미터 조합을 분석하고 모델 개선 방향을 효율적으로 도출할 수 있다.


모델을 저장했다면 아래의 예시처럼 모델이 저장됨을 알 수 있다.

Image

  • MLflow를 통해 모델을 저장하면 해당 모델이 패키징되어 의존성과 함께 관리되므로, 일관된 환경에서 불러와 활용할 수 있다.
  • 또한 저장된 위치를 기반으로 불러오는 예시 코드를 함께 제공하여 쉬운 배포와 재현이 가능하다.

추가로, MLflow를 통해 모델을 저장하였다면 이를 도커화 시켜서 추론을 진행할 수 있다.

Image

  • 만약 AWS S3 클라우드 스토리지 등을 연동하여 모델을 저장했다면, 위 코드처럼 해당 스토리지에서 저장된 모델을 불러와 도커 이미지를 빌드할 수 있다.

Image

  • 빌드된 Docker 파일 내에, 위 코드처럼 Miniconda를 통힌 환경 활성화 및 Gunicorn 통한 서버 실행 코드를 추가하는 커스터마이즈를한 뒤 도커 파일을 실행한다면, 쉽게 모델을 서버에 배포할 수 있다.

Leave a comment