1 puan yazan GN⁺ 2024-10-17 | 2 yorum | WhatsApp'ta paylaş

Qualcomm NPU kıyaslaması

Giriş

  • Microsoft, Qualcomm Arm tabanlı SoC üzerinde çalışan Windows yüklü Surface tabletler sunuyor.
  • Bu tabletler AI PC olarak pazarlanıyor ve diğer sistemlere göre makine öğrenimi modellerini daha hızlı ve verimli çalıştırabildiği söyleniyor.
  • Qualcomm donanımına, özellikle de NPU'ya büyük ilgi duyulduğu için bu platforma üçüncü taraf uygulamaları taşımaya çok fazla zaman ve kaynak harcandı.
  • Ancak dış geliştiricilerin hızlı sonuç alabilmesi için kod örnekleri veya kıyaslamalar neredeyse hiç olmadığından, performansı göstermek için bağımsız bir proje oluşturuldu.
  • Performans beklenenden düşük çıktığı için, gecikmeyi azaltmaya yönelik fikirler edinmek amacıyla kıyaslama sonuçları paylaşılıyor.

Kurulum

Python

  • Test betiklerini çalıştırmak için Python kullanılıyor.
  • Microsoft Store'daki Python, Arm mimarisini desteklemediğinden resmi Python.org yükleyicisinin kullanılması öneriliyor.
  • Raporlanan sonuçlarda Python 3.11.9 sürümü kullanıldı.

Cmake

  • Onnx'i derlemek için cmake derleme aracına ihtiyaç var.
  • Powershell'de winget install cmake komutunu çalıştırın.

Visual Studio

  • Derleyici için Visual Studio gerekli.
  • Visual Studio Community Edition'ı indirip kurarken Desktop C++ Development iş yükünü seçin.

Pip paketleri

  • Gerekli Python paketleri py -m pip install -r requirements.txt komutuyla kurulabilir.
  • Qualcomm Onnx Runtime ile uyumlu olan Onnx 1.16 sürümü kullanılıyor.

Kıyaslama

Çalıştırma

  • Kıyaslamayı çalıştırma: py benchmark_matmul.py

Çıktıyı anlamak

  • Onnx çalışma zamanı başlangıçta bol miktarda günlük çıktısı üretir.
  • Kıyaslama sonuçları, CPU ve NPU'nun sayısal sonuçlarının birbiriyle uyumlu olduğunu doğruluyor.
  • CPU 821 Gigaops, ilk NPU yaklaşımı 225 Gigaops, ikinci yaklaşım ise 573 Gigaops performans gösteriyor.

Kıyaslamanın neyi ölçtüğü

  • Kıyaslama, OpenAI'nin Whisper'ı gibi transformer modellerde en çok zaman alan katmanlara benzer 6 büyük matris çarpımı çalıştırıyor.
  • NPU, özellikle nicemlenmiş modelleri verimli biçimde çalıştırıyor; 8 bit giriş ve çıkış kullanan modeller daha hızlı.

Karışıklığa yol açabilecek unsurlar

Hesaplama sınırları
  • Modern transformer modeller büyük matris çarpımlarına dayanır ve bellek tarafından sınırlanabilir.
  • Girdi matrisleri, döşeme ve yeniden kullanım mümkün olacak şekilde daha kare biçime getiriliyor.
Güç ayarları
  • Windows'ta enerji kullanımı ayarını "En iyi performans" olarak seçin ve tableti prize takılıyken kıyaslamayı çalıştırın.
Model topolojisi
  • Modern yapay zeka modellerini yansıtan, ancak yorumlamayı kolaylaştırmak için sadeleştirilmiş grafikler oluşturuluyor.
Yapılandırma hatası
  • Modelin oluşturulma ve çalıştırılma biçimi, sürücü veya hızlandırıcı uygulamasındaki hızlı yollardan sapıyor olabilir.
Onnx çerçevesi
  • Windows'ta yapay zeka hızlandırmasına erişmenin çeşitli yolları var ve Onnx en uygun çerçeve gibi görünüyor.

Sonuçların yorumlanması

  • Snapdragon X 12-core X1E80100 üzerinde çalıştırıldığında NPU sonuçları CPU'dan daha yavaş kalıyor.
  • Pazarlama materyallerinde vaat edilen 45 trilyon ops/s değerinin yalnızca %1,3'üne ulaşılıyor.
  • Nvidia Geforce RTX 4080 Laptop GPU üzerinde ise 3.2ms'de çalışarak 2.160 Gigaops performans gösteriyor.

GN⁺ Özeti

  • Qualcomm NPU'nun performansı beklentilerin altında kalıyor ve CPU'dan daha yavaş sonuç veriyor.
  • NPU performansını optimize etmeye yönelik yazılım değişiklikleri konusunda umut bulunuyor.
  • Qualcomm NPU'da hızlandırma performansı elde etmek için en iyi seçeneğin Onnx çerçevesi olduğu düşünülüyor.
  • Nvidia GPU ile karşılaştırıldığında Qualcomm NPU'nun performansı belirgin biçimde geride kalıyor.

2 yorum

 
bungker 2024-10-18

Ryzen NPU'nun CPU'dan biraz daha hızlı olduğunu sanıyordum ama Snapdragon hevesim bir anda söndü

 
GN⁺ 2024-10-17
Hacker News görüşleri
  • CPU ile GPU arasındaki performans farkı küçük. Bu, onnxruntime ile ilgili bir sorun olabilir. NPU, hızdan çok düşük güç tüketimine odaklanıyor

    • NPU, yapay zeka işlemlerini CPU'dan ayırıp SoC'nin bir parçası olarak kullanılıyor
    • CPU, NPU ve GPU'nun güç tüketimi sonsuz döngüde ölçülürse en düşük değerin NPU'da çıkması beklenir
    • NPU çok fazla silikon alanı kapladığı için düzgün kullanılmıyorsa bu üzücü
  • Apple Neural Engine, CPU veya GPU'dan çok daha hızlı

    • Performans; model mimarisi, dönüştürme ve tuning'e göre değişiyor
    • XCode, modelin çalışma süresini ölçen araçlar sunuyor
    • ML framework/runtime'ları tüm operatörleri uygulamıyor olabilir
  • NPU'nun amacı küçük modelleri düşük güçle çalıştırmak

    • NPU, optimize edilmiş modeller içindir ve küçük işleri yapar
    • Windows'ta tam ekran OCR gibi şeyler çalıştırabilir
  • NPU'ya model dağıtmak için profil tabanlı optimizasyon gerekir

    • CPU'da iyi çalışan model, NPU'da hayal kırıklığı yaratan sonuçlar verebilir
  • GitHub'daki açıklama blogdan daha faydalı

    • int8 matmul çalıştırıldığında onnx performansı yaklaşık 0.6TF
  • Qualcomm, NPU'ya doğrudan erişime izin vermiyor

    • Dönüştürme araçları optimizasyonları kaçırabilir
    • NPU, küçük ML modelleri ve hızlı fonksiyon yaklaşımı için uygun
  • Qualcomm SNPE SDK kullanma ihtimali var

    • Hexagon SDK'nın düzgün çalışıp çalışmadığı merak ediliyor
  • Bu yazı belirli bir NPU, belirli bir benchmark, belirli bir kütüphane ve framework hakkında

    • Bu nedenle genel sonuçlara varmak zor