지난 mlops 스터디에서 한 내용들을 간단하게 정리해봤습니다.
일단 간단히 요약해보자면
- 데이터 준비, mlflow기초, fastapi기초
- mlflow로 결과 트래킹 후 fastapi로 단순 배포
- 다양한 추론 패턴 구현
먼저 제가 aws에 대한 경험이 부족하여 다음 영상을 시청하고 많은 도움을 얻었습니다.
https://www.kaggle.com/code/nageshsingh/mask-and-social-distancing-detection-using-vgg19/notebook
먼저 이 데이터를 통해 진행하였습니다.
일단 먼저 aws cli를 통해 s3에 다음과 같이 업로드해주었습니다.
그리고 xml 파일들을 json으로 변경해주었고
https://github.com/200000001/mlops__/blob/main/xml%20to%20json
따로 annotations가 없는 이미지만 가지고 있는 데이터셋은 다음과 같이 직접 만들어 주었습니다.
https://github.com/200000001/mlops__/blob/main/to%20json.py
이후 glue crawler를 이용하여 테이블을 생성해주었고 athena로 제대로 데이터들이 들어갔는지 테스트하는 과정을 거쳤습니다.
이것으로 초반 데이터 준비가 끝났습니다.
다음으로는 mlflow, fastapi에 대하여 작업을 해주었습니다.
먼저 mlflow 기초의 과정은
- mlflow를 docker를 사용하여 ec2 서버에 올린다.
- 간단한 학습을 mlflow에 등록하여 테스트해본다.
- 디렉터리를 s3로 설정해준다.
- 외부에서 진행하는 작업들이 mlflow에 잘 등록되는지 확인한다.
그다음으로는 fastapi에 대한 진행순서입니다.
- 간단한 api를 정의하여 "hello world"를 출력해본다.
- postgresql를 도커에 띄워본다.
- postgresql와 fastapi를 연결한다.
- 모델을 정의한 뒤 테이블이 잘 생성되었는지 확인한다.
- swagger로 db가 잘 트랜잭션 됐는지 확인한다.
- 비동기 api를 만들어본다.
그다음으로는 기초 CNN모델을 학습하는 과정입니다.
- colab을 사용한다.
- cnn 기초 모델을 준비한다.
- 학습을 진행한다.
- mlflow에 잘 로깅되었는지 확인한다.
그다음은 FastAPI로 모델 배포 과정입니다.
제가 했던 추론 패턴은 web single 패턴과 유사한 점을 가지고 있습니다.
따라서 다양한 추론 패턴을 적용해보고자 저는 병렬 마이크로 서비스 패턴을 활용해보았습니다.
위와 같은 과정을 병렬 마이크로 서비스 패턴을 이용해보았습니다.
이 스터디를 따라가면서 정말 많은 시행착오들이 있었습니다. 위 정리들은 간단히 결과 값만 올려둔 것인데, 이제 사소한 준비 작업들을 진행하면서 오류들을 해결하는데 엄청나게 구글링을 하고 제가 이 쪽에는 경험이 많이 없다 보니 정말 맨땅에 헤딩하는 느낌이었습니다.
mlflow 스터디를 진행하면서 정말 많은 것을 배운 것 같습니다.
일단 사실 이번 스터디를 하기 전에는 mlflow는 이름만 들어봤지 제대로 알지 못하였는데 이번 기회에 나름대로 개념을 이해한 것 같고 aws를 다양하게 이용해 보고 fastapi나 mlflow에 대해 이해하고 docker를 이용한다든지 vscode에서 aws ec2 서버를 연결한다든지 터미널로 다양한 작업하는 것을 해본 적이 많이 없는데 정말 많은 것을 얻어가는 것 같습니다.