오늘 배운 내용은 모델 관리와 평가, 그리고 향후 더 공부해야할 것들을 정리했다.
ML 모델의 버전 관리.
어떤 데이터, 어떤 파라미터, 어떤 하이퍼파라미터를 사용했을 때 어떤 성능을 기록했는 지 기록
관리 필수 요소
모델 메타 데이터
모델 생성 시점, 사용한 데이터 정보, 모델 성능 등
모델 아티팩트
학습된 모델의 결과물. 모델 파일 or 이미지
Feature / Data
모델에 들어간 데이터. 데이터가 업데이트 되면 버전이 바뀌어야 한다.
머신러닝 모델의 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 생성
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
Docker, 쿠버네티스, CI/CD 등
IaaC : Terraform
Monitoring : 프로메테우스, 그라파나
최근 논문의 방향성, SOTA 모델 등은 주기적으로 파악해두면 좋음
중요한건 Why?
Uber, Door Dash같은 기업의 기술블로그나 국내 컨퍼런스 영상을 참고해도 좋음