Qualcomm NPU 벤치마킹
소개
- Microsoft는 Qualcomm Arm 기반 SoC에서 실행되는 Windows를 탑재한 Surface 태블릿을 제공함.
- 이 태블릿은 AI PC로 홍보되며, 다른 시스템보다 더 빠르고 효율적으로 머신러닝 모델을 실행할 수 있음.
- Qualcomm의 하드웨어, 특히 NPU에 관심이 많아 이 플랫폼에 제3자 앱을 포팅하는 데 많은 시간과 자원을 투자함.
- 그러나 외부 개발자가 빠른 결과를 얻기 위한 코드 예제나 벤치마크가 거의 없어, 성능을 보여주기 위한 독립 프로젝트를 구성함.
- 기대했던 것보다 성능이 낮아, 지연 시간을 줄이기 위한 아이디어를 얻기 위해 벤치마크를 공개함.
설치
Python
- 테스트 스크립트를 실행하기 위해 Python 사용.
- Microsoft Store의 Python은 Arm 아키텍처를 지원하지 않으므로 공식 Python.org 설치 프로그램 사용 권장.
- 보고된 결과는 Python 3.11.9 버전 사용.
Cmake
- Onnx를 컴파일하기 위해 cmake 빌드 도구 필요.
- Powershell에서 winget install cmake 명령어 실행.
Visual Studio
- 컴파일러를 위해 Visual Studio 필요.
- Visual Studio Community Edition 다운로드 및 설치 시 Desktop C++ Development 워크로드 선택.
Pip 패키지
- 필요한 Python 패키지는 py -m pip install -r requirements.txt 명령어로 설치 가능.
- Qualcomm Onnx Runtime과 호환되는 Onnx 버전 1.16을 사용.
벤치마크
실행
- 벤치마크 실행: py benchmark_matmul.py
출력 이해하기
- Onnx 런타임은 초기 로그 스팸을 생성함.
- 벤치마크 결과는 CPU와 NPU의 수치 결과가 일치함을 확인.
- CPU는 821 Gigaops, 첫 번째 NPU 접근 방식은 225 Gigaops, 두 번째는 573 Gigaops 성능을 보임.
벤치마크 측정
- 벤치마크는 OpenAI의 Whisper와 같은 변환기 모델의 가장 시간 소모적인 레이어와 유사한 6개의 큰 행렬 곱셈을 실행.
- NPU는 주로 양자화된 모델을 효과적으로 실행하며, 8비트 입력 및 출력을 사용한 모델이 더 빠름.
혼란을 일으킬 수 있는 요소
계산 제한
- 현대 변환기 모델은 큰 행렬 곱셈을 기반으로 하며, 메모리 제한이 될 수 있음.
- 입력 행렬을 더 정사각형으로 만들어 타일링과 재사용이 가능하도록 함.
전원 설정
- Windows의 에너지 사용 설정을 "최고 성능"으로 설정하고, 태블릿을 전원에 연결하여 벤치마크 실행.
모델 토폴로지
- 현대 AI 모델을 반영하는 그래프를 생성하되, 해석하기 쉽게 단순화.
구성 오류
- 모델 빌드 및 실행 방식이 드라이버나 가속기 구현의 빠른 경로에서 벗어날 수 있음.
Onnx 프레임워크
- Windows에서 AI 가속에 접근하는 여러 방법이 있으며, Onnx가 가장 적합한 프레임워크로 보임.
결과 해석
- Snapdragon X 12-core X1E80100에서 실행 시 NPU 결과는 CPU보다 느림.
- 마케팅 자료에서 약속한 45조 ops/s의 1.3%에 불과한 성능을 보임.
- Nvidia Geforce RTX 4080 Laptop GPU에서는 3.2ms에 실행되어 2,160 Gigaops 성능을 보임.
GN⁺의 정리
- Qualcomm NPU의 성능이 기대에 미치지 못하며, CPU보다 느린 결과를 보임.
- NPU의 성능을 최적화하기 위한 소프트웨어 변경 가능성에 대한 기대가 있음.
- Onnx 프레임워크가 Qualcomm NPU에서 가속 성능을 얻기 위한 최적의 선택으로 보임.
- Nvidia GPU와 비교했을 때, Qualcomm NPU의 성능이 크게 떨어짐.