1. Full Stack ML Engineer
1) Full stack ML Engineer란?
1-1) ML Engineer란?
- Machine learning (Deep learning) 기술을 이해하고, 연구하고, Product 를 만드는 Engineer
- Deep learning 의 급부상으로 Product 에 Deep learning 을 적용하고자 하는 수요 발생
- 전통적인 기술의 경우 Research 영역과 Engineering 영역이 구분되지만, Deep learning 의 경우 폭발적 발전속도로 인해 그 경계가 모호함 (연구와 동시에 Product 에 적용)
1-2) Full stack engineer란?
- Full stack engineer 란 표현은 각 포지션의 개발자들에게 달갑지 않은 표현일 수도 있다고 생각 (소개할 때 조심하자!)
- Full stack engineer 은 상태가 아니라 방향성이라고 생각.
- 모든 Stack을 잘 다루려는 방향으로 가고있다면 Full stack engineer
- 기준을 세우자면 내가 만들고 싶은 Product를 시간만 있다면 모두 혼자 만들수 있는 개발자
1-3) Full stack ML Engineer란?
2) ML product, ML Team, ML Engineer
2-1) ML Product
- 보통 ML Product는 이런 과정을 통해 만들어 짐
- 고객의 요구사항을 수집하는 단계
- Modle을 훈련/평가할 데이터를 취득하는 단계
- Machine learning 모델을 개발하는 단계
- 서비스 서버에 적용하는 단계
2-2) ML Team
- 일반적 ML Team 구성
- 이렇게 되기도 함
2-3) Full stack ML Engineer in ML Team
* Job 1. 실 생활 문제를 ML 문제를 Formulation
- 고객 / 서비스 의 요구사항은 실 생활 문제!
- Machine learning 모델이 해결 가능한 형태로 문제를 쪼개는 작업 / 가능한지 판단하는 작업
- 기존 연구에 대한 폭 넓은 이해와 최신 연구의 수준을 파악하고 있어야 함
* Job 2. Raw Data 수집
- 웹에서 학습데이터를 모아야 하는 경우도 있음
- Web Crawler (Scraper) 개발해서 데이터 수집 (저작권 주의)
* Job 3. Annotation tool 개발
- 수집/제공 받은 데이터의 정답을 입력하는 작업을 수행하는 web application 개발
- 작업 속도와 정확성을 고려한 UI 디자인이 필요
- 다수의 Annotator 들이 Client 를 통해 동시에 서버로 접속. Annotation 작업을 수행.
- 새로운 Task 에 대한 Annotation tool 기획시 모델에 대한 이해가 필요할 수 있었음
* Job 4. Data version 관리 및 loader 개발
- 쌓인 데이터의 Version 관리
- Database 에 있는 데이터를 Model 로 Load 하기위한 Loader package 개발
* Job 5. Model 개발 및 논문 작성
- 기존 연구 조사 및 재현 (재현 성능은 Public benchmark 데이터로 검증)
- 수집된 서비스 데이터 적용
- 모델 개선 작업 + 아이디어 적용 → 논문 작성
* Job 6. Evaluation tool 혹은 Demo 개발
- 모델의 Prediction 결과를 채점하는 Web application 개발
- OCR 프로젝트 중 혼자 사용하려고 개발 (정/오답 케이스 분석) → 이후 팀에서 모두 사용.
- 모두 사용하다보니 모델 특성 파악을 위한 요구사항 발생 → 반영하다보니 모델 발전의 경쟁력이 됨
* Job 7. 모델 실 서버 배포
- 연구용 코드를 Production server 에서 사용 가능하도록 정리하는 작업
- File server 에 코드 + Weight 파일 압축해서 Version 관리
- Production server 에서는 Python worker 에게 MQ를 통해 job 을 전달
3) Roadmap
3-1) Stackshare
3-2) 어떻게 시작해야 할까?
- 쉽다고 할 수는 없음
- 하지만 점점 더 Full stack ML Engineer가 많아 질 것이라 생각. 제가 방향성이라고 생각했던 이유는?
- 각 스택에서 점점더 framework 의 발전이 점점 더 interface 가 쉬워지는 방향으로 발전
- 특정 스택이 쉽다는 것은 아님. 하지만 초~중급수준의 구현을 하는것이 점점 쉬워질 것
3-3) 엄두해야할 점
- 시작이 반이다? → 시작이 80% 다
- 모든 Stack이 공통적으로 시작이 가장 어렵습니다.
- 익숙한 언어 + 가장 적은 기능 + 가장 쉬운 Framework 로 시작하세요.
- 하나를 배우고 나면 나머지를 배우는 것은 훨씬 쉽다! Google + Stackoverflow 의 도움으로 쭉쭉!
- 시작의 허들을 넘은 뒤, 필요에 의해 원론을 공부하세요.
- 처음부터 너무 잘 만들려고 하지 말것. 최대한 빨리 완성할것
- 많은 개발자들이 Full stack 으로 개발하다보면 가장 중요한 "완성" 이라는 가치에 도달하지 못하는 이유
- 모든 stack의 안티 패턴을 모두 신경써서 개발하다가 포기하기보다는 완성에 집중하세요
- Full stack 개발의 매력은 “완성" 에서 오는 “재미" 입니다.
- 완성된 코드에 기능을 더 하다보면 자연스레 리팩토링의 중요성에 대해 알게 됩니다.
- 재미를 느끼고 반복적으로 완성하다보면 실력이 늘게 됩니다.
- ML Engineer 라면, 하나의 논문을 구현하고, Demo page 를 만들어 보는것 추천
'부스트캠프 AI Tech > [Week8] 특강' 카테고리의 다른 글
[Week8] 특강 [Day2] (0) | 2021.09.24 |
---|