Full Stack ML Engineer

이영훈·2021년 9월 24일
1

Naver Boostcamp AI-TECH

목록 보기
15/19
post-thumbnail

INTRO

그동안 백신 부작용과 추석연휴로 인해 포스팅을 못했었다.
앞으로는 포스팅에 회고 내용보다는 기술적인 내용을 위주로 포스팅하려고 한다.
회고는 따로 페이지를 개설해서 작성할 계획이다.

이번 포스팅에서는 Full Stack ML Engineer에 대해 다뤄보려고 한다. 근래에 채용 공고에서 AI engineer라든가 AI(ML)researcher 등 AI(ML) 분야의 새로운 engineer들이 등장하고 있다. 이러한 분야의 engineer들은 기존의 back-end / front-end engineer들과 어떤 차이점이 있고 어떤 스택을 갖고 있어야 하는지 집중적으로 알아볼 계획이다.

또 전체적인 ML product와 Team 구성도 추가적으로 알아보자.

마지막으로 ML Engineer가 되기 위한 간단한 로드맵도 살펴보도록하자.

1. FULL STACK ML Engineer 란?

1-1) ML Engineer란?

ML Engineer는 Machine Learning 기술을 이해하고, 연구하고 Product를 만드는 Engineer를 의미한다. ML Engineer은 Deep learning에 급부상으로 Product에 Deep learning을 적용하고자 하는 수요가 발생하면서 생겨났다. 흔히 ML을 업으로 삼는 사람들을 두 분류로 나누는데 하나는 ML Researcher 이고 다른 하나가 ML Engineer이다. 하지만 근래에는 폭발적 발전속도로 인해 그 경계가 많이 모호해지고 퇴색되어가고 있다.

1-2) Full stack Engineer란?

Full stack ML Engineer에 대해 알아보기 전에 Full stack Engineer부터 알아보자.

해당 그림은 일반적인 Web application의 구조이다. Full stack Engineerclient side와 server side를 다 다룰 수 있는 engineer를 의미한다. 즉, front-end, server, Database에서 최소 하나이상의 스택을 다룰줄 알아야한다.

실제로 Apple에서는 Full stack Enginner에 대한 공고를 다음과 같이 올렸다.

해석해보면 코딩을 잘하고, 창의적이고, 다양한 조직의 사람과 협업할 수 있고, 새로운 기술을 배우는 것을 즐기는 개발자를 의미한다.

Full stack Engineer에 대한 개인적인 생각을 가미하자면 자신이 만들고 싶은 product가 있을 때 이를 화면부터 서버까지 모두 혼자 만들 수 있는 개발자를 full stack engineer라고 부를 수 있다.

1-3) Full stack + ML

이제 위에서 말한 ML engineer와 full stack engineer를 합치면 full stack ML engineer가 된다. 즉, Deep learning의 research를 이해하고 ML product를 end to end로 혼자 만들 수 있는 engineer이다.

스택은 PyTorch, TensoforFlow 등 ML 관련 프레임워크 스택이 추가적으로 요구된다.

2. Pros & Cons of Full Stack ML Engineer

사실 Full Stack ML engineer가 되는 일은 결코 쉬운일이 아니다. 또, 하나의 스택에 집중적인 expert가 되는 것보다 결코 좋다고도 말할 수 없다. 그렇다면 Full Stack ML Engineer의 장점과 단점은 뭘까?

2-1) Pros

우선 Full stack 으로 ML product를 구축하게 되면 흥미를 갖기 쉽다. 처음부터 끝까지 자기 손으로 모든 과정을 수행하게되면 그만큼 애착도 생기고 이해도도 갖게 된다. 한 분야에서만 열심히 하게되면 매너리즘에 정착하는 순간이 있게 되는데 full stack은 이 매너리즘로부터 쉽게 탈피 할 수 있다.
처음부터 끝까지 ML product를 구축할 수 있다는 뜻은 빠른 프로토타이핑이 가능하다는 것이다. 사실 ML Product를 출시하기 전 이 상품에 대한 프로토타입을 먼저 출시해 사람들의 반응을 얻는 것은 매우 중요한 과정이다. 프로토타이핑은 실제로 협업으로 이루어지기에는 매우 곤란하기도 하기 때문에 Full stack으로 ML product를 구축할 수 있다는 것은 큰 장점이 된다.
게다가, Full stack을 다루게 되면 기술간의 시너지를 이해하는 것도 큰 도움이 된다. 연결되는 stack에 대한 깊은 이해가 있을 수록 product에 도움이 되는 것은 당연한 사실이다. 이는 다른 포지션의 엔지니어들 간의 갈등에도 매우 도움이 될 수 있다.

