MLOps Project 회고

2024. 10. 12. 18:05Upstage AI Lab

프로젝트 진행 기간 (9월 26일 - 10월 11일)

실질적 프로젝트 기간은 위에 적어 놓은 기간과 같다.

프로젝트를 진행함에 있어서 필요한 지식들은 사전에 이미 다 교육을 했다.

프로젝트 주제

주제 : 배운 MLOps를 적용하기 위한 프로젝트

목표 : 시각 장애인들에게 손쉽게 OTP인식이 가능하도록 MLOps 진행. 시각 장애인이 손글씨로 비밀번호를 입력하면 이를 인식하여 음성으로 인식된 숫자를 읽어주는 기능, 인식된 숫자는 모델 재학습에 이용.

 

학습시 사용한 데이터

  1. MNIST dataset
  2. EMNIST dataset

주제 선정 접근 방식

이번 프로젝트에서 함께하는 팀원들의 참여도가 좋지 않았다.

나를 포함한 5명 중 2명은 취업, 대학원 면접이 수시로 있어서 집중해서 회의하기도 어려웠고,

다들 ML경진 대회 이후라서 그런지 참여도가 많이 낮았다.

 

그리고 다들 backend 지식에는 약해서 사실상 Ops를 하기가 힘들었다.

강사님 강의도 이해하기 힘들어서 우리 팀원 모두 강의 내용을 다 이해하지 못했다.

 

프로젝트는 진행해야겠지, 시간은 별로 없지...

그래서 혼자서 고민하다가 위와 같은 dataset을 이용한 주제를 선택했다.

 

우선 팀장님이 CV전공자라 이미지 인식으로 접근해보려고 했고, MNIST dataset은 iris dataset처럼 거의 교과서적인 dataset이라 MNIST dataset을 이용한 CV프로젝트를 진행하려고 생각했다.

(어쩌피 이번 프로젝트의 핵심은 모델 개발이 보다는 Ops이기 때문에 여기에 힘을 더 줘야 한다)

 

감사하게도 팀원들은 나의 이런 아이디어에 긍정적으로 반응해주었다.

이제 기술적 스택과 dataset은 결정되었으니 멋지게 포장할 이야기가 필요했다.

 

내가 처음 가져간 아이디어는 금융권에서 통장 비밀번호 4자리 인식으로 스토리텔링을 해서 가져갔는데 다른 한 분이 여기에 추가해서 최종적으로 위에서 언급한 목표대로 프로젝트를 진행하기로 했다.

역할 배분

항상 팀플에서 모듈 단위로 개발할 때 가장 어려운 부분이다.

각 모듈에서 어떤 기능을 하는 함수를 구성하고, 각자 branch는 어떤 식으로 구성하고 다시 merge 할지 고민이 필요한 부분이다.

처음에 git/github를 배울 때 강사님께서 강조하셨던 부분이기도 하다.

시행착오

이번 팀플에서 역할 배분 때문에 반나절을 날렸다. 이와 관련한 시행 착오를 몇가지 작성해보겠다.

 

이슈1. 배울 때 진행하는 팀 프로젝트에서는 모듈 단위로 개발할 경우 몇몇 사람은 배워야 할 내용을 배우지 못한다.

 

특히 이번 프로젝트에서는 MLFlow, Airflow를 다뤄보는게 프로젝트의 핵심이었다.

(FastAPI도 있었지만 큰 부분은 아니었음...)

 

다른 말로, 누군가에게는 프로젝트에서 배워가는 것이 없다는 뜻이다.

 

이것 때문에 서로 눈치만 보다가 각자 MLFlow, Airflow파트를 하고 싶어서 시간을 끌었다.

결국... 내가 포기하고 api, DB, 서버 파트를 담당하고 MLflow, Airflow 파트를 포기했다.

 

이슈2. 팀원들의 필요는 역할 배분하기 전에 파악하라

 

정말 당연한 말인데 이번에 이걸 안 지켜서 각자 파트 배분하고 불만이 조금씩 생겨서 다시 짰다.

정리하면 바람직한 역할 배분 순서는

 

프로젝트 구체화(모듈 구조, 필요한 기술요소 포함) -> 구체화 한 것을 바탕으로 팀원들의 요구 사항 파악 -> 역할 배분

 

위와 같은 순서로 이어져야 한다.

 

TIP

이슈2에 나온 과정을 통해 구체화한 내용과 팀원들의 요구 사항들을 GPT에 넣어서 예시 코드와 함께 역할 배분을 해달라고 하면 순식간에 해준다.

(o1 model 이용할 것!)


이번에는 구체화도 정확하게 안하고, 역할 배분을 먼저하려고 해서 결국 역할 배분이 흐지부지하게 되었다.

결국 이번 프로젝트에서는 나중에 혼자서 내가 GPT랑 씨름하면서 api, model, db 요소 다 만들고 팀원들에게 airflow, mlflow파트를 부탁했다.

 

model의 경우 나중에 팀장님이 만들어주신 모델로 바꿨다.

 

이렇게 하니까 나름대로 나쁘지 않게 역할 배분이 되었다.

(긴급 수습하다가 이렇게 되었으므로 따라하지 말것...)

진행 과정 및 후기

손글씨 인식

위 사진처럼 만들었다. 정확도가 좀 떨어졌다. (troubleshooting에서 다시 다루도록 하겠다)

