Transformer 기반의 언어 모델들이 보여주는 성능적 향상은 놀랍지만 모델 크기가 기하급수적으로 늘어나면서 서비스 비용에 대한 고민도 중요해지고 있습니다. Bert-base나 GPT-2의 경우 약 1억개의 파라미터를 가지고 있어서 모델 크기, 메모리 대역폭, 추론 시간 모두 상당한 수준의 최적화가 이루어져야만 합니다.
모델 최적화에 사용되는 대표적인 기술 두 가지는 distillation과 quantization입니다. 공유 링크는 Huggingface와 Microsoft가 함께 작업한 결과물로서, INT8 quantization과 ONNX runtime을 Huggingface의 모델들에 적용하고, 최신 CPU들이 지원하는 SIMD instruction set(AVX2, AVX512 VNNI)에서의 성능을 분석한 것입니다. 참고로 AVX2는 256비트 레지스터를 가지고 있고 AVX512는 512비트 레지스터, 거기에 VNNI라는 CNN 특화 명령어 집합을 지원합니다.
요약하면, INT8 quantization과 ONNX runtime을 적용하면 모델 크기를 약 1/4로 줄일 수 있으며 성능도 거의 떨어지지 않습니다. 또한, 추론 속도도 AVX2 기준 1.6배 향상, AVX512 VNNI 기준 3배 이상 향상됩니다. 이 중 INT8 quantization의 기여도는 약 85% 정도이며 Pytorch 대비 ONNX runtime을 적용함으로써 얻는 속도 향상이 다시 15% 정도 됩니다.
한편, 추론 시간을 측정해보면 배치 크기 1 기준, sequence length 128, GPT-2, AVX512 VNNI를 기준으로 Pytorch FP32가 약 58ms인데 ONNX runtime을 적용하면 45ms, INT8 quantization을 적용하면 20ms가 됩니다. 위의 결과가 distillation 등 다른 최적화 기법이 적용되지 않은 것을 감안할 때, INT8 quantization과 ONNX runtime 적용은 모두 서비스화를 위한 MUST-HAVE ITEM이 아닐까 생각합니다.
딥러닝 학습 시장은 GPU가 필수적 요소이고 CPU로 대체하는 것이 불가능하겠지만 추론 시장은 아직 결판이 나지 않았습니다. NVidia Ampere multi-instance GPU, Intel AVX512 VNNI, Google TPU, Qualcomm neural processing engine, Huawei Kirin, Apple Bionic 등 각자가 자체 솔루션을 갖기 위해 노력하는 단계로 볼 수 있습니다. 이런 측면에서 볼 때, 각기 다른 벤더들의 제품에 대한 상호 운용성 및 표준화가 중요할 수 있는데, 이와 관련하여 ONNX와 같은 모델 표현 표준화 프레임워크가 많은 부분 기여할 것으로 생각합니다. 아래는 HuggingFace와 ONNX runtime을 함께 사용한 경우에 대한 소개와 실험 결과입니다.
또한, HuggingFace transformer와 ONNX Runtime github 링크도 공유합니다.