2-2) Cons

단점은 역시 깊이의 문제이다. 아무래도 하나의 스택에 집중한 개발자보다는 해당 스택에 대한 깊이가 없어질 수 있다. 또한 컴퓨터 분야는 하루가 다르게 새로운 기술, 새로운 연구난 나오는 분야이기때문에 모든 스택에서 최신 트렌드를 따라잡기 어려운게 당연하다.
이는 즉, 많은 시간이 소요된다는 점이기도하다. 공부할 분야가 많다보니 절대적으로 많은 시간이 소요된다.

3. ML Product

ML product는 보통 다음과 같은 과정으로 수행된다.

3-1) 요구사항 전달

요구사항 단계는 모든 Product에 통용된다. 제품에 대한 요구사항을 고객사나 서비스 기획자로부터 전달받고 이를 토대로 요구사항과 제약사항을 정리한다. 요구 사항은 보통 실생활의 문제이기때문에 이를 ML 문제로 회귀하는 작업도 필요하다.

3-2) 데이터 수집


Model을 훈련/평가할 데이터를 취득하는 단계이다. 사실상 제일 오래 걸리는 단계라고도 할 수 있다. 우선 활용될 Raw 데이터를 수집해야한다. 이때 요구사항에 맞고 bias가 적으며 저작권에 걸리지 않는 데이터를 수집하도록 주의해야한다. Annotation Tool을 개발 하는 것도 매우 중요하다. Annotation Tool이란 ML에서 데이터를 labeling 할때 사용하는 툴이다. 즉 데이터를 입맞에 맞게 labeling 하는 tool을 개발하는 것이 중요하다. 또 이를 다른 개발자들이 사용할 수 있도록 guide를 작성하는 것도 매우 중요하다.

3-3) ML model 개발


ML model을 개발하는 단계이다. 논문을 찾아보고 이해하는 단계이며 적절한 연구를 선택하고 자신들의 입맛에 맞게 재현해야한다. 모델에 수집된 데이터를 적용하고 모델을 평가, 수정하며 최적의 모델을 개발해야한다. 모델이 선정되면 그 모델을 경량화 하는 작업이 필요하다.

3-4) 실 서버 배포


서비스 서버에 모델을 적용하는 단계이다. TensorRt 등의 프레임워크를 적용하여 경량화를 하고 연구할 때 사용되었던 코드를 제거 및 수정해야한다. 또한 유지보수의 효율을 높이기 위해 모델 버전관리 및 배포 자동화도 이루어져야 한다.

4. ML Team

ML team의 일반적인 구성은 다음과 같다.

하지만 실제로 다음과 같이 하나의 역할만을 갖게되는 경우는 극히 드물다.

위와 같이 여러가지의 역할을 갖는 것이 일반적이다.

Full Stack ML Engineer가 된다면 확실히 Team에서 중추적인 역할을 하게 될 것이다. 또한 기본적으로 Team에서 하나의 역할을 맡는 경우가 드물기 때문에 full stack을 지향하는 것이 채용과정에서 이점이 될 수 있다는 것이 개인적이 생각이다.

5. To be a Full Stack ML Engineer

다음은 boost camp에서 이준엽 멘토님이 추천하신 ML full stack roadmap이다. 각 스택마다 최소 한개 이상의 스택을 다룰 줄 알아야 비로소 full stack ML engineer라고 할 수 있다. 그렇다면 어떻게 roadmap을 달성하는 것이 좋을까?

간단하고 라이트한 스택부터 접근한다면 특정 스택을 구현하는데에 이해도가 점점 쉬워질 것이다. 특히 자신에게 익숙하고, 적은 기능을 갖고, 쉬운 framework로 시작하는 편이 좋다. 처음부터 너무 잘 만들려고 하지 말고 최대한 빨리 완성하려 하는 것이 중요하다. 많은 개발자들이 full stack으로 개발하다보면 완벽하게 만들기 위해 시간 점점 지연되게 되고 결국 완성하지 못하는 경우를 많이 봐왔다. 모든 개발의 매력은 '완성'에서오기 때문에 완성에 집중하는 것이 가장 중요하다.

그렇다고 모든 stack을 초~중급의 개발수준으로 유지하는 것은 좋지 않은 선택이다. 전문 분야를 정하고 그 stack에 대한 이해도를 깊게 가져가는 것도 중요하다. 즉 하나의 stack에는 전문성을 가지는 full stack engineer가 가장 이상적이지 않을까 싶다.

0개의 댓글