다루는 내용

∙ 모델 training 및 inference의 성능에 영향을 미치는 요인

∙ 성능향상을 위한 다양한 방법

배포를 위한 클라우드 플랫폼(AWS, GCP)

다양한 모바일 플랫폼을 이용한 배포(Jetwon TX2, Android, iOS)

 

 


RAM과 같은 메모리 제약이 있는 mobile device들에서 결과모델(resultant model)의 사용은 문제가 될 수 있는데,

computing time이 증가할수록 infra cost가 증가한다.

 

특히, inference time은 동영상과 같은 application에서 매우 중요한데,

모델의 복잡성을 낮추기는 쉬우나 이는 정확도 또한 같이 떨어지게 되는 결과를 초래할 가능성이 높다.

 

따라서, 복잡성을 낮추지만 정확도를 심각하게 떨어뜨리지 않으면서 성능을 향상 혹은 유지시키는 방법이 중요하다.

이에 대한 대표적인 예시로 모델 양자화(Model Quantization)에 대해 설명하겠다.

 


🤔 Model Quantization (모델 양자화)

1. Quantization ?
물리학에서 양자화(Quantization)란, 연속적으로 보이는 양을 자연수라는 셀 수 있는 양으로 재해석하는 것
정보이론에서 양자화란, Analog(연속적)→Digital(이산적)인 값으로 바꾸어 근사하는 과정을 의미한다.
2. Model Quantization ?
딥러닝 모델에서의 가중치값은 float32(32bits 부동소수점)값을 갖는다.
이때, 가중치가 8bit로 양자화 된다면, 정확도는 덜 떨어지게 되는데, 배포 시 이 성능하락을 눈치채지 못할 수 있다.
(즉, 결과값에서 가중치의 정밀도는 성능에 미치는 영향이 적음을 의미)

위의 내용을 고려해본다면, 딥러닝에서 모델크기가 결정적일 때, 추론속도를 유의미하게 줄일 수 있다.
(가중치는 8bit로 저장, inference연산 시 float32로 수행)
또한 layer에 따라 모든 구성요소의 양자화 크기를 달리해 동작할 수 있다.(32bits, 16bits, 8bits)
3. 장점
Image에서 기본으로 갖는 Noise들을 줄여 robust한 특성을 갖게 할 수 있다.
inference연산 시 중복정보를 제거할 수 있다.

 

 


MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications (2017)

 

MobileNet은 객체검출, 얼굴속성, 미세분류, 표식인식 등과 같은 다양한 application program에 유용한 모델이다.

MobileNet은 기본적인 convolution kernel을 깊이방향(depth-wise)과 포인트방향(point-wise) convolution으로 대체하여 모델의 크기와 연산량을 줄인다.

 

 

모델 선택에 영향을 주는 매개변수
곱셈과 덧셈의 개수: 정확도와 다중덧셈사이의 절충값은 아래와 같다.

② 모델의 매개변수개수: 정확도와 매개변수의 수는 trade-off관계로 아래와 같다.

 

 

 


배포(Deploy)


클라우드에서 모델 배포하기

여러 application program에서 사용할 모델들은 cloud를 통해 배포하는데, 이를 위해 주요 cloud 서비스에 대해 알아보자.

 

AWS (Amazon Web Services)

AWS는 tensorflow기반 모델의 개발 및 배포를 지원한다.
https://aws.amazon.com/ko/ 에서 AWS 가입후 AMI(Amazon Machine Images)중 하나를 선택한다.
AMI는 필수 SW가 모두 설치된 컴퓨터의 이미지이기에 패키지 설치에 대한 걱정X

AWS는 딥러닝모델을 쉽게 훈련하고 배포하도록 DLAMI를 제공하는데, 여기서 여러 옵션을 선택할 수 있다.
source activate tensorflow_p36

 

위의 코드는 CUDA8에서 python3과 keras2로 tensorflow를 활성화 하는 코드이다.

이제 가상머신(VM)을 아래의 단계에 걸쳐 시작할 수 있다.

1. aws.amazon.com으로 이동 후 Amazon계정으로 로그인.
2. 로그인 페이지에서 Launch a virtual machine을 선택.
3. 선택후 나오는 윈도우에서 Get Started를 클릭, EC2 Instance를 선택.
4. EC2 Instance의 이름을 지정. (ex. tensorflow)
5. OS type을 지정. (ex. ubuntu, windows, ...)
6. Instance type을 선택 (인스턴스 타입은 다양한 RAM크기와 CPU 구성방법을 의미; t2.micro 선택추천)
7. 로그인에 사용되는 개인정보 PEM파일 생성.
8. 일정시간이 지나 인스턴스생성 완료상태가 표시되면 Proceed to EC2 console버튼을 클릭.
9. 이제 인스턴스가 생성되었으므로 Connect버튼을 클릭.
10. 인스턴스를 가상시스템의 명령프롬프트에 연결, 이때 이전단계에서 다운받은 PEM파일이 필요. 

