머신러닝 Experiment Management 쉽게 하기(feat. neptune ai)
in MLOps on Experiment & Versioning
- neptune ai를 활용해 머신러닝 실험 관리를 더 편하게 하는 방법에 대해 작성한 글입니다
- 키워드 : Machine learning experiment management
머신러닝 실험 관리
- 머신러닝 실험 관리
- 모델링을 할 때, 파라미터를 바꿔가며 실험함
- 1) 초반엔 스프레드시트에 적어두기도 하지만, 실험이 많아지고 복잡해지면 노트북에서 돌린 내용을 스프레드시트에 누락할 수도 있고, 잘못 기록할 수 있음
- 2) 필요할 경우 각 실험에서 나온 이미지 파일을 따로 저장해둬야 함
- 3) 여러 모델을 한번에 비교하고 싶은 경우 1)이나 2)를 직접 눈으로 보고 비교해야 함
- 이런 작업을 좀 더 수월하게 할 수 있도록 Machine Learning Experiment Management Tool들이 개발됨
- 머신러닝 실험 관리에 대한 내용은 제 블로그의 머신러닝 실험을 도와줄 Python Sacred 소개에 간단히 정리해둠
- Sacred는 직접 설치하고, mongodb 연결하는 등 약간의 개발 지식이 필요함
- 기타 도구들은 reddit에 많이 나옴
- 이번에 소개할 neptune ai는 개발 지식이 전혀 필요없고, 코드 몇줄만 추가하면 끝남
neptune ai
- 홈페이지
- “Keep all of your ML stuff organized to advance faster”
- 모든 머신러닝 재료들을 저장하고 빠르게 접근할 수 있도록 만듬
- 모든 것들이 백업되고, 다른 사람과 공유할 수 있음
- 주요 기능 : 밑에서 자세히 다룸
- 1) 실험 과정에서 나오는 각종 데이터 저장
- 2) 실험 버전 관리, 실험 비교
- 3) 노트북 버전 관리, Diff 확인 가능
- 4) 협업을 위한 위키 기능
- 단, 서비스를 제공하고 오픈소스는 아님
- 여러 Framework와 도구와 결합 가능
- sklearn, pytorch, keras, tf, fast.ai, sacred, mlflow, lgbm 등 다양한 라이브러리 지원
- 가격
- 오픈소스가 아닌 서비스를 제공하고 있기 때문에 가격을 확인할 필요가 있음
- 좋은 점은 개인 목적(Individual)인 경우 Free로 사용할 수 있음. 따라서 개인 프로젝트 또는 Kaggle을 할 때 유용할 듯
- 팀에서 사용할 경우 프로젝트 1개만 제공하고, 저장 용량이 10GB임. 실험 관리용으로만 쓴다면 충분히 괜찮은 용량이고 구입하기 전 테스트할 목적으로 사용해도 좋음
- Team Pro는 월 79달러
- 스타트업에겐 50%의 할인을 제공하고 있고, 연구자나 비영리적 조직에서 무료로 사용할 수 있음
- Python이 아닌 R에서도 사용할 수 있음. How to track and collaborate on R experiments with Neptune 참고
- 이제 주요 기능을 neptune ai에서 제공하는 샘플 프로젝트를 보며 설명
1) 실험 과정에서 나오는 각종 데이터 저장
- 프로젝트 메인 페이지
- credit default prediction 참고함
- 각종 실험에 대한 정보가 저장됨. 실험에서 사용한 노트북도 볼 수 있음
- 커스텀해서 보고 싶은 지표를 앞에 둘 수 있고, 특정 태그만 있는 실험을 검색할 수 있음
- 실험 CRED-81을 클릭하면 아래와 같이 나옴
- 왼쪽에 보면 Charts, Logs, Monitoring, Artifacts, Source code, Parameters 등이 있음
- 각종 데이터 저장
- Metric
- Chart에 저장
- Hyperparameters
- Parameters에 저장
- Data versions
- Artifacts에 저장
- Model files
- Artifacts에 저장
- Images
- Logs에 저장
- Source Code
- Source Code에 저장
- Metric
- Charts
- 사용자가 지정한 iter별 auc, production precision을 볼 수 있음
- Logs
- 각종 로그가 저장됨
- 좋다고 생각한 부분은 이미지도 저장할 수 있는 점. matplotlib의 figure를 넘기면 저장됨
- Monitoring은 CPU, RAM 사용량, stderr, stdout이 보임
- Artifacts
- 사용자가 저장한 모델 pkl 파일, train, valid data 파일이 저장됨
- Source code
- 소스 코드를 선택하면 저장된 파일을 확인할 수 있음
- Parameters
- 사용자가 초기에 세팅한 파라미터가 저장됨
- Details
- 실험 관련 메타 데이터가 저장됨
2) 실험 버전 관리, 실험 비교
- Experiment 메인에서 여러 실험을 체크하고 Compare 클릭
- Metric과 Chart를 확인할 수 있음
3) 노트북 버전 관리, Diff 확인 가능
- 프로젝트의 Notebooks를 클릭하면 아래와 같이 업로드한 노트북이 보임
- 여러 노트북 파일을 업로드하고, 노트북 파일을 버전 관리할 수 있음
- Checkpoint로 버전 관리
- 노트북 파일 Diff 확인
4) 협업을 위한 위키 기능
- 프로젝트의 Wiki를 클릭하면 아래와 같이 작성한 문서를 확인할 수 있음
사용 방법
회원 가입 및 프로젝트 확인
- 링크를 통해 회원 가입
- 기본적으로 생성된 프로젝트가 있음
- sandbox
- sandbox를 클릭하면 실험 및 노트북 등을 볼 수 있음
- Show me how를 클릭해서 사용 방법 확인
- 1) Neptune client library 설치
pip3 install neptune-client
- 2) API Token 확인
- API Key를 기억하거나, 환경 변수에 추가하기
Notebook 작성
neptune init
import neptune PARAMS = { 'num_threads': 4, 'seed':777, 'metric':'auc' } neptune.init('user_id/sandbox', api_token='토큰 값 입력')
- 실험 생성
- 실험 객체 생성시 https://ui.neptune.ai/~~~ 이런 URL이 출력됨
neptune.create_experiment(name='ml_modeling', params=PARAMS) neptune.append_tag('test_tag')
코드 중간 중간에 저장하고 싶은 metric, artifact 등을 저장
figure = plt.figure() plt.plot(loss, label="loss") plt.xlabel('epoch') plt.ylabel('loss') neptune.log_metric('loss', loss) neptune.log_image('loss_figure', figure) neptune.log_artifact('model_weights.h5') neptune.set_property(‘data_version’, sha1(data_train))
실험을 닫기(종료)
neptune.stop()
실험 객체 생성, 닫는게 귀찮으면 with로 감싸주면 됨
with neptune.create_experiment(name='ml_modeling', params=PARAMS) as exp: experiment code neptune.log_metric('loss', loss) neptune.log_image('loss_figure', figure) neptune.log_artifact('model_weights.h5')
neptune ai에 노트북 업로드하기(notebook 확장 프로그램 설치)
- jupyter notebook 파일을 쉽게 업로드할 수 있도록 Jupyter Extension을 만듬
설치
pip3 install neptune-notebooks
Enable
jupyter nbextension enable --py neptune-notebooks
- Jupyter Notebook 켜서 확인
- Configure 클릭
- API Token 복사 후 붙여넣기
- 이제 Upload, Download가 활성화됨
- Upload 클릭 후 체크포인트 생성
- neptune ai UI에서 확인 가능
- 아까 업로드한 노트북에서 print를 수정해서 다시 upload함
- 동일한 이름에서 checkpoint 업로드
- 다시 UI에 가보면 체크포인트 2개를 확인할 수 있음
- Compare 클릭 후 2개를 비교
결론 및 정리
- neptune ai는 머신러닝 실험 관리할 때 유용함
- 꼭 머신러닝이 아니여도 데이터 기반해서 여러 시뮬레이션을 돌릴 때 활용하면 좋음
- 오픈소스가 아니지만, 개인 계정은 무료로 사용 가능
- Kaggle 등의 대회에 참여할 때 활용해보길 추천
- 노트북 업로드, 모델 파일 저장, 이미지 저장, 실험 비교 등 다양한 기능을 제공함
- Production 환경에 가기 전, 여러 실험을 돌릴 때 사용하면 좋은 도구
- 설치가 필요없고 간단한 코드 몇 줄만 추가하면 되서 사용성이 좋음
- 회사에서 사용한다면, Team Plan으로 테스트해본 후 가입하면 좋을듯
- 실험 플랫폼을 만들어줄 엔지니어링팀이 있다면 이 프로그램을 먼저 사용해보고 아이디어를 얻을 수 있을듯
Reference
- Neptune AI Document
- Colab에서 neptune 사용하는 코드
- Kaggle ieee fraud detection 대회를 neptune 사용해 파라미터 관리한 코드
- neptune ai 블로그에 좋은 글이 많음
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.