1 poin oleh GN⁺ 2024-10-17 | 2 komentar | Bagikan ke WhatsApp

Benchmarking NPU Qualcomm

Pengantar

  • Microsoft menyediakan tablet Surface dengan Windows yang berjalan di SoC berbasis Arm Qualcomm.
  • Tablet ini dipromosikan sebagai AI PC dan diklaim dapat menjalankan model machine learning lebih cepat dan lebih efisien daripada sistem lain.
  • Karena sangat tertarik pada perangkat keras Qualcomm, khususnya NPU, banyak waktu dan sumber daya diinvestasikan untuk mem-porting aplikasi pihak ketiga ke platform ini.
  • Namun, hampir tidak ada contoh kode atau benchmark dari pengembang eksternal untuk mendapatkan hasil cepat, sehingga disusun proyek independen untuk menunjukkan performanya.
  • Karena performanya lebih rendah dari yang diharapkan, benchmark ini dipublikasikan untuk mendapatkan ide dalam mengurangi latensi.

Instalasi

Python

  • Python digunakan untuk menjalankan skrip pengujian.
  • Python dari Microsoft Store tidak mendukung arsitektur Arm, sehingga disarankan menggunakan installer resmi dari Python.org.
  • Hasil yang dilaporkan menggunakan Python versi 3.11.9.

Cmake

  • Diperlukan alat build cmake untuk mengompilasi Onnx.
  • Jalankan perintah winget install cmake di Powershell.

Visual Studio

  • Visual Studio diperlukan untuk kompiler.
  • Saat mengunduh dan memasang Visual Studio Community Edition, pilih workload Desktop C++ Development.

Paket Pip

  • Paket Python yang diperlukan dapat dipasang dengan perintah py -m pip install -r requirements.txt.
  • Menggunakan Onnx versi 1.16 yang kompatibel dengan Qualcomm Onnx Runtime.

Benchmark

Menjalankan

  • Menjalankan benchmark: py benchmark_matmul.py

Memahami output

  • Runtime Onnx menghasilkan spam log awal.
  • Hasil benchmark memastikan bahwa hasil numerik CPU dan NPU sesuai.
  • CPU menunjukkan 821 Gigaops, pendekatan NPU pertama 225 Gigaops, dan pendekatan kedua 573 Gigaops.

Pengukuran benchmark

  • Benchmark menjalankan 6 perkalian matriks besar yang mirip dengan layer paling memakan waktu pada model transformer seperti Whisper dari OpenAI.
  • NPU terutama efektif untuk menjalankan model yang dikuantisasi, dan model dengan input serta output 8-bit berjalan lebih cepat.

Faktor yang dapat menimbulkan kebingungan

Batas komputasi
  • Model transformer modern didasarkan pada perkalian matriks besar dan bisa menjadi terbatas oleh memori.
  • Matriks input dibuat lebih mendekati persegi agar memungkinkan tiling dan reuse.
Pengaturan daya
  • Atur pengaturan penggunaan energi di Windows ke "Performa terbaik" dan jalankan benchmark saat tablet terhubung ke daya.
Topologi model
  • Membuat graph yang mencerminkan model AI modern, tetapi disederhanakan agar mudah ditafsirkan.
Kesalahan konfigurasi
  • Cara model dibangun dan dijalankan bisa saja keluar dari jalur cepat pada implementasi driver atau akselerator.
Framework Onnx
  • Ada beberapa cara untuk mengakses akselerasi AI di Windows, dan Onnx tampak sebagai framework yang paling sesuai.

Interpretasi hasil

  • Saat dijalankan pada Snapdragon X 12-core X1E80100, hasil NPU lebih lambat daripada CPU.
  • Performanya hanya mencapai 1,3% dari 45 triliun ops/detik yang dijanjikan dalam materi pemasaran.
  • Pada Nvidia Geforce RTX 4080 Laptop GPU, benchmark berjalan dalam 3,2 ms dan menunjukkan performa 2.160 Gigaops.

Ringkasan GN⁺

  • Performa Qualcomm NPU tidak memenuhi ekspektasi dan menunjukkan hasil yang lebih lambat daripada CPU.
  • Ada harapan terhadap kemungkinan perubahan perangkat lunak untuk mengoptimalkan performa NPU.
  • Framework Onnx tampak sebagai pilihan terbaik untuk mendapatkan performa akselerasi pada Qualcomm NPU.
  • Dibandingkan dengan GPU Nvidia, performa Qualcomm NPU tertinggal jauh.

2 komentar

 
bungker 2024-10-18

Saya kira NPU Ryzen memang sedikit lebih cepat daripada CPU, tapi sekarang keinginan untuk Snapdragon langsung turun drastis.

 
GN⁺ 2024-10-17
Komentar Hacker News
  • Perbedaan performa CPU dan GPU kecil. Mungkin ada masalah pada onnxruntime. NPU lebih berfokus pada konsumsi daya rendah daripada kecepatan

    • NPU digunakan sebagai bagian dari SoC dengan memisahkan komputasi AI dari CPU
    • Jika konsumsi daya CPU, NPU, dan GPU diukur dalam loop tak terbatas, NPU diperkirakan akan menjadi yang paling rendah
    • Karena NPU memakan banyak area silikon, sayang jika tidak dimanfaatkan dengan baik
  • Apple Neural Engine jauh lebih cepat daripada CPU atau GPU

    • Performa bervariasi tergantung arsitektur model, konversi, dan tuning
    • XCode menyediakan alat untuk mengukur waktu eksekusi model
    • Framework/runtime ML mungkin tidak mengimplementasikan semua operator
  • NPU ditujukan untuk menjalankan model kecil dengan daya rendah

    • NPU ditujukan untuk model yang sudah dioptimalkan, dan menangani pekerjaan kecil
    • Di Windows, hal seperti OCR layar penuh bisa dijalankan
  • Untuk men-deploy model ke NPU, diperlukan optimasi berbasis profiling

    • Model yang bekerja baik di CPU juga bisa memberikan hasil yang mengecewakan di NPU
  • Penjelasan di GitHub lebih berguna daripada blog

    • Saat menjalankan int8 matmul, performa onnx sekitar 0.6TF
  • Qualcomm tidak mengizinkan akses langsung ke NPU

    • Alat konversi bisa melewatkan optimasi
    • NPU cocok untuk model ML kecil dan aproksimasi fungsi yang cepat
  • Ada kemungkinan menggunakan Qualcomm SNPE SDK

    • Ingin tahu apakah Hexagon SDK benar-benar berfungsi dengan baik
  • Tulisan ini membahas NPU tertentu, benchmark tertentu, serta library dan framework tertentu

    • Karena itu, sulit menarik kesimpulan yang umum