Search
Duplicate
🚉

[MLOps] 배치 인퍼런스 태스크 회고

어떤 태스크 였는가?

ML 모델(Accida)을 오프라인(배치) 서빙을 하는 태스크였다.
기존에 있는 Ray 기반 데이터 파이프라인을 쿠버네티스에서 배치 인퍼런스를 진행하는 방식으로 전환하는 게 목표였다.

얼마 동안 진행했는가?

한 달 조금 넘게 진행을 했다. (...)

K(Keep)

배운 것들을 실무에 활용해보기
이건 약이 될지 독이될지...
안정적인 애플리케이션을 만들어주는 스킬들
퍼포먼스 프로파일링
어디가 병목 지점인지 찾아내고 이 부분을 개선하려는 노력들을 해봤다.
로깅 및 모니터링
그 동안 여러 프레임워크들의 아래에서 편하게 사용하던 것들을 사용하지 않고 하다보니 당연한 것들이 이렇게 제대로 사용하기 어려운 것들이었다는 걸 깨달았다.

P(Problems)

fancy한 기술에 매몰되기
비동기, 메시지 드리븐 프로그래밍 등 멋져보이는 기술들에 현혹되어서 필요 이상으로 시간을 오래 썼다.
또한 '클린' 한 아키텍처, 객체지향 등 개발자로서 내가 잘 하고 싶은 기술들을 탐구하는 목적으로 태스크를 소모한 거 같다. (하지만 그렇다고 잘 마무리하지도 못했다)
'멋지게' 태스크를 마무리하고 싶어서 욕심이 생겼다.
길어지는 태스크, 그리고 고집
'내가 이 정도 시간과 노력을 들였는데 돌아가기 싫어!' 라는 고집이 생겼다
그와 동시에 '아 그냥 쉽게 다시할까...' 라는 감정도 들면서 갈팡질팡했다.
다른 태스크와 로드 밸런싱
내가 리딩을 하고 있는 프로젝트에 참여도가 낮아졌다
이슈 트래킹이라던지 내가 해야할 책임들을 챙기지 못했던 거 같아서 후회가 된다

Learned

파이썬 동시성, 병렬 처리
멀티 프로세싱, 쓰레딩, 비동기 처리 등 다양한 방법으로 파이썬 애플리케이션이 할 수 있는 방법론들을 적용해봤다.
하지만 이런 기술들을 씀으로서 오는 트레이드 오프들에 대해 더 강렬하게 알게 됐다 (유연함, 그리고 고성능의 트레이드오프는 복잡도)
버저닝과 롤백하기 쉽게 만들어주는 인프라의 중요성
테스트 코드의 중요성
Cloud Managed Service 같은 경우(GCP 계열은 특히) 모킹하거나 테스트를 만들기 어렵다
때문에 개발 환경에서 테스트를 할 수 밖에 없었는데, 혼자 작업하다보니 대충 짜고 바로 바로 배포해 버려서 실수가 잦았다.

Try

모델러와 협업해서 서빙에 알맞은 포맷으로 바꿔보기
포맷만(pickle 이라던지...) 적절하면 여러 프레임워크(bentoml, mlflow 등)의 도움을 받아 더 쉽게 해당 태스크를 수행할 수 있다는 생각이 들었다.
단순하고, 동작하는 코드 먼저
잘 동작하도록 먼저 만들어두고, 여러가지 시도를 해보자
당연한건데 생각보다 막상 시작하면 그게 잘 안됐다. 의도적으로 그렇게 짜려는 연습을 해보자
더 많이 회고하기
매일 퇴근하기 전 5분 리뷰를 해보자
TIL도 다시 시작했다

Overall

간단하게 해결할 수 있는 문제임에도 불구하고, 내 기술적인 욕심에 태스크를 어렵게 만들었고, 잘 마무리하지도 못했다.
기술적으로 그 동안 경험해보지 못한 많은 것들을 시도해볼 수 있었지만, 내 책임을 다 하지 못한 거 같아 후회가 많았다.
무작정 코드를 작성하는 것보다, 더 쉬운 방법은 없는지 그리고 더 간단하게 끝낼 수 있는 방법을 먼저 고민하고 실행에 옮기자.
힘내자