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
Saya kira NPU Ryzen memang sedikit lebih cepat daripada CPU, tapi sekarang keinginan untuk Snapdragon langsung turun drastis.
Komentar Hacker News
Perbedaan performa CPU dan GPU kecil. Mungkin ada masalah pada
onnxruntime. NPU lebih berfokus pada konsumsi daya rendah daripada kecepatanApple Neural Engine jauh lebih cepat daripada CPU atau GPU
NPU ditujukan untuk menjalankan model kecil dengan daya rendah
Untuk men-deploy model ke NPU, diperlukan optimasi berbasis profiling
Penjelasan di GitHub lebih berguna daripada blog
int8 matmul, performaonnxsekitar 0.6TFQualcomm tidak mengizinkan akses langsung ke NPU
Ada kemungkinan menggunakan Qualcomm SNPE SDK
Tulisan ini membahas NPU tertentu, benchmark tertentu, serta library dan framework tertentu