1P by neo 2달전 | favorite | 댓글 2개

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의 성능이 크게 떨어짐.

ryzen npu는 cpu보다 조금 빠른걸로 알고있었는데 스냅드래곤 뽐이 확죽네요

Hacker News 의견
  • CPU와 GPU의 성능 차이가 작음. onnxruntime의 문제일 가능성 있음. NPU는 속도보다는 저전력 소비에 중점이 있음

    • NPU는 AI 연산을 CPU에서 분리하여 SoC의 일부로 사용됨
    • CPU, NPU, GPU의 전력 소비를 무한 루프에서 측정하면 NPU가 가장 낮을 것으로 예상됨
    • NPU가 많은 실리콘 면적을 차지하므로 제대로 사용되지 않으면 아쉬움
  • Apple Neural Engine은 CPU나 GPU보다 훨씬 빠름

    • 모델 아키텍처, 변환, 튜닝에 따라 성능이 달라짐
    • XCode는 모델의 실행 시간을 측정하는 도구를 제공함
    • ML 프레임워크/런타임은 모든 연산자를 구현하지 않을 수 있음
  • NPU는 작은 모델을 저전력으로 실행하는 것이 목적임

    • NPU는 최적화된 모델을 위한 것으로, 작은 작업을 수행함
    • Windows에서는 전체 화면 OCR 등을 실행할 수 있음
  • NPU에 모델을 배포하려면 프로파일 기반 최적화가 필요함

    • CPU에서 잘 작동하는 모델도 NPU에서는 실망스러운 결과를 낼 수 있음
  • GitHub의 설명이 블로그보다 더 유익함

    • int8 matmul 실행 시 onnx 성능은 약 0.6TF임
  • Qualcomm은 NPU에 직접 접근을 허용하지 않음

    • 변환 도구가 최적화를 놓칠 수 있음
    • NPU는 작은 ML 모델과 빠른 함수 근사에 적합함
  • Qualcomm SNPE SDK 사용 가능성 있음

    • Hexagon SDK가 제대로 작동하는지 궁금함
  • 이 글은 특정 NPU, 특정 벤치마크, 특정 라이브러리와 프레임워크에 관한 것임

    • 따라서 일반적인 결론을 내리기 어려움