최근에 프로젝트를 진행하느라 오랜만에 포스팅 하는 것 같습니다. 최근에 Pytyhon Flask 기반으로 ML & DL RESTful API 서비스를 현업에서 개발 및 테스트를 완료 했습니다.
진행 기간 동안 현재 웹 기술과 별개로 기계학습 결과 및 데이터 전처리 과정을 Server에서 결과값을 제공하는 백그라운드 기술은 많은 노하우를 필요로 한다는 것을 다시 한 번 느끼게 되었습니다.
물론 하둡 & 스파크 맵리듀스 기반으로 한 대용량 데이터 처리 기술은 과거부터 지금까지 빠른 업데이트를 기반으로 데이터의 양과 처리속도가 비약적으로 발전하고 있습니다.
프로젝트 시작 전 RDMBS, NoSQL에서 가치있는 데이터를 전처리 후 사용자가 정의한 알고리즘을 선별해서 만족도가 높은 스코어 및 결과(분류, 회귀, 클러스터링)등을 제공하는 RESTful API 기반으로한 아키텍처를 정의했고 그때 많은 외국 포럼 및 현행 서비스 시스템 분석을 통해서 Flask를 사용하기로 결정했습니다.
Flask는 매우 경량화된 웹 프레임워크로 요즘에는 주로 머신러닝 및 딥러닝 학습 결과로 추출 한 Model 엑세스를 통해서 파이썬의 강력한 기계학습 관련 패키지 등을 통해서 매우 빠르게 개발 할 수 있습니다.
본 포스팅은 2부로 나눠서 포스팅할 예정입니다. 문서 맨 하단에 예제 소스를 항상 첨부해드립니다. 자세한 동작 환경은 소스코드를 직접 다운로드 받으셔서 차근차근 분석해보시면 쉽게 이해하실 수 있습니다.
- 11~14번 라인 : 기본 URL 요청 시 기본 index.html로 이동(렌더링) - 18번 라인 : 핵심 메소드 입니다. 클라이언트에서 숫자 이미지 파일이 업로드 되면 이미지 알파값 제거 등 편집 후 문자열 변환 -> 숫자 예측 그 후 예측 숫자 값을 index.html로 리턴 후 렌더링 합니다. - 48번 라인 : 서버 시작 시 기존 학습 모델을 로드합니다. 또는 클라이언트 요청 시에 로드 가능하나 이 부분은 다양한 테스트를 통해서 서버 퍼포먼스 부분을 측정 후 결정해야 할 것 같습니다.(Model 크기, 용량, 서버 사양 등) - 50번 라인 : Flask 서버 기동
model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import scipy.io
from sklearn.utils import shuffle
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.externals import joblib
# Google 주소 숫자 인식 모델 생성
# 로드 mat 파일
train_data = scipy.io.loadmat('extra_32x32.mat')
# 학습 데이터, 훈련 데이터
X = train_data['X']
y = train_data['y']
# 매트릭스 1D 변환
X = X.reshape(X.shape[0] * X.shape[1] * X.shape[2], X.shape[3]).T
y = y.reshape(y.shape[0], )
# 셔플(섞기)
X, y = shuffle(X, y, random_state=42)
# 학습 훈련 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=42)
- 10~28번 라인 : 일반적인 Scikit-learn의 랜덤포레스트 분류 예제 소스 입니다. 자세한 설명은 생략합니다. - 31번 라인 : 학습 완료 된 모델을 추출합니다. 당연히 파이프라인, GridSearch, Hyper Parameter 등을 통해서 스코어 검증 후 서비스 적합한 모델을 추출하셔야겠죠?
이번 포스팅에서는 플라스크 프레임워크를 활용해서 머신러닝, 딥러닝 서비스를 Rest API 형태로 서버를 구성하는 예제를 작성해보았습니다.
현재 네이버 클로바, 구글 딥러닝 VM, 아마존 AWS Rest 기계학습 서비스 등 대표 기업들이 클라우드 환경에서 다양한 알고리즘을 활용한 기계학습 파트를 사용자 편의성의 GUI 형태로 데이터 전처리 Feature 추출, 필터링, 학습, 모델 추출 등을 테스트 할 수 있는 서비스를 제공하고 있습니다.
또한, 최근에 사용하고 있는 삼성 빅데이터 분석 플랫폼인 브라이틱스도 정말 잘 만들었다는 생각이 듭니다.
웹에서 학습 모델을 테스트 할 수 있는 서비스는 서비스 사양, 서비 구성 형태, 데이터의 양, 클러스터링 등 다양한 기술적 요소와, 환경적 요소를 고려해야 좋은 성능의 응답속도를 보장 할 수 있는 것 같습니다.
이번 예제에서는 모델 재 학습(Retrain)이라는 중요한 파트를 분리해서 진행해보았습니다.
데이터 숙제를 한다는 것이 정말 힘든일이라는 것을 느끼고 있습니다. 중요한 변수를 간과하거나, 지식 부족의약식화된 알고리즘 검증, 잠재적으로 장애가 될 만한 데이터에 대한 소홀함 등으로 인해 엉뚱한 결과값을 도출하는 사례가 많은 것 같습니다.
다음 마지막 포스팅에서 현실에서 매순간 새롭게 발생되는 정보(데이터)를 일정한 주기형태로 다시 알고리즘 을 사용해서 재 학습 후 새로운 모델을 사용한 서비스를 구성하는 형태의 예제를 추가하겠습니다.
최근에 프로젝트를 진행하느라 오랜만에 포스팅 하는 것 같습니다. 최근에 Pytyhon Flask 기반으로 ML & DL RESTful API 서비스를 현업에서 개발 및 테스트를 완료 했습니다.
진행 기간 동안 현재 웹 기술과 별개로 기계학습 결과 및 데이터 전처리 과정을 Server에서 결과값을 제공하는 백그라운드 기술은 많은 노하우를 필요로 한다는 것을 다시 한 번 느끼게 되었습니다.
물론 하둡 & 스파크 맵리듀스 기반으로 한 대용량 데이터 처리 기술은 과거부터 지금까지 빠른 업데이트를 기반으로 데이터의 양과 처리속도가 비약적으로 발전하고 있습니다.
프로젝트 시작 전 RDMBS, NoSQL에서 가치있는 데이터를 전처리 후 사용자가 정의한 알고리즘을 선별해서 만족도가 높은 스코어 및 결과(분류, 회귀, 클러스터링)등을 제공하는 RESTful API 기반으로한 아키텍처를 정의했고 그때 많은 외국 포럼 및 현행 서비스 시스템 분석을 통해서 Flask를 사용하기로 결정했습니다.
Flask는 매우 경량화된 웹 프레임워크로 요즘에는 주로 머신러닝 및 딥러닝 학습 결과로 추출 한 Model 엑세스를 통해서 파이썬의 강력한 기계학습 관련 패키지 등을 통해서 매우 빠르게 개발 할 수 있습니다.
본 포스팅은 2부로 나눠서 포스팅할 예정입니다. 문서 맨 하단에 예제 소스를 항상 첨부해드립니다. 자세한 동작 환경은 소스코드를 직접 다운로드 받으셔서 차근차근 분석해보시면 쉽게 이해하실 수 있습니다.
- 11~14번 라인 : 기본 URL 요청 시 기본 index.html로 이동(렌더링) - 18번 라인 : 핵심 메소드 입니다. 클라이언트에서 숫자 이미지 파일이 업로드 되면 이미지 알파값 제거 등 편집 후 문자열 변환 -> 숫자 예측 그 후 예측 숫자 값을 index.html로 리턴 후 렌더링 합니다. - 48번 라인 : 서버 시작 시 기존 학습 모델을 로드합니다. 또는 클라이언트 요청 시에 로드 가능하나 이 부분은 다양한 테스트를 통해서 서버 퍼포먼스 부분을 측정 후 결정해야 할 것 같습니다.(Model 크기, 용량, 서버 사양 등) - 50번 라인 : Flask 서버 기동
model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import scipy.io
from sklearn.utils import shuffle
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.externals import joblib
# Google 주소 숫자 인식 모델 생성
# 로드 mat 파일
train_data = scipy.io.loadmat('extra_32x32.mat')
# 학습 데이터, 훈련 데이터
X = train_data['X']
y = train_data['y']
# 매트릭스 1D 변환
X = X.reshape(X.shape[0] * X.shape[1] * X.shape[2], X.shape[3]).T
y = y.reshape(y.shape[0], )
# 셔플(섞기)
X, y = shuffle(X, y, random_state=42)
# 학습 훈련 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=42)
- 10~28번 라인 : 일반적인 Scikit-learn의 랜덤포레스트 분류 예제 소스 입니다. 자세한 설명은 생략합니다. - 31번 라인 : 학습 완료 된 모델을 추출합니다. 당연히 파이프라인, GridSearch, Hyper Parameter 등을 통해서 스코어 검증 후 서비스 적합한 모델을 추출하셔야겠죠?
이번 포스팅에서는 플라스크 프레임워크를 활용해서 머신러닝, 딥러닝 서비스를 Rest API 형태로 서버를 구성하는 예제를 작성해보았습니다.
현재 네이버 클로바, 구글 딥러닝 VM, 아마존 AWS Rest 기계학습 서비스 등 대표 기업들이 클라우드 환경에서 다양한 알고리즘을 활용한 기계학습 파트를 사용자 편의성의 GUI 형태로 데이터 전처리 Feature 추출, 필터링, 학습, 모델 추출 등을 테스트 할 수 있는 서비스를 제공하고 있습니다.
또한, 최근에 사용하고 있는 삼성 빅데이터 분석 플랫폼인 브라이틱스도 정말 잘 만들었다는 생각이 듭니다.
웹에서 학습 모델을 테스트 할 수 있는 서비스는 서비스 사양, 서비 구성 형태, 데이터의 양, 클러스터링 등 다양한 기술적 요소와, 환경적 요소를 고려해야 좋은 성능의 응답속도를 보장 할 수 있는 것 같습니다.
이번 예제에서는 모델 재 학습(Retrain)이라는 중요한 파트를 분리해서 진행해보았습니다.
데이터 숙제를 한다는 것이 정말 힘든일이라는 것을 느끼고 있습니다. 중요한 변수를 간과하거나, 지식 부족의약식화된 알고리즘 검증, 잠재적으로 장애가 될 만한 데이터에 대한 소홀함 등으로 인해 엉뚱한 결과값을 도출하는 사례가 많은 것 같습니다.
다음 마지막 포스팅에서 현실에서 매순간 새롭게 발생되는 정보(데이터)를 일정한 주기형태로 다시 알고리즘 을 사용해서 재 학습 후 새로운 모델을 사용한 서비스를 구성하는 형태의 예제를 추가하겠습니다.