저번 포스팅에서 배운 Mlops 과정을 2주동안 "추천 시스템" project로 모델 배포 및 유지 관리를 해 볼 수 있는 시간을 가져보았다. 물론 bert model을 사용하진 않았지만 경진대회때 model의 성능을 끌어올리기 위해 rmse값을 낮추는 그런 practice를 해보았기 때문에 model 학습에 대한 어느정도 개념이 잡혀있었고 서버측에서 fastapi를 사용 client측에서 streamlit 그리고 학습한 모델에 대해 mlflow, airflow로 관리해준다는 전체적인 mlops 개념을 배울 수 있었기 때문에 프로젝트 면에서 많은 걸 얻고 갈 수 있었다고 생각한다.
일단 topic은 영화 추천 시스템으로 결정했고 one of the main topic 주제였기 때문에 다른 걸 해보면 어떨까 하고 팀원분들하고 고민을 하다가 그래도 영화 추천 시스템은 netflix 등 여러 스트림에서 많이 구현되고 있는데다가 샘플 코드도 여럿 있고 2주 안에 마무리 하려면 아무래도 전체적인 큰 틀을 배워서 마무리를 해보자 해서 하게 되었다. dataset은 kaggle에 있는 tdmb영화 dataset를 가져왔고 아무래도 오래된 datset이다 보니 최근 영화보단 옛날 영화 위주로 결과가 나왔고 시작하기 전에 일단 배경과 목적을 소개하고 시작하도록 하겠다.
일단 머신러닝에 대해서 저번 경진대회는 모델을 딱 학습하고 어떤 부스팅 기법을 사용하면 좋은지, 어떤 feature enginenering을 add하면 좋은지 거기서 끝났지만 이번에는 모델의 f1,precision or rmse(mae)값에 너무 focus 하기보다는 전체적인 모델이 나왔을때 (여기선 pickle.model) 이걸 기반으로 어떻게 추천을 하고 server측에서, 그리고 client측에서, 이 모델을 전체 틀에서 mlflow로 관리하면서 airflow로 자동화를 어떻게 하는지 진짜 실무적인 aspect에서 볼 수 있었다고 생각한다. 초기에는 다른 팀원분께서 좋은 아키텍쳐 그림을 주셔서 전체적인 flow를 이해하는데 정말 도움이 되었다고 생각한다.
하지만 막상 구현할때 실제 수행결과는 시간상의 문제로 ec2에 배포하지 않고 로컬로만 docker 환경에서 pickle 파일을 fastapi가 참조하는 위치로 복사하는 뒤에 서버를 재구동을 하는 방식으로 구현했고
좋은 팀원분들과 이렇게 전체적인 workflow를 함께 배우고 구현하면서 큰 흐름에서 머신러닝에 대한 인사이트를 많이 얻었다고 생각한다.
일단 머신러닝 모델링 후에는 협업 필터링(collaborative) 을 스타트로 단순히 협업 말고도 여러 추천시스템을 개발해보자라고 결론이 나서 통계기반 (demographic), 컨텐츠 기반 (contents-based) 및 그리고 날씨 기반(weather-based) 필터링으로 점점 넓히면서 제대로 된 영화 추천 시스템이 구축되었다고 생각한다.
협업 필터링 - 비슷한 취향을 가진 사용자들의 데이터를 통해 개인 맞춤 선호 영화 추천
인구 통계 기반 - vote count 랑 vote averge 등을 사용해서 그룹에서 가장 인기 있는 영화 추천 (ex top 10)
컨텐츠 기반 - 영화의 줄거리,장르, 배우 등 countvectorize -> cosine similarity 사용해서 비슷한 장르, 배우, 줄거리 추천
날씨 기반 - 날씨 api활용해서 오늘의 날씨를 받아서 그에 기반한 영화 추천
이 필터링을 통해서 server 측과 client면에서 < 주로 내가 구현했던 부분이었다> 구조가 어떻게 되는지 fastapi와 streamlit을 활용해서 구현해보았다.
아래 동영상은 전체적인 streamlit에서 demo로 실현한 영상이다.
이 서버와 클라이언트에서 구현된 모델 추천 시스템 Mlflow와 airflow에 훈련하고 모델을 s3에 업로드는 DAG를 생성하고 매일 12시에 생성하도록 구현하였다.
그리고 Docker(devops)에서 airflow와 mlflow를 하나의 docker-compose.yml로 실행하도록 완료하였다.
비록 airflow와 mlflow에서 여러 오류가 터지면서 같이 협업 및 다른팀원분들의 많은 도움을 받아서 완성시켰지만 전체적으로 정말 많이 배울수 있었던 시간이라고 생각한다. 회의도 매일 최소 1시간씩 같이하고 slack 및 zoom으로 코드 공유 및 이해 안되는 부분 공유 하면서 소통이 매우 잘 됐었던 팀이라고 느꼈다. 이 프로젝트를 진행하면서 (매번 프로젝트를 진행하면서 느끼지만) 체력적으로 많이 지쳤지만 많이 힘을 쏟은만큼 그 이상의 결과와 뿌듯함이 생겼던 거 같다.
'AI' 카테고리의 다른 글
<12일차> NLP 경진대회 (0) | 2025.03.13 |
---|---|
<10,11일차> Computer vision / 경진대회 진행 (0) | 2024.11.08 |
<8일차> Mlflow, FastApi, Bertmodel, Airflow ... (2) | 2024.09.25 |
<7일차> ML 경진대회 : Regression Wrap up (5) | 2024.09.20 |
<6일차> LLM Project : 스포츠 규정에 관하여 답하는 QA Engine 개발 (3) | 2024.08.27 |