Quantization과 inference speed

Quantization은 precision reduction으로 parameter의 용량을 줄이기위해 나왔다. 하지만 실제로 써봤을 때 유의미한 속도차이가 있었다. 왜 그런 것일까 궁금해서 몇 가지 측정을 했다. 먼저 3가지 모델을 준비했다. 일반 cpu에서의 MobileNetV2, quantization을 진행한 MobileNetV2, layer fusion과 quantization을 진행한 MobileNetV2이다. 각각 모델에게 image를 5000씩 inference하도록 하고 time elapsed와 cache miss, instruction per cycle을 비교했다.
각각 코드는 다음과 같다.

pytorch cpu

quantization with non layer fusion

quantization with layer fusion

Result

결과는 ubuntu에 perf을 통해 측정했다.

time elapsed (sec) cache miss (%) instruction per cycle Model Size (MB)
MobileNetV2 89.8063 20.774 0.58 14.2605
+ quantization 54.4425 5.987 0.68 4.2422
+ layer fusion 31.1885 5.004 0.97 3.9436


이건 순전히 필자의 추측이다 vanilla MobileNetV2와 quantization MobileNetV2을 보면 instruction per cycle 차이보다 cache miss 가 더 유의미하다. (같은 instruction per cycle 에서 MobileNetV2의 time elapsed 는 105.2901이다. 따라서 precision reduction 으로 parameter 가 용량이 적어져 cache miss 가 적어진 것과 parameter data transfer latency 가 적어진 것으로 볼 수 있다. (혹시 아니면 메일을 주면 감사합니다.) 이후 layer fusion 을 통해 time elapsed 가 줄어들었다. 이때는 cache miss 가 높게 줄어들지 않았으므로 단순히 graph reduction 에 따른 성능향상으로 볼 수 있을 것이다. instruction per cycle 에서 봤을 때도 낮은 연산때문에 instruction per cycle 이 높아졌다. 그리고 context switching 도 줄어들었다.

$$ \frac 1 n \sum (x_i - \bar x)(y_i - \bar y) $$



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • LLM 엔지니어가 알아야 할 GPU 아키텍처: Ampere → Hopper → Blackwell
  • FlashAttention-4: Algorithm and Kernel Pipelining Co-Design for Asymmetric Hardware Scaling
  • FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision
  • Triton 05: Flash Attention — 종합 프로젝트
  • Triton 04: Matrix Multiplication — 2D 타일링과 Autotune