'데이터 엔지니어'로 성장하기

정리하는 걸 좋아하고, 남이 읽으면 더 좋아함

AI/MLOps

데이터 잡부의 MLOps도전기 (1) #이미지 불량탐지

MightyTedKim 2024. 1. 7. 23:00
728x90
반응형
23년 하반기는 힘들었지만 재미있었어요. 새로운 분야를 접했거든요
'데이터 잡부'의 도전에 대해 정리하려 합니다 :)


글의 구조는 아래와 같습니다.

  1. 원래 하던 업무 (pipeline)
  2. 제안받은 업무 (MLops)
  3. 수락하게 된 이유

.
글의 타깃 독자는 아래와 같습니다.

  1. MLops/AI 분야 병아리를 구경 온 선배님들
  2. 이제 MLops/AI 분야를 들어오려는 동지들
  3. 폐쇄망에서 어찌 진행했는지 궁금한 엔지니어들

.
자 이제 들어갑니다.

1. 원래 하던 업무 (pipeline)

폐쇄망에서, 해외 공장들의 data를 실시간으로 수집하는 pipeline 구축
#kafka, nifi, airflow, K8s, Ceph

 
기존에는 파이프라인 구축 업무를 했어요
처음 2년은 재미있었는데, 시간이 지나면서 매너리즘에 빠졌어요.

 
* 매너리즘
  1. 고도화보다는 확산
      - 해외 공장 확산을 진행하는 오퍼레이터가 되고 있었어요
 
  2. 새로운 기술 접할 기회 감소
     - 공장 쪽은, 새로운 것 도입하는 것 자체가 risk라 쉽지 않아요
 
  3-1. (외부) 반복 업무로 인한, 프로젝트 내 평가 감소 
     - 계속 반복하는 작업이잖아. 아직도 안됨?

  3-2. (개인) 업무 만족도 감소
      - 그러다 보니 결국 재미가 없었어요.
 
몸은 편했지만, 제 안의 개발 욕구는 만족하지 못한 거죠.
 

2. 제안 받은 업무 (MLops)

Vision AI 플랫폼 Opensource 설계
#폐쇄망 #k8s #Kubeflow

 
팀장님께 상담을 신청했어요.

  1. 재미있는 일이 있으면 달라.
  2. 대신 이제 데이터 상하차는 아니면 좋겠다.
  3. 빡세도 상관없다.

재미 추구하다가, 고생하고 있는 케이

빡세도 상관없다는 말은 안 했어도 좋았을 것 같네요. ㅋㅋㅋ
그러다가 운이 좋게?, 사내 Vision AI 프로젝트 업무를 하게 되었어요.
제가 익숙한 폐쇄망, k8s 환경이고 End-User 활용이어서 만족스러웠어요.

 
 
1. 요구사항
  * 사진을 탐지를 해야 한다.
  * 비개발자들이 사용할 수 있어야 한다
  * 기존 시스템과 연계해야 한다.
   -> 이 흐름을 자연스럽게 너가 만들어야 한다. 
 
 
현재 환경을 파악하고, 오픈소스를 이용해 큰 그림을 그리는 것이 역할이었어요

AI는 전혀 모르지만 배우면 되고(파워당당),
git-runner, harbor 도커 빌드하거나, argocd로 k8s 배포한 경험이
MLOps와 비슷하다고 생각했어요

3. 수락하게 된 이유 (재미)

AI 기술 재미있겠다. 오픈소스 조합하면 되지 뭐 ㅋㅋㅋ (자만)

 
수락하기 전에 할 수 있을지 조사했어요
오픈소스 좋은 것들 있으니까 엮으면 될 거라는 안이한 생각을 가졌죠. ㅋㅋ

 

 

 

바로 집에 가서 Opensource를 조사했어요
크게 3가지 카테고리로 찾아봤는데, 아래와 같아요
1. Labeling용
2. Training용
3. Inferencing용 
 

 

 

 

3-1. Labeling용 오픈소스 (CVAT)

voxel51, cvat, labelme, labelimg, VoTT, ImgLab  중에서 2가지를 추렸습니다.

intel의 cvat 이냐, 이쁨의 FiftyOne(voxel51)이냐

검색해 보니 cvat이 가장 많이 사용되는 것 같더라고요. voxel51은 이뻐서 개인적으로 하고 싶어 비교해 봤어요

