iOS/Framework

Core ML - Reducing the Size of Your Core ML App 번역

DevBabamba 2017. 12. 29. 01:06
반응형

※의역 오역 많습니다. 참고하시고 보세요~

원문: https://developer.apple.com/documentation/coreml/reducing_the_size_of_your_core_ml_app


Reducing the Size of Your Core ML App

  • 앱 번들 안의 Core ML 모델에 의해 사용된 저장공간을 줄이기

Overview

  • 앱에서 머신 러닝 모델을 번들링하는 것이 Core ML을 시작하는 가장 쉬운 방법이다.
  • 모델들을 더 발전하면, 더 커질 수 있고 상당한 저장 공간을 차지할 수 있다.
  • 신경망을 기반의 모델은, weight 파라미터에 대해 낮은 정확도 표시를 사용하여 footprint를 줄이는것을 고려하라.
  • 만약 모델이 절반의 정확도를 사용하는 신경망을 사용하지 않거나 앱의 크기를 줄일 필요가 있는 경우, 다운로드 기능을 추가하거나 앱에 모델을 번들링하는것을 대신해 유저의 디바이스에 모델을 컴파일하라.

Convert to a Half-Precision Model

  • Core ML Tools은 full-precision에서 half-presion 값(표현애 사용된 비트 수를 32에서 16으로 줄이는것)으로 신경망(neural network) 모델의 floating point weights를 컨버팅하기 위한 컨버전 함수를 제공한다.
  • 이 컨버전 타입은 network의 사이즈를 상당히 줄일 수 있다.
  • 대부분의 경우 network 내의 연결 weight로 부터 나오는 경우가 많다.

Listing 1 Converting a model to lower precision with Core ML Tools

# Load a model, lower its precision, and then save the smaller model.
model_spec = coremltools.utils.load_spec('./exampleModel.mlmodel')
model_fp16_spec = coremltools.utils.convert_neural_network_spec_weights_to_fp16(model_spec)
coremltools.utils.save_spec(model_fp16_spec, 'exampleModelFP16.mlmodel')
  • 오직 neural network 또는 half precision의 neural network가 임베딩된 pipeline 모델만 컨버팅할 수 있다.
  • 모델에서 모든 full - precision weight(가중치) 파라미터는 half - precision으로 컨버팅 되어야한다.
  • half - precision floating point 값을 사용하는 것은 오직 floating point 값의 accuracy를 줄이는것 뿐만아니라 가능한 값의 범위가 줄여진다.
  • 유저에게 이 옵션을 배포전에, 모델의 동작이 저하 되지 않았는지를 확인하라.

Download and Compile a Model

  • 앱의 사이즈를 줄이기 위한 또다른 옵션은 유저의 디바이스에 앱이 모델을 다운로드하고 백그라운드에서 컴파일하는 것이다.
  • 예를 들면, 유저가 앱에서 지원하는 모델의 부분만을 사용하는 경우, 모든 가능한 모델을 앱에 묶어(bundle) 놓을 필요가 없다.
  • 대신에, 모델은 이후 유저의 행동을 기반으로 다운로드 될 수 있다.
  • Downloading and Compiling a Model on the User's Device를 확인하라.


반응형