---
# System prepended metadata

title: TVM Quantization Note
tags: [Documentation]

---

TVM Quantization
===
[TOC]

## Abstraction
- Why we need quantization?
自從Lenet-5發展到現在，AI模型的規模越來越大，雖然精確度也越來越高，對於硬體算力的需求也與日俱增。為了滿足AI運算的需求，除了增強算力之外，簡化模型和降低運算量也是很重要的，尤其是近期Edge AI的概念逐漸發展起來，對於嵌入式應用或是需要低功耗和算力相對不強的平台(例如:手機、平板)，降低整體的運算量，並讓這些Model能夠運行在這些裝置上，並且足夠達到所需的精度和功能是很重要的課題，所以利用Quatization我們可以在精確度和模型大小、運算量上面取得平衡，讓一個原本無法在Edge端上執行的模型成功工作，並且達成特定的任務。


## TVM簡介
- What is TVM?
TVM是一種**AI Model Compiler**，就像LLVM Compiler可以將C/C++ Source編譯成執行檔一樣，它可以將AI Model(tensorflow, Pytorch, ONNX等)，編譯成執行檔。

- Why TVM?
TVM採用了與LLVM相似的方案，前端(Front End)將輸入的Source先轉為中介語言**RelayIR**，經過Optomiation和和Scheduling後，RelayIR就會被轉為更低階的表示法**TensorIR**，最後各個不同硬體的後端(Back End)就可以將TensorIR轉為可執行檔，或者也可以轉為C/C++ Source Code，以利於佈署到多種不同的硬體上面。
![](https://i.imgur.com/ms6eM8m.png)



## Quantization
- What is quantization?
Quantization(量化)是利用較低精確度的DataType去表示較高精確度的Data，當然這也不是沒有副作用的，當較高精度的Data qauntize到較低的精度時，一定會有誤差(就像5.3 --> 5)。而且模型的每一個Layer所會產生的Output可能會集中在某一個範圍裡，如果隨意挑選quantize的範圍，會因為損失過多的資訊，導致模型的精確度下降到完全不能用的地步，所以利用什麼方法或公式來決定量化的範圍是研究上很多人探討和實驗的議題。

- How quantzation take effect in TVM?
在TVM中，會有一連串的步驟去進行Quantization，它們被叫做Pass，當然不只有Quantization的Pass，在TVM中，有許多優化的方式(FuseOp、FoldConstant等)也是，使用者可以依照需求去編排種類和順序，當然也可以自行定義新的Pass進去。當Quantization的Pass執行完畢過後，Model裡面的Convolution和Dense Layer就會變成int8的運算了，相較於原始的資料型態(Float32)，利用int8進行運算能擁有更低的延遲和效能。