TensorMSA
Importance of pipe line
딥러닝은 기본적으로 데이터에 기반하여 해당 데이터를 최대한 잘 설명할 수 있는 어떤한 모델을 만들어 내는 것에 그 목적이 있다.
이러한 목적을 달성하기 위해서 무엇이 필요한 어떤 점이 어려울까? 데이터에 대한 Insight 를 가지고 데이터를 분석하고 모델링하기 위한 인력의 부족? 분석하기 위한 데이터가 수집되어 있지 않은 경우? 데이터에 레이블링을 사람이 해야하는 경우? 데이터를 수집하고 분석하기 위한 환경의 구성? 하이퍼파라메터 튜닝을 위한 반복작업? 딥러닝 알고리즘에 대한 이해와 모델 프로그램의 개발? 딥러닝 모델을 실제 가동시스템에 서비스하는 일? 모든 내용이 사실 어려울 것이다. 우리는 여러가지 문제 중에서 시스템 관점에서 해결 가능한 문제에 집중하고자 하였다.
(1) 딥러닝을 위한 환경의 구성
대부분의 Legacy System 은 Java 기반으로 구성되어진 경우가 많다. 하지만 머신러닝, 딥러닝 시스템 구축을 위해서는 Python 기반 환경을 구성하는 것이 유리하다. 그렇다고 모든 기존 시스템에서 하이브리드 형태의 deep learning 환경을 구성할 수 있는가?
(2) 모델 훈련 및 서비스를 위한 노력 과다 소요
우리가 하나의 비지니스를 위해서 데이터 수집 가공, 모델링, 평가, 서비스하는 전체 아키택쳐를 구성한다고 하면 이를 위해서 필요한 노력은 너무나도 클 것이다. 실제로 각각의 Step 에서 사용하는 기능들은 일정부분 공통화가 가능하다. 그럼에도 프로젝트 혹은 시스템 단위로 별도의 로직을 계속해서 개발하는 것이 효과적인가?
그렇다면 위와 같은 문제를 해결하기 위한 방법은 무엇일까? 공통화하여 재사용할 수 있는 부분은 없을까? 데이터 수집이라고 하면 데이터의 형태, 데이터 저장소의 종류에 따라 데이터를 가지고오기 위한 로직이 달라질 수 있지만, 어느 정도는 공통화하여 재활용이 가능하다. 데이터를 전처리 또한 데이터의 형태가 이미지, 음성, 자연어, 정형 데이터 등에 따라서 어떠한 알고리즘을 사용해야 하는지가 달라질 수 있지만 분명히 공통화하여 재활용 할 수 있다. 모델 생성을 위한 알고리즘 또한 딥러닝 알고리즘인지, 기존 머신러닝 알고리즘인지에 따라 달라질 수 있지만 특수한 경우가 아니면 파라메터로 커스터마이징 할 수 있는 형태로 공통화 할 수 있다고 볼 수 있다. 평가하기 위한 방법도 마찬가지로 n-fold, random, extra 등의 형태로 충분히 공통화 할 수 있다. 서비스 제공 또한 마찬가지로 생성한 알고리즘에 대한 서비스를 위한 아키택쳐 또한 일반화하여 제공이 가능하다.
Let’s talk about our framework
우리는 위와 같이 공통화하여 재사용할 수 있는 프로세스가 많이 존재한다는 것에 착안하여 일반적인 프로세스를 공통화하여 체계적으로 관리할 수 있도록 파이프라인을 구축하고 서버간에 유기적으로 통신을 할 수 있도록 Micro Service Architecture 기반으로 서비스를 제공하는 방향으로 FrameWork 의 설계를 고민하였다.
우리는 모듈의 공통화와 MSA 개념의 서비스 아키택쳐 구축을 포함하여 아래와 같은 문제들을 해결하기 위한 기능들을 제공합니다.
(1) 모듈화를 통한 공통 컴포넌트의 개발
(2) Micro Service Architecture 기반의 연동 서비스
(3) GraphFlow – Node 기반의 가변성 높은 파이프라인 구성
(4) AutoML 기법을 적용한 자동화된 최적의 Hyper Parameter Search
(5) UI/UX 기반의 손쉬운 사용자 환경 제공
(6) 각종 딥러닝, 머신러닝 알고리즘 모듈 제공
(7) Docker 간편한 설치 및 배포 제공
(8) 스케줄러를 통한 주기적인 모델 자동 업데이트
(9) 어플리케이션 레이어 플러그인을 통한 복합적인 서비스 프레임 제공
(10) 훈련한 모델을 직접 서비스 할 수 있는 서비스 관리 기능 제공
Easy to use – AutoML & UI/UX
딥러닝에서 가장 노력이 많이 필요한 부분은 모든 데이터 기반 시스템이 그렇듯이 데이터를 수집하고 가공하는 작업이다. 그 다음으로 많은 노력이 필요한 부분이 알고리즘을 선택하고 선택한 딥러닝 알고리즘으로 주어진 데이터를 가장 잘 설명할 수 있는 하이퍼파라메터의 조합을 찾는 일일 것이다. 우리의 프레임웍은 데이터 가공과 같이 비지니스에 대한 사람의 인사이트가 필요한 부분을 제외한 나머지 부분을 Genetic Algorithm, Hyper Parameter Random Search, GPU Clustring 등을 통해 자동화하였다. 이러한 반복적인 작업의 자동화를 통해 사용자가 데이터에 대한 인사이트에만 집중할 수 있도록 해준다.
Easy to service – Micro Service Architecture
프레임웍을 통해서 훈련되고 평가된 모델을 모델을 실행하기 위해 필요한 데이터 전처리를 포함하여 모든 과정을 간단한 Configuration 과정을 통해서 Rest API 형태로 손쉽게 서비스 디바이스 혹은 서버로 연동하여 사용할 수 있는 기능을 지원한다.
이는 모델별 버전관리, 배치버전관리, 활성화 버전 관리 등 모델에 대한 정보관리와 서비스에 접근가능한 유저에 대한 권한관리 등을 포함하며 빠른 반응 속도록 위하여 사용하는 모델에 대해서 Caching 처리를 지원하며 Caching 처리를 위한 메모리 자원을 서버별로 관리하는 기능을 포함한다. 기타 서비스를 위한 Key 발급 및 사용량 제한 등 기능도 지원 예정이다.
Easy to MainTain – Continuous Training
처음 프로젝트를 수행할때 좋았던 모델이 시간이 흐르고 그 성능이 나빠지는 현상을 많이 경험해 보았을 것이다. 이는 주어진 환경과 데이터의 변화에 따라서 피할 수 없는 것으로 우리는 이러한 문제의 해결을 위하여 주기적으로 신규 데이터를 수집하고 모델을 평가하여 최선의 모델을 갱신하는 기능을 제공한다. 이를 통해 업무 환경의 변화에 따른 미묘한 차이를 계속해서 모델에 반영할 수 있도록 하고자 한다.
Easy to Extends – Application Layers
많은 현실 세계의 문제들은 단순하게 신경망하나로 해결할 수 없는 경우가 대부분이다. 이러한 문제들중에 챗봇과 같이 공용화하여 서비스 가능한 부분들을 어플리케이션 레이어라는 이름으로 관리하여 딥러닝 레이어에서 개발된 각각의 신경망을 어플리케이션 레이어에서 연동하여 사용하는 형태로 확장성있는 서비스를 제공하고한다.현재 Frame Based ChatBot 을 구성하기 위한 봇빌더와 딥러닝 연동을 통한 모델 훈련 그리고 API를 통한 실제 서비스 연동 등을 제공하고 있으며, 지속적으로 이러한 어플리케이션 레이어를 추가해 가고자 한다.
Easy to Deploy – Packaged with docker image
우리의 프레임웍은 여러가지 역할을 하는(마스터, 트레인,서비스,디비 등) 으로 구성되어 있으며, 각 서버들간의 유기적인 연동을 통해서 실제 시스템이 서비스된다. 이러한 환경을 구성하는 것은 매우 번거로운 작업이 될 수 있기 때문에 우리는 우리의 솔루션을 도커 형태로 지속적으로 업데이트하여 제공하고 있으며, 사용자는 이를 활용하여 손쉽게 시스템을 구성하고 활용할 수 있다.