데이터 잡부의 MLOps도전기 (1) #이미지 불량탐지
23년 하반기는 힘들었지만 재미있었어요. 새로운 분야를 접했거든요
'데이터 잡부'의 도전에 대해 정리하려 합니다 :)
글의 구조는 아래와 같습니다.
- 원래 하던 업무 (pipeline)
- 제안받은 업무 (MLops)
- 수락하게 된 이유
.
글의 타깃 독자는 아래와 같습니다.
- MLops/AI 분야 병아리를 구경 온 선배님들
- 이제 MLops/AI 분야를 들어오려는 동지들
- 폐쇄망에서 어찌 진행했는지 궁금한 엔지니어들
.
자 이제 들어갑니다.
1. 원래 하던 업무 (pipeline)
폐쇄망에서, 해외 공장들의 data를 실시간으로 수집하는 pipeline 구축
#kafka, nifi, airflow, K8s, Ceph
기존에는 파이프라인 구축 업무를 했어요
처음 2년은 재미있었는데, 시간이 지나면서 매너리즘에 빠졌어요.
* 매너리즘
1. 고도화보다는 확산
- 해외 공장 확산을 진행하는 오퍼레이터가 되고 있었어요
2. 새로운 기술 접할 기회 감소
- 공장 쪽은, 새로운 것 도입하는 것 자체가 risk라 쉽지 않아요
3-1. (외부) 반복 업무로 인한, 프로젝트 내 평가 감소
- 계속 반복하는 작업이잖아. 아직도 안됨?
3-2. (개인) 업무 만족도 감소
- 그러다 보니 결국 재미가 없었어요.
몸은 편했지만, 제 안의 개발 욕구는 만족하지 못한 거죠.
2. 제안 받은 업무 (MLops)
Vision AI 플랫폼 Opensource 설계
#폐쇄망 #k8s #Kubeflow
팀장님께 상담을 신청했어요.
- 재미있는 일이 있으면 달라.
- 대신 이제 데이터 상하차는 아니면 좋겠다.
- 빡세도 상관없다.
빡세도 상관없다는 말은 안 했어도 좋았을 것 같네요. ㅋㅋㅋ
그러다가 운이 좋게?, 사내 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가지를 추렸습니다.
검색해 보니 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기 때 발표도 했어요ㅎ)
이외에도, 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가 있잖아. 라는 생각을 했죠.
당연히 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는 개발자에게 직접 물어가며 진행한 덕분에 생각보다 쉬운 방식으로 모델 인퍼런싱을 적용했어요.
* 해당 글은 오픈소스 조사를 하며 정리한 글로, 잘못된 정보가 있을 수 있습니다.
피드백 주시면 바로 수정하겠습니다 :)