11. 작업이 끝나면 Action ▶️ Instance State ▶️ Terminate를 클릭해 인스턴스를 완료, 시작.

 

 

 

 

GCP (Google Cloud Platform)
GCP는 AWS와 비슷하게 간단한 가상머신을 사용해 모델을 아래의 단계를 거쳐 training할 수 있다.

1. https://cloud.google.com/ 을 사용해 gmail로 플랫폼에 로그인
2. GO TO CONSOLE 버튼을 클릭해 콘솔로 이동
3. 오른쪽 상단메뉴()에서 Compute Engine ▶️ VM Instance를 클릭해 VM생성페이지로 이동
4. CREATE INSTANCE 버튼을 클릭해 필요 인스턴스를 생성
5. 이후 설정메뉴를 사용해 인스턴스유형을 선택할 수 있다.
  (Machine Type은 필요한 RAM과 CPU를 의미하며 사용자가 정의할 수 있고, 빠른 훈련을 위해 GPU를 선택할 수도 있다.)
6. Instance가 생성되면, 인스턴스에 대한 SSH🔽을 클릭, Open in browser window 옵션을 선택한다.
이를통해 브라우저로 콘솔을 열 수 있고 셸을 통해 tensorflow를 설치하고 모델훈련 및 배포가 가능하다.


GCP에서는 tensorflow를 사용하는 동안 사용자에게 도움이 되는 클라우드 머신러닝엔진이 있다.
훈련 및 배포 인프라 구축을 위해 GCP의 3가지 구성요소를 사용할 수 있다.
① 이미지 전처리를 위한 Cloud DataFlow
② 모델 훈련 및 배포를 위한 Cloud Machine Learning Engine
③ traindata, code, 결과를 저장하는 Google Cloud Storage

 

 


장치에서 모델 배포하기

장치에 배포를 한다는 것은 장치에 딥러닝 모델이 존재하고 장치에서 추론이 이뤄질 수 있음을 시사한다.

이제, 다양한 모바일 플랫폼에 배포하는 방법을 알아보자.

 

Jetson TX2
NVIDIA에서 공급하는 내장장치로 가볍고 소형이어서 드론 등에 적합하다.
또한, tensorflow를 위한 runtime인 TensorRT가 사전에 설치되어 있고 
tensorflow설치 전, Jetson과 flash를 설치하고 Ubuntu, CUDA, cuDNN을 설치할 수 있다.

https://github.com/jetsonhacks/installTensorFlowTX2 를 복사하고 명령프롬프트에서 아래 명령을 수행, Jetson TX2에 tensorflow를 설치한다.

1. 필수구성요소 설치
./installPrerequisites.sh


2. 아래 코드를 사용해 tensorflow를 복제
./cloneTensorFlow.sh


3. 아래 코드를 사용해 필요환경변수 설정
./setTensorFlowEV.sh


4. 아래 코드를 사용해 tensorflow를 build
./buildTensorFlow.sh


5. 아래 코드를 사용해 package를 wheel파일로 처리
./packageTensorFlow.sh


6. 아래 코드를 사용해 tensorflow를 설치
pip install $ HOME / tensorflow-1.0.1-cp27-cp27mu-linux_aarch64.whl

 

 

 

Android
모든 안드로이드앱에서 tensorflow를 사용할 수 있다.
build세부정보: https://www.tensorflow.org/lite/android/lite_build?hl=en
안드로이드에 대한 공식예제: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android

안드로이드 기기에서 tensorflow를 구현하는 단계는 안드로이드 프로그래밍경험이 있다 가정할 때, 아래와 같다.
1. tensorflow모델을 .pb파일로 내보낸다.
2. .so.jar 바이너리 파일을 build한다.
3. 라이브러리를 불러올 수 있도록 gradle 파일을 편집한다.
4. 안드로이드 앱을 불러와 실행한다.

 

 

 

iOS
애플은 CoreML 프레임워크를 사용해 iPhone Application program에서 사용하는 머신러닝을 통합하여 application program에 직접 통합가능한 표준모델목록을 제공한다.

tensorflow를 사용해 맞춤식 딥러닝모델을 훈련, 이를 아이폰에서 사용할 수 있으며 custom모델을 배치하기 위해 tensorflow를 CoreML 프레임워크 모델로 변환해야 한다.
구글이 TF→CoreML에 대해 릴리즈한 내용: https://github.com/tf-coreml/tf-coreml

TFcoreML은 아래 코드를 사용해 설치할 수 있다
pip install -U tfcoreml


또한, 아래 코드를 사용해 모델을 내보내서 아이폰에서 예측하기 위해 사용할 수 있다.
import tfcoreml as tf_converter

tf_converter.convert(tf_model_path='tf_model_path.pb',
					 mlmodel_path='mlmodel_path.mlmodel',
                     output_feature_names=['softmax:0'].
                     input_name_shape_dict={'input:0' : [1, 227, 227, 3]}
					)

 

 

 

 

'Gain Study' 카테고리의 다른 글

[Gain Study]. Hello, Pytorch!  (0) 2023.08.22

+ Recent posts