이후 사용자가 적은 개별 숫자를 서버에 있는 이미지 저장 폴더에 저장하고 모델 재학습에 사용한다.

 

다른 model, mlflow, airflow부분은 내가 하지 않아서 여기에서는 특별하게 작성하지 않았다.

troubleshooting

모델 인식도가 왜 떨어졌을까?

초기 실험 단계에서 숫자를 입력했던 형식

초기 실험에서는 위와 같이 아이패드에 작성한 손글씨 이미지 파일을 모델에 직접 입력하고 모델이 알아서 숫자를 인식하도록 했다.

 

MNIST data로 모델을 학습하면 acc는 97-98%정도 나온다.

실제 모델이 입력받은 데이터와 훈련한 데이터가 달라서 정확도가 떨어진다고 예측했다.

 

그래서 최대한 모델이 숫자를 입력받을 때 MNIST data랑 비슷하게 인식받을 수 있도록 인식 환경을 개선했다.

그게 위에 검정색 캔버스로 각 숫자를 나눈거다.

 

airflow까지 진행하고 사용자가 입력한 dataset으로 다시 재학습하는 파이프라인을 구성하면 구체적인 숫자로 모델 정확도 개선을 볼 수 있었을 것 같은데 airflow의 전반적인 파이프라인을 완성하지 못해서 정확하게 얼만큼 개선되었는지는 알 수가 없었다.

 

그래도 느끼기에 조금은 정확도가 올라갔다.

모델 성능 향상을 위한 인프라를 만들어 놓고 그걸 시도해보지 못한게 많이 아쉽긴하다

 

모델의 학습 데이터가 부족해서 성능이 떨어진 것은 아닐까?

 

그럴 수도 있을 것 같아서 EMNIST data로 팀원 중 한 분이 재학습을 시도했는데 인식률에는 큰 차이가 없었다.

 

그리고 나는 EMNIST dataset을 이용해서 영어 대/소문자, 숫자를 인식하는 모델을 만들어보려고 했는데 데이터가 너무 많고, 이를 인식하기위해 너무 복잡한 신경망(ResNet-18)을 사용해서 한 번 에폭을 도는데 1시간 조금 넘게 걸렸었다. (뻘찟...

향후 방향성

프로젝트 기간 안으로 airflow를 구현하기에는 시간이 부족했다.

 

airflow dag

  • 이미지 감지 >> 새로운 손글씨 이미지 전처리 >> 모델에 넣어 재학습 >> 기존 모델과 성능 비교 후 저장

여기에서 재학습하다가 zombie job이 발생해서 오류 해결하다가 시간이 부족해서 더 이상 진행하지 못했다. 이걸 해결해서 모델의 정확성을 높이면 어땠을까 생각해본다.

 

그리고 음성으로 읽어주는 것은 나중에 서비스를 제공하면 핵심이겠지만 이번 프로젝트에서는 그렇게 중요한 부분이 아니라 생각해서 넣지는 않았다. 근데 나중에 이걸 더 발전 시킬 수 있으면 넣어도 나쁘지 않을 것 같다.

파일 구조

├── code
│   ├── api_module.py
│   ├── data_processing.py
│   ├── model.py
│   ├── database.py
│   ├── mlflow_model.py
└────── monitoring.py
│── dags 
│    ├──dags.py
│
└─── data

마무리하며

좋은 도구들을 많이 알 수 있어서 좋았다.

MLflow, Airflow 등...

그리고 발표할 때 들었던 DVC(Data Version Control)!

 

근데 사용 방법이나 코드를 익힐 수 있는 기회가 생각보다 많이 제한이 되어서 아쉬웠다.

(내가 주로 담당한 파트가 아니다보니...)

 

특히 MLflow는 나중에 모델 실험할 때 사용하면 엄청 유용하겠다는 생각을 했다.

앞으로 진행하는 대회에서 MLflow를 Hyperparameter기록용으로 써보고 싶다는 생각을 했다.

 

그리고 Airflow 내가 사업하면 도움이 많이 되겠다는 생각을 했는데 전혀 만져보지를 않아서... 나중에 부캠 끝나고 다시 공부할 때 다시 봐야 겠다는 생각을 했다.

 

이번 프로젝트에서도 마찬가지로 GPT를 많이 사용했다.

그러다 보니 머리속에 든게 별로 없는데 그럼에도 불구하고 전보다 조금은 괜찮은 것은 머리를 채우기 위해 필요한 자료들을 가지고 있고 최소한 어떤 상황에서 어떤 기술을 이용해야 한다는 것 정도는 안다.

 

다른 말로 하면 코딩 실력이 부족하다고 할 수 있겠다.

근데 이건 어쩔 수 없다. 부트캠프가 배우는 양에 비해 워낙 단기간에 진행하다보니까 최대한 받아들이고 끝나고 다시 혼자서 공부하는 수밖에 없다.

(끝나고 꼭 공부해라... 밥상 다 차려 놓았는데 안 떠먹으면 어떻게 하겠다는거냐)

 

회고 끝!

'Upstage AI Lab' 카테고리의 다른 글

CV 경진대회 회고  (1) 2024.11.10
Pytorch, DL 공부  (3) 2024.11.09
MLOps 강의를 들으며  (3) 2024.09.25
ML 경진 대회 (feat. 부동산 가격 예측)  (11) 2024.09.18
AI를 위한 기초 수학  (0) 2024.08.26