일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- KLUE
- N21
- Data Viz
- N2N
- AI 경진대회
- Ai
- 2023 현대차·기아 CTO AI 경진대회
- Transformer
- mrc
- Bart
- 기아
- 데이터 구축
- 현대자동차
- 데이터 시각화
- dataset
- 딥러닝
- nlp
- seaborn
- Self-attention
- Attention
- pyTorch
- AI Math
- matplotlib
- word2vec
- RNN
- Bert
- Optimization
- ODQA
- passage retrieval
- GPT
- Today
- Total
쉬엄쉬엄블로그
(AI 서비스 개발 기초) MLflow 본문
이 색깔은 주석이라 무시하셔도 됩니다.
Part 3. 더 완성된 제품으로 개발하기
MLflow 개념 잡기
MLflow가 없던 시절
- 사람들이 각자 자신의 코드를 Jupyter Notebook에서 작성
- 머신러닝 모델 학습시 사용한 Parameter, Metric을 따로 기록
- 개인 컴퓨터, 연구실 서버를 사용하다가 메모리 초과로 Memory Exceed 오류 발생
- 학습하며 생긴 Weight File을 저장해 다른 동료들에게 공유
- Weight File 이름으로 Model Versioning을 하거나 아예 Versioning을 하지 않음
MLflow가 해결하려고 했던 Pain Point
- 실험을 추적하기 어렵다
- 코드를 재현하기 어렵다
- 모델을 패키징하고 배포하는 방법이 어렵다
- 모델을 관리하기 위한 중앙 저장소가 없다
MLflow
머신러닝 실험, 배포를 쉽게 관리할 수 있는 오픈소스
관련 오픈소스 중 제일 빠르게 성장 중
맛보기
CLI, GUI(웹 인터페이스) 지원
Code 예시
MLflow의 핵심 기능
- Experiment Management & Tracking
- 머신러닝 관련 “실험”들을 관리하고, 각 실험의 내용들을 기록할 수 있음
- 예를 들어, 여러 사람이 하나의 MLflow 서버 위에서 각자 자기 실험을 만들고 공유할 수 있음
- 실험을 정의하고, 실험을 실행할 수 있음. 이 실행은 머신러닝 훈련 코드를 실행한 기록
- 각 실행에 사용한 소스 코드, 하이퍼 파라미터, Metric, 부산물(모델 Artifact, Chart Image) 등을 저장
- 머신러닝 관련 “실험”들을 관리하고, 각 실험의 내용들을 기록할 수 있음
- Model Registry
- MLflow로 실행한 머신러닝 모델을 Model Registry(모델 저장소)에 등록할 수 있음
- 모델 저장소에 모델이 저장될 때마다 해당 모델에 버전이 자동으로 올라감(Version 1→2→3…)
- Model Registry에 등록된 모델은 다른 사람들에게 쉽게 공유 가능하고, 쉽게 활용할 수 있음
- Model Serving
- Model Registry에 등록한 모델을 REST API 형태의 서버로 Serving 할 수 있음
- Input = Model의 Input
- Output = Model의 Output
- 직접 Docker Image 만들지 않아도 생성할 수 있음
MLflow Component
- MLflow Tracking
- 머신러닝 코드 실행, 로깅을 위한 API, UI 제공
- MLflow Tracking을 사용해 결과를 Local, Server에 기록해 여러 실행과 비교할 수 있음
- 팀에선 다른 사용자의 결과와 비교하며 협업할 수 있음
- MLflow Project
- 머신러닝 프로젝트 코드를 패키징하기 위한 표준
- Project
- 간단하게는 소스 코드가 저장된 폴더
- Git Repo
- 의존성과 어떻게 실행해야 하는지 저장
- MLflow Tracking API를 사용하면 MLflow는 프로젝트 버전을 모든 파라미터와 자동으로 로깅
- MLflow Model
- 모델은 모델 파일과 코드로 저장
- 다양한 플랫폼에 배포할 수 있는 여러 도구 제공
- MLflow Tracking API를 사용하면 MLflow는 자동으로 해당 프로젝트에 대한 내용을 사용함
- MLflow Registry
- MLflow Model의 전체 Lifecycle에서 사용할 수 있는 중앙 모델 저장소
설치
- pip install mlflow
MLflow Tracking - Experiment
MLflow에서 제일 먼저 Experiment를 생성
하나의 Experiment는 진행하고 있는 머신러닝 프로젝트 단위로 구성
- 예) “개/고양이 이미지 분류 실험”, “택시 수요량 예측 분류 실험”
정해진 Metric으로 모델을 평가
- 예) RMSE, MSE, MAE, Accuracy
하나의 Experiment는 여러 Run(실행)을 가짐
Experiment 생성
mlflow experiments create --experiment-name my-first-experiment
ls -al을 사용해 폴더 확인하면 mlruns라는 폴더가 생김
리스트 확인
mlflow experiments list
MLflow 머신러닝 코드 작성
모델에 필요한 라이브러리 설치
폴더를 생성한 후, 머신러닝 코드 생성
MLflow Project
프로젝트(MLProject)
- MLflow를 사용한 코드의 프로젝트 메타 정보 저장
- 프로젝트를 어떤 환경에서 어떻게 실행시킬지 정의
- 패키지 모듈의 상단에 위치
MLProject 생성
MLflow Tracking - Run
Run(실행)
- 하나의 Run은 코드를 1번 실행한 것을 의미
- 보통 Run은 모델 학습 코드를 실행
- 즉, 한번의 코드 실행 = 하나의 Run 생성
- Run을 하면 여러가지 내용이 기록됨
Run에서 로깅하는 것들
- Source : 실행한 Project의 이름
- Version : 실행 Hash
- Start & end time
- Parameters : 모델 파라미터
- Metrics : 모델의 평가 지표, Metric을 시각화할 수 있음
- Tags : 관련된 Tag
- Artifacts : 실행 과정에서 생기는 다양한 파일들(이미지, 모델 Pickle 등)
Run으로 실행
mlflow run logistic_regression --experiment-name my-first-experiment --no-conda
mlflow run logistic_regression --experiment-name my-first-experiment
MLflow Tracking - UI
UI 실행
mlflow ui
localhost:5000로 mlflow UI 접속
MLflow Tracking - Experiment / Run 관계
- 여러 실험을 가질 수 있음
- 실험에 대한 실행(run)이 여러가지 있을 수 있음
- run 안에서는 파라미터와 메트릭이 다를 수 있음
MLflow autolog
파라미터를 매번 명시해야 할까?
Run으로 실행
mlflow run logistic_regression_with_autolog --experiment-name my-first-experiment --no-conda
주의사항
모든 프레임워크에서 사용 가능한 것은 아님
MLflow에서 지원해주는 프레임워크들이 존재
- 예) pytorch.nn.Module은 지원하지 않음(반면 Pytorch Lightning은 지원)
자세한 내용은 https://mlflow.org/docs/latest/tracking.html#id2 에서 확인
MLflow Parameter
MLflow Hyper Paramter Tuning
autolog와 하이퍼 파라미터 튜닝도 같이 할 수 있음
MLflow 서버로 배포하기
MLflow Architecture
MLflow Tracking Server와 외부 Storage 사용하기
mlflow server 명령어로 Backend Store URI 지정
mlflow server --backend-store-uri sqlite:///mlflow.db --default-artifact-root $(pwd)/artifacts
환경변수 지정
Experiments를 생성한 후, Run
데이터 확인
artifacts, mlflow.db 생성 확인
MLflow 실제 활용 사례
- MLflow Trackign Server는 하나로 통합 운영
- Tracking Server를 하나 배포하고, 팀 내 모든 Researcher가 이 Tracking Server에 실험 기록
- 배포할 때는 Docker Image, Kubernetes 등에 진행(회사의 인프라에 따라 다름)
- 로그나 모델이 한 곳에 저장되므로, 팀 내 모든 실험을 공유할 수 있음
- Artifact Storage와 DB 역시 하나로 운영
- Artifact Storage는 GCS나 S3같은 스토리지 이용
- DB는 CloudSQL이나 Aurora RDS 같은 DB 이용
- 이 두 저장소는 Tracking Server에 의해 관리
- Tracking Server를 하나 배포하고, 팀 내 모든 Researcher가 이 Tracking Server에 실험 기록
출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)
'부스트캠프 AI Tech 4기' 카테고리의 다른 글
(KLUE) 자연어의 전처리 (0) | 2023.08.15 |
---|---|
(KLUE) 인공지능과 자연어 처리 (0) | 2023.08.11 |
(AI 서비스 개발 기초) Docker (0) | 2023.08.09 |
(AI 서비스 개발 기초) Linux & Shell Command (0) | 2023.08.08 |
(AI 서비스 개발 기초) 웹 서비스 형태 - Streamlit (0) | 2023.08.07 |