Cvat Voxel51
https://github.com/opencv/cvat
fork 2.6k, star 10.7k, commit 4136
https://github.com/voxel51/fiftyone
fork 451, star 6.2k, commit 18884
offline 확실히 가능
Intel에서 개발 후 밀고 있음
명시적으로 된다고는 안함 (fiftyone이 가능할 거라고 추정)
UI가 이쁘고 다양한 기능들이 많음
미시건 대학교 사람들이 만듦

하지만 하고 싶은 것보다 확실한 것을 찾는게 중요했기 때문에 intel의  cvat으로 마음의 결정을 내렸습니다.
 

3-2. Trainging용 오픈소스 (Airflow + MLflow)

k8s에서 container로 돌릴 툴을 찾고 있었어요

 
제가 익숙한 Airflow를 선택했어요. (글또 5기 때 발표도 했어요ㅎ)

 

글또) 두근 두근 글또콘 발표 후기_Airflow Bad Practices

글또콘에서 Airflow Bad Practice 발표를 했어요! 오랜만의 발표라 그런지 떨리더라고요ㅎㅎ 발표 주제는 Airflow를 도입하고, 1년 전에 내가 하지 않았으면 하는 사례들을 공유했어요 예상 독자는 아래

mightytedkim.tistory.com

이외에도, argo workflow (kubeflow Pipeline) 등의 후보를 생각하고 넘어갔습니다.
gpu 연결이 되는건 크게 어렵지 않을 것 같고, 리소스 매니징을 어찌해야할지가 좀 걸렸어요.
artifact 저장소는 mlflow를 사용할 생각이었어요. 이것도 제가 익숙해가지고 ㅋㅋ
 

3-3. Inferencing용 오픈소스 (Nuclio)

이 부분이 제일 어려웠어요. 후보가 너무 많았기 때문이에요
결론은 Cvat과 밀접한 관계가 있는 FaaS인 Nuclio를 선택했어요.

 
BentoML, Seldon-core, MLFlow, FastAPI 등을 한번씩 테스트했어요.

  • BentoML은 1.x 가 되었는데도 에러가 좀 보였고,
  • MLFlow는 그냥 저장소의 기능으로만 사용하기로 했어요. (업그레이드 문제가 생길 수 있으니)
  • FastAPI는 자체 ci/cd파이프라인을 구축해야 하는데 복잡해 보였어요.

그러다가 FaaS가 있잖아. 라는 생각을 했죠.

OpenFaaS vs Nuclio

당연히 star가 5배 더 만은 OpenFaaS로 가려고 했으나, Cvat에서 Nuclio를 엔진으로 쓰고 있더라고요

OpenFaaS Nuclio
https://github.com/openfaas/faas
fork 1.9k, star 24.1k, commit 2135
https://github.com/nuclio/nuclio
fork 515, star 5.1k, commit 1509
다양한 언어 지원
쉽고 간단함, 일반적인 부하는 충분함
k8s 친화
다양한 언어 지원하지만, 고성능에 더 중점(실시간)
고성능, throuput, low-latency
k8s 친화, docker-compose 예시 있음

그리고 간단한 테스트는 k8s보다 docker-compose로 하는 걸 좋아해서 nuclio에 더더욱 끌렸습니다.
- nuclio가 인터넷에 자료가 거의 없는게 문제였어요.
 
하지만 그 고민은 미래의 제가 하면 되기 때문에 여기까지 조사를 마치고,
팀장님께 vision ai 플랫폼 mlops 업무를 하겠다고 이야기했습니다. 

고민 끝

 


마무리

글이 길어질 것 같아서 다음 글부터는 Cvat 설명 부터 쭉 풀어갈게요
독자 모집을 위해서 썰을 미리 풀자면, Nuclio는 개발자에게 직접 물어가며 진행한 덕분에 생각보다 쉬운 방식으로 모델 인퍼런싱을 적용했어요. 

항상 글이 길어지는 것 같아, 짧게 가려 노력하고 있습니다.

 
* 해당 글은 오픈소스 조사를 하며 정리한 글로, 잘못된 정보가 있을 수 있습니다. 
  피드백 주시면 바로 수정하겠습니다 :) 
 

728x90
반응형