| |
notes:ai-model-file-format [2022/07/02] – created gomida | notes:ai-model-file-format [2022/11/20] (current) – gomida |
---|
===== February 22, 2020 ===== | ===== February 22, 2020 ===== |
| |
<sqtag>TF-Lite</sqtag> | === TF-Lite === |
<sq> | ---- |
On-Device AI를 위한 모델의 배포에 있에서 컨테이너 파일 포맷의 중요성은 의외로 높다. TensorFlow 또는 Caffe 에서 주로 사용하는 Proto-Buffer 포맷의 파일(.pb)은 연산자(Operator) 정의가 너무 유연하기 때문에 배포를 위한 좋은 포맷은 되기 어렵다. 특히 학습 과정에서 사용되는 수많은 연산자들을 비롯하여, 오픈 소스 환경에서 자유롭게 추가되는 연산자들로 인해 복잡성이 누적되고 있는 문제도 있다. 이에 Google은 TensorFlow의 연산자 가운데 추론(Inference)에 주로 사용되는 [[https://www.tensorflow.org/lite/guide/ops_compatibility|120여개의 연산자]]만으로 표준화 및 경량화한 TensorFlow-Lite (.tflite) 포맷을 소개하였고, 이를 안드로이드 표준 포맷으로 채택함으로써 유리한 입지를 확보하고 있다. | On-Device AI를 위한 모델의 배포에 있에서 컨테이너 파일 포맷의 중요성은 의외로 높다. TensorFlow 또는 Caffe 에서 주로 사용하는 Proto-Buffer 포맷의 파일(.pb)은 연산자(Operator) 정의가 너무 유연하기 때문에 배포를 위한 좋은 포맷은 되기 어렵다. 특히 학습 과정에서 사용되는 수많은 연산자들을 비롯하여, 오픈 소스 환경에서 자유롭게 추가되는 연산자들로 인해 복잡성이 누적되고 있는 문제도 있다. 이에 Google은 TensorFlow의 연산자 가운데 추론(Inference)에 주로 사용되는 [[https://www.tensorflow.org/lite/guide/ops_compatibility|120여개의 연산자]]만으로 표준화 및 경량화한 TensorFlow-Lite (.tflite) 포맷을 소개하였고, 이를 안드로이드 표준 포맷으로 채택함으로써 유리한 입지를 확보하고 있다. |
</sq> | |
| |
<sqtag>ONNX</sqtag> | === ONNX === |
<sq> | ---- |
반면 Google을 제외한 나머지 회사들은 [[https://onnx.ai/|ONNX (Open Neural Network eXchange) 포맷 진영]]에 참여하였고, 수년이 지난 지금은 [[https://github.com/onnx/onnx/blob/master/docs/Operators.md|160여개의 연산자]]를 표준화하면서 상당한 완성도를 갖추어 가고 있다. 후발주자인 만큼 연산자 이름들이 조금이나마 더 체계화되어 있는 편으로, 예를 들어 Depthwise-Convolution을 별도로 선언하지 않고, [[https://github.com/onnx/onnx/blob/master/docs/Operators.md#Conv|Convolution의 속성으로 Group을 Channel과 같은 수로 지정]]한다든지 하는 방식으로 좀 더 범용성을 갖추고 있다. 이는 [[https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv2d|PyTorch]]나 [[http://beta.mxnet.io/r/api/mx.symbol.Convolution.html|MXNet]] 등의 경향과도 일치하며, 그 목적에 부합하여 (TensorFlow를 제외하면) 프레임워크 간의 호환성도 괜찮은 편이다. 또한 Microsoft 주도로 개발되고 있는 [[https://github.com/microsoft/onnxruntime|ONNX-runtime]]은 큰 피처맵을 다루어야 하는 Image-to-Image 모델에서 괜찮은 성능을 보이고 있어 TensorFlow-Lite와의 경쟁 구도가 점점 흥미로워지고 있다. | 반면 Google을 제외한 나머지 회사들은 [[https://onnx.ai/|ONNX (Open Neural Network eXchange) 포맷 진영]]에 참여하였고, 수년이 지난 지금은 [[https://github.com/onnx/onnx/blob/master/docs/Operators.md|160여개의 연산자]]를 표준화하면서 상당한 완성도를 갖추어 가고 있다. 후발주자인 만큼 연산자 이름들이 조금이나마 더 체계화되어 있는 편으로, 예를 들어 Depthwise-Convolution을 별도로 선언하지 않고, [[https://github.com/onnx/onnx/blob/master/docs/Operators.md#Conv|Convolution의 속성으로 Group을 Channel과 같은 수로 지정]]한다든지 하는 방식으로 좀 더 범용성을 갖추고 있다. 이는 [[https://pytorch.org/docs/stable/_modules/torch/nn/modules/conv.html#Conv2d|PyTorch]]나 [[http://beta.mxnet.io/r/api/mx.symbol.Convolution.html|MXNet]] 등의 경향과도 일치하며, 그 목적에 부합하여 (TensorFlow를 제외하면) 프레임워크 간의 호환성도 괜찮은 편이다. 또한 Microsoft 주도로 개발되고 있는 [[https://github.com/microsoft/onnxruntime|ONNX-runtime]]은 큰 피처맵을 다루어야 하는 Image-to-Image 모델에서 괜찮은 성능을 보이고 있어 TensorFlow-Lite와의 경쟁 구도가 점점 흥미로워지고 있다. |
</sq> | |
| |
<sqtag>TVM COMPILER</sqtag> | === TVM COMPILER === |
<sq> | ---- |
디바이스 상에서 AI 모델 파일(.tflite, .onnx)을 해석하여 실행하는 TF-Lite 및 ONNX-runtime (인터프리터 방식)과는 달리, 오프라인에서 모델을 해석하여 각 프로세서에 최적화된 실행 코드를 미리 생성하여 배포하는 방식을 AI 모델 컴파일러라고 한다. [[https://github.com/apache/incubator-tvm|TVM (Tensor Virtual Machine)]]이 선구적이며, 연산자 구현(Tensor Program)을 변형하여 타겟 프로세서와 모델에 최적화 하는 [[https://arxiv.org/abs/1805.08166|방법]]을 도입함으로써, 추론 속도면에서 인터프리터 방식을 압도하고 있다. 그러나 모델의 배포 측면에서 생각하면 각각의 타겟 디바이스마다 서로 다른 실행 코드를 배포해야하는 단점이 발생하며, 앞으로 이를 고민해볼 필요가 있을 것이다. | 디바이스 상에서 AI 모델 파일(.tflite, .onnx)을 해석하여 실행하는 TF-Lite 및 ONNX-runtime (인터프리터 방식)과는 달리, 오프라인에서 모델을 해석하여 각 프로세서에 최적화된 실행 코드를 미리 생성하여 배포하는 방식을 AI 모델 컴파일러라고 한다. [[https://github.com/apache/incubator-tvm|TVM (Tensor Virtual Machine)]]이 선구적이며, 연산자 구현(Tensor Program)을 변형하여 타겟 프로세서와 모델에 최적화 하는 [[https://arxiv.org/abs/1805.08166|방법]]을 도입함으로써, 추론 속도면에서 인터프리터 방식을 압도하고 있다. 그러나 모델의 배포 측면에서 생각하면 각각의 타겟 디바이스마다 서로 다른 실행 코드를 배포해야하는 단점이 발생하며, 앞으로 이를 고민해볼 필요가 있을 것이다. |
</sq> | |
| |
<sqtag>NPU COMPILERS</sqtag> | === NPU COMPILERS === |
<sq> | ---- |
한편, 여러 회사에서 On-Device AI를 위한 NPU (Neural Processing Unit or Tensor Processing Unit) 제품이 쏟아지고 있는데, 연산자가 표준화되지 않아 서로 다른 모델 커버리지를 가지는 문제가 발생하고 있다. 특히 TVM 처럼 NPU에 최적화된 실행 코드를 미리 생성하여 배포하는 컴파일 방식을 채택하고 있어 AI 모델 배포를 위한 표준화는 요원하기만 하다. TensorFlow-Lite를 제안한 Google 마저도 Edge TPU 지원을 위해서 미리 [[https://coral.ai/docs/edgetpu/compiler/|컴파일]]한 Edge TPU 전용 .tflite 파일을 필요로 하는 실정이다. 그나마 Khronos 그룹에서 OpenVX의 [[https://www.khronos.org/registry/OpenVX/extensions/vx_khr_nn/1.2/html/index.html|Neural Network Extension]]을 공개하여 CNN(Convolution Neural Network)에 한정하면 어느정도 표준화 가능성이 보여지고 있지만, 범용 표준으로서 성공적이라고 말하기는 아직 어려울 것 같다. | 한편, 여러 회사에서 On-Device AI를 위한 NPU (Neural Processing Unit or Tensor Processing Unit) 제품이 쏟아지고 있는데, 연산자가 표준화되지 않아 서로 다른 모델 커버리지를 가지는 문제가 발생하고 있다. 특히 TVM 처럼 NPU에 최적화된 실행 코드를 미리 생성하여 배포하는 컴파일 방식을 채택하고 있어 AI 모델 배포를 위한 표준화는 요원하기만 하다. TensorFlow-Lite를 제안한 Google 마저도 Edge TPU 지원을 위해서 미리 [[https://coral.ai/docs/edgetpu/compiler/|컴파일]]한 Edge TPU 전용 .tflite 파일을 필요로 하는 실정이다. 그나마 Khronos 그룹에서 OpenVX의 [[https://www.khronos.org/registry/OpenVX/extensions/vx_khr_nn/1.2/html/index.html|Neural Network Extension]]을 공개하여 CNN(Convolution Neural Network)에 한정하면 어느정도 표준화 가능성이 보여지고 있지만, 범용 표준으로서 성공적이라고 말하기는 아직 어려울 것 같다. |
</sq> | |
| |