소개
TVM은 Keras, MXNet, PyTorch, Tensorflow, CoreML, DarkNet 등을 이용해 학습한 모델을 다양한 하드웨어 제품군에 최적화된 형태로 배포를 해주는 라이브러리입니다. 보통 연구 기간에 고수준 언어로 모델을 개발 & 학습한 이후 실제 제품이 동작하게 될 장비 위에서 별도의 피나는 성능 최적화 과정을 거쳐야 합니다. TVM은 이때의 각 장비에 대한 최적화 과정을 대폭 편리하게 만들어줍니다.
Deploy Prequantized Model
- CPU에서 fast 8bit instruction을 지원하지 않는 경우 TVM은 convolution을 16bit로 quantization합니다 [1]. 예를 들어, i9-9900K (skylake)는 fast 8bit instruction을 지원하지 않는 것으로 스펙문서에 기재되어 있습니다 [2]. x86의 경우, TVM은 AVX512 instruction set을 지원하는 CPU에 대해 최적의 성능을 낸다는 것을 참고해야 합니다. (CascadeLake를 포함한 그 이후의 CPU)
- PyTorch의 quantization 연산은 페이스북이 자체적으로 구현한 FBGEMM(Facebook General Matrix-Matrix Multiplication) [3]이라는 라이브러리를 사용합니다. i9-9000k에서는 TVM보다 FBGEMM의 최적화가 훨씬 더 잘 되어있는 것으로 실험을 통해 확인하였습니다.
- ARM 칩에 대해서도 Facebook이 자체 개발한 QNNPACK [4]이라는 라이브러리가 있습니다. 라즈베리파이에서는 Quantized Network에 대해 TVM과 QNNPACK 중 어떤 것이 더 좋은 성능을 내는지 추후에 확인해 볼 필요가 있습니다.
- TVM을 사용할 때, Python과 C++ 사이의 오버헤드가 상당히 큰 것으로 측정됩니다 [5]. TVM으로 빌드한 모델을 C++ 코드레벨로 사용 가능한지 추후 조사해볼 필요가 있습니다. (TVM의 C++ API 문서 [6])
**https://docs.tvm.ai/tutorials/frontend/deploy_prequantized.htmlhttps://en.wikichip.org/wiki/intel/core_i9/i9-9900khttps://engineering.fb.com/ml-applications/fbgemm/https://engineering.fb.com/ml-applications/qnnpack/https://docs.tvm.ai/tutorials/frontend/deploy_prequantized.html#measure-performancehttps://docs.tvm.ai/deploy/cpp_deploy.html**