241218 TIL #566 AI Tech #99 모델관리 (MLflow) / 평가 / 더 배워야할 내용

김춘복·2024년 12월 18일
0

TIL : Today I Learned

목록 보기
568/575

Today I Learned

오늘 배운 내용은 모델 관리와 평가, 그리고 향후 더 공부해야할 것들을 정리했다.


모델 관리

  • ML 모델의 버전 관리.
    어떤 데이터, 어떤 파라미터, 어떤 하이퍼파라미터를 사용했을 때 어떤 성능을 기록했는 지 기록

  • 관리 필수 요소

  1. 모델 메타 데이터
    모델 생성 시점, 사용한 데이터 정보, 모델 성능 등

  2. 모델 아티팩트
    학습된 모델의 결과물. 모델 파일 or 이미지

  3. Feature / Data
    모델에 들어간 데이터. 데이터가 업데이트 되면 버전이 바뀌어야 한다.

MLflow

머신러닝 모델의 lifecycle을 관리하기 위한 오픈소스 플랫폼

  • 경쟁 제품인 W/B는 saas 기반 sw이면서 기업에서 사용시 유료이므로, 오픈소스인 MLflow를 주로 사용한다.

  • 실험 관리와 Tracking 기능
    여러 사람들이 하나의 MLflow 서버 위에서 각자 실험하고 그 내용을 공유 및 기록할 수 있다.
    각 실험의 소스코드, 하이퍼파라미터, metric, 아티팩트 등의 로그를 저장할 수 있다.
    웹UI도 제공해서 간단하고 쉽게 볼 수 있다.

  • Model Registry
    MLflow로 실행한 ML 모델을 모델 저장소에 등록할 수 있다. 공유와 활용이 쉬워진다.
    모델이 저장될 때마다 모델 버전이 자동으로 올라간다.

  • Model Serving
    Model Registry에 있는 모델을 REST API 형태로 간단하게 serving할 수 있다.
    간단하게 기능만 되니 잘 사용하지는 않는다.

  • local에서 실행 후 웹 ui 띄우는 코드

mlflow server --host 127.0.0.1 --port 8080
# 이후 localhost:8080으로 접속
  • Experiment 단위로 프로젝트를 구성하면 된다.
# Experiment 생성
mlflow experiment create --experiment-name 실험명
# Experiment 리스트 확인
mlflow experiments search
  • Project : 프로젝트 메타 정보를 저장하는 폴더로 패키지 모듈 상단에 있다.
    MLProject와 python_env.yaml(파이썬 버전과 dependancies 정의)을 정의하면 된다.

  • Run : 코드 실행. 보통 모델 학습 코드를 말한다.
    한번의 run에 version, metric, parameter, artifacts 등을 저장한다.
    train.py에 log_param()이나 log_metric() 같은 함수로 정의해두면 된다.

# URI는 MLproject 파일이 있는 디렉토리나 git 저장소 URL을 말한다.
mlflow run URI -P 파라미터 --experiment-name 실험명
  • train.py에 mlflow.autolog()기능을 쓰면 자동으로 로그를 기록해준다.
    pytorch에선 간혹가다 지원되지 않는 경우가 있다.

  • UI내에서 실험 결과를 가지고 시각화해서 비교할 수 있다.

  • 특정한 run을 찾고싶으면 search 할 수 있다.

query = "params.l1_ratio = '0.01' and metrics.'traing_score' >= 0.5"

run = MlflowClient().search_runs(
	experiment_ids="123456789",
    filter_string=query,
    oreder_by=["metrics.training_score DESC"]
)[0]

print(run)

모델 평가

  • offline 평가와 online 평가에 대한 내용은 TIL #544 참고

  • Online 평가는 대부분 A/B테스트를 사용한다.
    통계적 유의미를 가지기 위해 오래걸리기 때문에 MAB같은 최적화 기법을 같이 쓰기도한다.
    트래픽을 일정 비율로 나눠 A/B를 가르는 방식으로 한다.

  • Canary Test
    탄광의 카나리아처럼, 새 모델로 일정부분(10% 미만에서 시작)의 트래픽을 서빙해본 뒤 결함이나 문제점을 모니터링해서 체크한다.

  • Shadow Test
    Production 버전과 같은 트래픽을 새로운 모델에 적용해 기존 서빙에는 영향을 안끼치면서 테스트. 섀도우는 모든 input 트래픽을 받기만하고 실제 output은 클라이언트에게 전달하지 않고 결과 비교만 한다.


더 공부하면 좋을 것

개발

  • Engineer도 개발 역량이 필수적이다.

  • python에 대해서 lowlevel 까진 아니더라도 generator, decorator, 멀티 프로세싱, 메모리 영역 같은 레벨까지는 공부해보면 좋다.

  • 서버를 항상 사용해야 하기 때문에 linux의 shell script와 파일 시스템, 권한, process, kernel등에 대해 학습하면 좋다.

  • 클린코드, 클린 아키텍처, DDD

데이터 엔지니어링

  • 실시간 스트리밍 처리 kafka, Apache Spark streming
  • 메세지 시스템 Kafka, Redis, AWS SQS
  • 분산처리 Ray, Spark
  • 데이터 웨어하우스 GCP Big Query, AWS Redshift
  • BI(시각화) Superset, Redash, Metabase

CS

  • 자료구조, 알고리즘, OS, 네트워크, DB 등

Cloud

  • Docker, 쿠버네티스, CI/CD 등

  • IaaC : Terraform

  • Monitoring : 프로메테우스, 그라파나

Modeling

  • 최근 논문의 방향성, SOTA 모델 등은 주기적으로 파악해두면 좋음
    중요한건 Why?

  • Uber, Door Dash같은 기업의 기술블로그나 국내 컨퍼런스 영상을 참고해도 좋음

profile
Backend Dev / Data Engineer

0개의 댓글