출처 :
1. https://pebpung.github.io/wandb/2021/10/06/WandB-1.html
2. https://aws.amazon.com/ko/what-is/mlops/
1. MLOps
MLOps는 ML 워크플로우 및 배포를 자동화하고 단순화하는 작업이다.
용어 그대로 ML 어플리케이션의 개발(Dev)을 ML 시스템 배포 및 운영(Ops)와 통합하는 ML 관행이다. MLOps를 통해 기업에서는 고객에게 더 나은 서비스의 제공을 위한 ML 및 AI의 활용할 때 전체적인 주기의 관리 자동화 및 표준화가 가능하다. 이 프로세스에는
모델 design 단계 → 모델 개발, 테스트, 및 검증 단계 → 어플리케이션에 적용하기 위한 배포, 운영, 관리 단계가 있다.
인턴을 하면서 협력 연구실에서 훈련시킨 모델의 아키텍처와 checkpoint를 받아다가 자사에서 어플리케이션에 적용하기 위해 aws를 통해 배포하는 경험을 해보았다. 물론 연구원님께서 모델을 내가 이해할 수 있도록 어떻게 모델을 훈련시켰는지 매주 회의를 통해 데이터 수집, 훈련과정, 훈련 결과 (성능 비교)를 공유하고 핸들러 파일 및 모델 작동법까지 친절하게 알려주셨지만 이를 이해하는데도 시간이 걸리기도 하고, (일부 내 능력부족 포함...) 배포까지 병목이 걸리기도 했던 것 같다. 그래서 이를 관리하는 도구, workflow인 MLOps가 얼마나 기업에게 중요한 프로세스인지 나름 잘 이해하고 있다고 생각한다. 내가 활용했던 AWS의 아마존 세이지메이커는 데이터를 준비하고 ML 모델을 구축, 훈련 및 배포하는 데 사용할 수 있는 완전관리형 서비스이다. 완전 관리형 인프라, 도구 및 워크플로우가 있는 모든 유즈 케이스에 적합하고 Jupyter Notebook으로 훈련부터 배포까지 가능하기에 나같이 파이썬밖에 모르는 바보도 .... 사용자들도 실행결과를 확인해보면서 편하게 이용할 수 있다.
2. MLOps 의 모델 개발 단계를 위한 툴, WandB
2.1 머신러닝 configuration
모델을 훈련시키 위해 꼭 필요한 것
- 데이터셋, 평가지표, 모델, 하이퍼파라미터
- 하지만 하이퍼파라미터(learning rate, batch size, dropout의 p, optimizer or loss function)를 바꿔가면서 그 성능을 하나하나 기록하고 비교하는것은 쉽지 않은 일이다.
- 그래서 이들을 관리하기 위해 사용하는 툴이 'WandB'이다.
2.2 WandB
WandB(Weights & Biases)란 원하는 태스트에 적합한 최적의 모델을 빨리 만들 수 있도록 도와주는 ML Experiment tracking tool이다. 기능으로는 machine learning experiment tracking, model evaluation, hyperparameter tuning, model and dataset versioning 등이 있다고 한다.
[ Sign In ]
- 구글 또는 깃헙 계정으로 손쉽게 가입할 수 있다. - 로그인 해서 create new project 해놓는다.
[ Machine Learning Experiment Tracking ]
(1) Install WandB library and login
첫 로그인을 할 때는 API키를 입력하라고 뜨면서 링크를 알려주니 그대로 링크 타고 들어가서 나오는 키 값을 입력해주면 된다.
(2) DataLoader 세팅 & Model 구축
평소에 dataloader와 모델 정의 방식대로 그대로 한다고 쳐보자.
여기서는 이미지 분류 태스크를 수행하기 위하여 아주 간단한 MLP 모델을 구축한다고 생각하자.
(3) hyperparameter config 세팅 + 모델 Training 단계
hyperparameter으로 epoch, learning rate, batch size, dataset, model architecture, seed값 등 다양한 것을 설정해주는 config 파일을 init해준다.
여기서 project 이름은 사전에 만들어 놓은 new project의 이름을 설정해주면 된다.
이제 training & validation 단계인데,
wandb.log를 통해서 원하는 지표를 설정한 wandb project에 저장할 수 있다.
wandb는 일단 로깅 장치라 체크포인트를 로컬에 따로 저장하는 건 필수.
[ Hyperparameter Tuning ]
하이퍼파라미터 튜닝을 자동화시키는 장치도 지원해준다.
예전에 데이콘에서 ML 모델 구현할 때, 선형 회귀모델 (릿지, 라쏘, 엘라스틱넷), 로지스틱 회귀모델, DT, LightGBM, XGBoost 등등 다양한 모델을 앙상블하고 로스를 가장 작게 해주는 하이퍼파라미터를 자동으로 구해주는 'AutoML' 장치와 비슷한 느낌인 것 같다.
Sweep 이라고 불리는 이 도구는 하이퍼 파라미터를 자동으로 최적화해준다. 튜닝 방식 (search방식)으로는 grid search, random search, bayes search 등이 있는데, 사용자가 방법을 선택하면 그 방식으로 서치를 완료하고 WandB 프로젝트 대시보드를 통해 확인할 수 있다.
사실 아직 본격적으로 이렇게까지 하이퍼파라미터 튜닝은 안할 것 같고, 하고 싶어도 무료 gpu 런타임으로는 튜닝은 택도 없을 것 같아 자세한 설명은 생략한다.
3. WandB with HuggingFace (for NLP)
허깅페이스 Transformers 라이브러리로 워낙 좋은 nlp 모델들을 쉽게 불러올 수 있기 때문에 WandB에서도 허깅페이스의 라이브러리를 활용한 Training tutorial 또한 소개해두었다.
주어진 Sequence를 통해 카테고리를 나누는 classification task라고 가정해보자.
yahoo_answers_topic dataset을 가져왔다. 피쳐로는 id, topic, question_title, question_content, best_answer가 있는데 여기서 'question_title'로 'topic'을 예측하는 모델을 훈련시킬 것이다. 'topic'은 라벨이 10개이다. (0~9)
토큰화와 패딩을 해주고, 사용할 베이스라인 모델도 불러와준다.
이제 Training Args를 지정해준다.
추가로, validation을 위한 지표 (허깅페이스에서 제공하는 지표)로 accuracy를 정해줬다.
checkpointing 작업을 WandB 페이지 상에서 하려면 environment를 trainer 함수 init 전에 해줘야 한다.
아래처럼 = "checkpoint"로 해두면 train의 매 epoch마다 checkpoint를 저장할 수 있다. = "end"로 해두면 모든 훈련의 종료 이후에 checkpoint가 저장된다.
마지막, trainer 함수이다. args에는 사전에 정의한 training args를 입력하고 compute_metrics도 사전에 정의한 메트릭으로 입력한다.
추가로, 파이썬 스크립트에서 실행하면 알아서 wandb 작업이 (훈련이) 종료됨을 인식이 되지만 노트북의 경우에는 마지막에 wandb.finish()를 통해서 훈련이 종료되었음을 알린다.
'Study > 머신러닝' 카테고리의 다른 글
시계열 분해 (1) | 2024.07.22 |
---|---|
[시계열] 스무딩 기법들 (0) | 2024.06.29 |
차원 축소 (0) | 2023.10.29 |
앙상블 학습 - Bagging (0) | 2023.09.25 |
Decision Tree : 가지치기 (pruning)에 대하여 (0) | 2023.09.15 |