의료 인공지능 스터디의 Engineering 팀에서 진행하는 토이 프로젝트 기획 글입니다.



1. 개발 동기


딥러닝 학습을 진행할 때 학습이 얼마나 걸리는 지 알지 못한다. 물론 1 에폭에 10분이 걸린다면 20 에폭이면 대략적으로 200분이 걸릴 것이다. 하지만 현실에서는 이렇게 정확히 학습 시간을 추론하는게 쉽지 않은데, 그에 대한 예시는 아래와 같다.

  1. Early stopping
  2. 중간에 에러 발생
  3. 학습을 돌린 것을 깜빡 잊음

이를 해결하기 위해서 학습이 제대로 동작 되고 있는지 또는 학습이 종료되었는지 알려주는 “딥러닝 모델 학습 모니터링” 서비스가 있다면 좋겠다는 생각이 들었다.

기존에는 beepsound를 활용해서 소리 알람으로 알려주는 방법이나 huggingface에서 만든 knockknock 학습 종료 알람이 존재했다. 하지만 앞서 언급한 기존 방식은 아래와 같은 불편함이 존재한다.

1.1. 시간에 종속적

beepsound를 활용한 소리 알람은 정확한 시간에 소리로 학습 종료를 알려준다. 리눅스 환경에서는 환경 변수만 설정해주면 되기 때문에 편리하게 사용이 가능하다. 하지만 소리가 울리는 시간에 컴퓨터 앞에 앉아 있어야 된다는 단점이 있다. 오랜 시간 학습을 하게 되면, 학습 종료 시점을 마음대로 설정할 수가 없다. 이 때문에 이동하거나 취침을 할 때 언제 어디서든 사용하기가 어렵다.

1.2. 환경에 종속적

knockknock 모듈은 mail, slack 등 다른 SNS를 사용하더라도 코드가 비슷해서 사용하기 편리하다. 또한 beepsound와 달리 시간과 공간에서 자유롭다. 이 때문에 다양한 사람들이 많이 사용 되는 모듈이 되었다. 그러나 이 모듈의 문제점은 설치시에 필요한 관련 패키지가 많다는 것이다. pip로 install을 할 때는 설치하고자 하는 모듈 뿐만 아니라, 해당 모듈에 필요한 다른 모듈 들도 설치를 해야된다. 그렇기 때문에 관련 패키지가 많을 수록 interpreter 환경에서 잘 동작이 안될 확률이 있다. 환경에 민감하기 때문이다.

위에서 언급한 불편함들을 해결하고자 새로운 pypi 모듈을 만들자는 계획을 세우게 되었다. 우리가 개발하고자 하는 pypi 프로젝트는 시간, 공간, 환경에서 자유로운 패키지를 설계할 예정이다. 또한 knockknock 모듈은 외국의 SNS에 초점이 맞춰져 있다. 우리는 한국에서 많이 사용되는 카톡, 네이버 메일도 추가할 예정이다. 마지막으로 사용하기 편한 코드로 만들 것이다.


2. 프로젝트 전체 구상


Pypi 모듈, 학습 종료 알람 프로젝트는 딥러닝 학습 정보를 SNS로 전달해주는데 목적을 두고 있다. SNS로는 카톡, 슬랙, 메일, 라인 등이 될 수 있겠다. 딥러닝 코드는 주로 python으로 되어 있기 때문에 pypi 패키지로 사용할 수 있게끔 제공할 예정이다. 프로젝트는 다음으로 요약할 수 있다.

image1

사용자는 언제, 어디서든 학습 기록을 볼 수 있게 된다. 유저의 입장에서 pypi 모듈 사용법은 다음과 같다.

  1. pip install을 사용해서 package 설치
  2. 학습을 하기 전에 원하는 전송 채널을 선택
  3. 원하는 message 형식 선택
  4. 딥러닝 학습 시작

하나의 서비스를 만들기 위해서 주제를 명확하게 하고, 필요 기능, 기술 스펙, 일정 등 구체적으로 작성하는 것이 좋다. 여유 시간을 투자하여 개발하는 토이 프로젝트이기 때문에 구체적일수록 효율적으로 시간을 활용할 수 있다. 기능을 만들다가 왜 이 기능을 만들고 있는지 모르겠다는 생각이 들면 언제든 질문하는 것을 권장한다.


3. 기술 정하기


이번 프로젝트는 git workflow, python builtin function, Python Design Patterns에 집중 할 예정이다.

3.1. Package

  • python==3.8
  • setuptools
  • sheel
  • twine

3.2. Application

  • kakao api
  • naver SMTP
  • pypi, pip

3.3. Source Control

  • git
  • github

4. 일정

4.1. MVP 개발 기간

  • MVP (Minimum Viable Product)을 통해서 진행 상황과 문제점 체크
  • 2월 27일 DEMO 예정
  • 최소 품질 체크 리스트
    • pip install로 python 모듈이 잘 설치가 되는가?
    • 학습 종료 시에 카톡 알람이 잘 전송 되는가?
    • 학습 중단 시에 중단 알람이 잘 전송 되는가?

이 기간에는 최소한의 기능을 목표로 개발을 진행할 예정이다. 설치-학습-전송의 flow가 잘 작동이 되는지 체크하는 것이 주요한 이슈가 될 예정이다. MVP 기간때 진행되는 결과물을 보고 최종 개발 기간을 늘릴지, 줄일지도 선택한다. 이때는 pip를 설치하고 간단한 학습 후 메세지 전송 과정까지 영상을 기록한다.

4.2. 최종 완성 기간

  • 최종 완성을 통해서 완성도를 체크하고 공유를 통해서 유저가 사용할 수 있도록 배포
  • 3월 23일 최종 TEST 예정
  • 최종 품질 체크 리스트
    • pypi 모듈의 description만 보고 사용할 수 있도록 잘 작성이 되었는가?
    • 여러 edge case에 대해서도 강인하게 작동이 되는가?
    • 카톡 뿐만 아니라 다른 SNS에서도 잘 작동이 되는가?
    • 다양한 환경(mac, window, linux)에서도 잘 작동이 되는가?

최종 테스트 시에는 MVP에서 업그레이드 하는 것에 초점을 맞출 예정이다. MVP는 최소한의 기능만 있기 때문에 부족한 부분이 많을 것이다. MVP 데모때 부족한 부분을 토의하고 다양한 edge case를 해결하는 데 초점을 맞춘다. 사용자 마다 환경이 각기 다르기 때문에 테스트 기간에는 스터디원 분들(7~9명) 정도가 미리 사용해보고 의견을 받는 시간을 가진다.