Boostcamper's 주간정리(7)

최현진·2021년 9월 24일
0

ML-Engineer

목록 보기
1/1

강의 내용

(특강) 서비스 향 AI 모델 개발하기, Full-Stack ML Engineer

AI 서비스 개발

학습 데이터셋 준비

  • 학습 데이터셋, 테스트 데이터셋, 테스트 방법이 없고 요구사항만 존재
  • 가장 먼저 해야할 일은 학습 데이터셋을 준비하는것
  • 학습 데이터셋을 준비하는 과정에서 정답, 종류, 수량을 고려해야하며 필요에 따라서는 기술 모듈을 설계
  • 학습 데이터셋을 준비하는 과정에서 외주 업체에게 작업을 요청하는 경우 비용이 발생하기 때문에 굉장히 중요

테스테 데이터셋, 테스트 방법

  • 정확도가 높은 모델일지라도 실제 환경에서 동작하는 경우 기능을 잘한다고 보장할 수 없음
  • 개발 환경에서의 정량 평가(Off line test), 실 서비스 적용시에 정량평가 (On line test) 이질감이 굉장히 클 수 있음

모델 요구사항 도출

  • 처리 시간
  • 목표 정확도
  • 목표 QPS(초당 처리 가능한 요청 수)
    -> QPS를 향상 시키기 위해서는 1)장비를 늘린다. 2)처리 시간을 줄인다. 3)모델 크기를 줄인다.
  • serving 방식 (mobile, cloud, local)

AI 기술팀의 구성

  • Data: Data Curator
    • 정량 평가 수립
    • 정성 평가 분석
    • 학습 데이터 준비 (외주 업체 대응, 작업 가이드 문서)
  • Modeling: modeler
    • AI 모델 성능 분석/디버깅
    • AI 모델 구조 제안
  • Tool: IDE Developer
    • 모델 분석 툴 개발
    • 모델 개발 자동화 파이프라인 개발
    • 라벨링 툴 개발

Model Engineering/ Tool/ Serving은 개발력이 많이 필요한 일이다. 앞으로는 AI 모델링 뿐만 아니라 다양한 도메인에 대해 공부할 필요가 있다. (FE, BE, APP, ...)

Full-Stack ML Engineer 로드맵

  • Full stack ML engineer: Deep learning research를 이해하고 ML Product로 만들 수 있는 Engineer
  • FE: Vue.js, Angular.js, React.js
  • BE: Django, RAILS, Spring
  • ML: PyTorch, TensorFlow
  • DB: RDB, NoSQL

결과물

Web으로 모델을 학습 시킬 수 있는 서버 개발

Node.js, Bootstrap를 사용해 모델을 웹에서 생성할 수 있고 생성 결과를 확인할 수 있는 서버를 제작

  • ML module 개발

실행 명령어: python train.py
dataset.py: 학습에 사용되는 dataset들이 class로 정의 되어 있음
inference.py: 학습된 모델의 경로를 입력으로 받아 모델을 평가하는 함수 존재. ex) Gradient CAM 이미지 생성, f1 score 계산
loss.py: 학습에 사용되는 loss function들이 class로 정의 되어 있음
model.py: 학습에 사용되는 model들이 class로 정의 되어 있음
trainer.py: 본격적으로 학습을 하는 함수로 args 변수를 받아 모델 학습
utils.py: 서버에 Api를 호출할 수 있는 함수나 json 생성 함수

  • Front-end 개발
    Hypermarameter 같은 여러 변수들을 선택하고 python module에 학습을 요청
    python module에서는 학습을 진행함에 따라 서버에 api를 요청하고 이때 JSON으로 message를 전송한다. front에서는 socket.io를 통해 실시간으로 학습과정을 갱신해 준다.
    생성된 모델들은 폴더별로 저장되며 이를 조회할 수 있는 api를 요청해 생성된 모델들을 보여준다. Grad-CAM이나 f1-score 같은 모델 평가 결과도 생성할 수 있다.
    Grad-CAM
    모델 학습 결과 상세 페이지로 이동
  • Back-end 개발

express 프레임 워크를 사용해 백엔드 서버 개발

get /api/v1/requestCreate : 모델 생성 요청
get /api/v1/state/:id/training: ML module 상태 false로 변경(학습 진행중 추가 모델 생성을 막기 위함)
get /api/v1/state/:id/done: ML module 상태 true로 변경
get /api/v1/getModelList: 생성된 모델 list 조회
get /api/v1/:id/inference: 학습된 모델 inference 요청(GradCAM 생성, f1 score 계산)
get /api/v1/image/:id/:image: 모델 성능을 확인할 수 있는 여러 graph 조회
post /api/v1/:id/trainingProcess: python module에서 서버로 보내는 api, 현재 학습 진행상태 JSON으로 전송

피어세션

진행한 토이 프로젝트를 공유하고 피드백을 받으면서 개선 방향을 찾았고 앞으로 시도해볼만한 과제를 탐색

학습회고

평소 back-end에 관심이 많았기 때문에 AI 서비스를 웹서비스로 어떻게 제공하는지에 대한 관심이 많았다.

level-1에서 P-Stage를 진행하면서 더 좋은 모델을 생성하기 위해 Hyperparameter 실험을 많이하고 수없이 많은 모델을 생성하였는데 바쁜 와중에서도 어디서나 모델을 실험할 수 있고 그 결과를 볼 수 있다면 편할 것 같아 토이프로젝트를 진행하였다.

지금까지 배웠던 모델설계를 복습하면서 python program을 만들었고 웹서버에서 python script를 실행시킬수 있도록하였다. (Javascript child_process)

반응형 웹으로 구현해 SSH접속이 불가능한 환경이나 모바일로도 서버만 열려있다면 모델을 실험적으로 생성하고 Grad-CAM과 같은 결과도 얻을 수 있다.

DB에서 데이터를 조회하고 그 데이터를 양식에 맞춰 Client에게 전달해주는 기존 웹서비스와는 달리 python script를 실행하고 학습과정도 보여줘야하며 error처리가 어려웠던점에서 많은 고민을 했다. 만들면서도 실제 ML Engineer들이 이런 프로그램을 만들면서 쓸까? 쓸데없는 짓을 하는것은 아닌가? 고민이 많았다.
하지만 이번 추석 특강에서 이러한 고민들을 많이 해결되었고 앞으로도 비슷한 프로젝트를 진행해보려 한다.

code

https://github.com/hyeonjini/remote-ml

profile
Boostcamper!

0개의 댓글