Sinir Ağları API Sürücüleri

Bu sayfa, bir Neural Networks API (NNAPI) sürücüsünün nasıl uygulanacağına ilişkin bir genel bakış sağlar. Daha fazla bilgi için dokümantasyon içinde HAL tanım dosyalarında bulunan bakınız hardware/interfaces/neuralnetworks . Bir örnek sürücüsü uygulaması olan frameworks/ml/nn/driver/sample .

Sinir Ağları API hakkında daha fazla bilgi için bkz Sinir Ağları API .

Sinir Ağları HAL

Sinir ağları (NN), HAL (örneğin, bir telefon veya tablet), bir ürün olan birimler (GPU'larda) işleme Grafik gibi çeşitli aygıtlar ve dijital sinyal işlemcisi (DSP), bir soyutlamasını tanımlar. Bu aygıtların sürücüleri NN HAL ile uyumlu olmalıdır. Arayüz içinde HAL tanım dosyalarında belirtilen hardware/interfaces/neuralnetworks .

Çerçeve ve bir sürücü arasındaki arayüzün genel akışı Şekil 1'de gösterilmektedir.

Sinir Ağları akışı

Şekil 1. sinir ağları akış

başlatma

Başlatma, çerçeve kullanarak yeteneklerini için sürücü sorgular IDevice::getCapabilities_1_3 . @1.3::Capabilities yapısı, tüm veri türlerini içerir ve bir vektör kullanılarak nonrelaxed performansını temsil eder.

Hesaplamaların mevcut cihazlara nasıl tahsis edileceğini belirlemek için çerçeve, her bir sürücünün bir yürütmeyi ne kadar hızlı ve enerji verimli bir şekilde gerçekleştirebileceğini anlamak için yetenekleri kullanır. Bu bilgiyi sağlamak için sürücü, referans iş yüklerinin yürütülmesine dayalı olarak standartlaştırılmış performans numaraları sağlamalıdır.

Yanıt olarak sürücü döner bu değerleri belirlemek için IDevice::getCapabilities_1_3 , veri tipleri karşılık gelen performansını ölçmek için NNAPI kriter uygulamasını kullanın. MobileNet V1 ve V2, asr_float ve tts_float model 32-bit kayan nokta değerleri için performans ölçümü ve MobileNet V1 ve V2 modelleri 8-bitlik değerleri kuantize için tavsiye edilen nicelenmiş için tavsiye edilir. Daha fazla bilgi için, bkz Android Makine Öğrenme Testi Suite .

Android 9 ve alt yılında Capabilities yapısı sadece noktası ve nicelenmiş tensörleri yüzen için sürücü performans bilgileri içerir ve sayısal veri tipi içermez.

Başlatma işleminin bir parçası olarak, çerçeve kullanarak, daha fazla bilgi sorgulayabilir IDevice::getType , IDevice::getVersionString , IDevice:getSupportedExtensions ve IDevice::getNumberOfCacheFilesNeeded .

Ürün yeniden başlatmaları arasında çerçeve, bu bölümde açıklanan tüm sorguların belirli bir sürücü için her zaman aynı değerleri rapor etmesini bekler. Aksi takdirde, bu sürücüyü kullanan bir uygulama, düşük performans veya yanlış davranış sergileyebilir.

Derleme

Çerçeve, bir uygulamadan bir istek aldığında hangi cihazların kullanılacağını belirler. Android 10'da uygulamalar, çerçevenin seçtiği cihazları keşfedebilir ve belirleyebilir. Daha fazla bilgi için, bkz Aygıt Bulma ve Ataması .

Model derleme zamanda, çerçeve arayarak her aday sürücüye modelini gönderir IDevice::getSupportedOperations_1_3 . Her sürücü, modelin hangi işlemlerinin desteklendiğini gösteren bir dizi boole döndürür. Bir sürücü, çeşitli nedenlerle belirli bir işlemi destekleyemediğini belirleyebilir. Örneğin:

  • Sürücü veri türünü desteklemiyor.
  • Sürücü, yalnızca belirli giriş parametreleriyle işlemleri destekler. Örneğin, bir sürücü 3x3 ve 5x5'i destekleyebilir, ancak 7x7 evrişim işlemlerini destekleyemez.
  • Sürücünün büyük grafikleri veya girdileri işlemesini engelleyen bellek kısıtlamaları vardır.

Açıklandığı gibi derleme, girdi, çıktı ve modelin iç işlenen sırasında OperandLifeTime , bilinmeyen boyutlara veya dereceye sahip olabilir. Daha fazla bilgi için, bkz Çıktı şekli .

Çerçeve arayarak modelin bir alt kümesini yürütmek için hazırlamak için her seçilen sürücüyü talimatını IDevice::prepareModel_1_3 . Her sürücü daha sonra kendi alt kümesini derler. Örneğin, bir sürücü kod oluşturabilir veya ağırlıkların yeniden sıralanmış bir kopyasını oluşturabilir. Modelin derlenmesi ile isteklerin yürütülmesi arasında önemli bir süre olabileceğinden, derleme sırasında büyük aygıt belleği parçaları gibi kaynaklar atanmamalıdır.

Başarı durumunda sürücü bir döner @1.3::IPreparedModel kolu. Sürücü, modelin alt kümesini hazırlarken bir hata kodu döndürürse, çerçeve tüm modeli CPU üzerinde çalıştırır.

Bir uygulama başladığında derleme için kullanılan süreyi azaltmak için bir sürücü, derleme yapılarını önbelleğe alabilir. Daha fazla bilgi için, bkz Derleme Caching .

Uygulamak

Bir uygulama talebini geri çerçeveyi sorduğunda, çerçeve çağırır IPreparedModel::executeSynchronously_1_3 hazırlanmış bir model üzerinde bir senkron yürütme gerçekleştirmek için varsayılan olarak HAL yöntemi. Talepler de eşzamansız olarak kullanılarak yürütülebilir execute_1_3 yöntemi executeFenced yöntemi (bkz Çitlerle sarılmış yürütme ) veya kullanılarak yürütülür kayma yürütme .

Eşzamanlı yürütme çağrıları, eşzamansız çağrılara kıyasla performansı artırır ve iş parçacığı oluşturma ek yükünü azaltır, çünkü denetim yalnızca yürütme tamamlandıktan sonra uygulama işlemine döndürülür. Bu, sürücünün uygulama sürecini bir yürütmenin tamamlandığını bildirmek için ayrı bir mekanizmaya ihtiyacı olmadığı anlamına gelir.

Asenkron ile execute_1_3 yöntemi, uygulama sonrası uygulama sürecine kontrol döner başlamıştır ve yürütme tamamlandığında sürücüsü kullanarak, çerçeve bildirmelidir @1.3::IExecutionCallback .

Request giriş ve çıkış işlenen yürütülmesi için kullanılan çalıştırma yöntemi listeleri iletilen parametre. İşlenen verilerini depolayan bellek, birinci boyutun en yavaş yinelendiği ve herhangi bir satırın sonunda dolguya sahip olmadığı ana satır düzenini kullanmalıdır. İşlenenlerin türleri hakkında daha fazla bilgi için bkz işlenenlerini .

Bir istek tamamlandıktan NN HAL 1.2 ya da daha yüksek sürücüsü, bir hata durumu için çıktı şekli ve zamanlama bilgisi çerçevesinde geri döndürülür. Yürütme sırasında, modelin çıktısı veya dahili işlenenleri bir veya daha fazla bilinmeyen boyuta veya bilinmeyen sıraya sahip olabilir. En az bir çıktı işleneni bilinmeyen bir boyuta veya dereceye sahip olduğunda, sürücünün dinamik olarak boyutlandırılmış çıktı bilgilerini döndürmesi gerekir.

NN HAL 1.1 veya daha düşük olan sürücüler için, bir istek tamamlandığında yalnızca hata durumu döndürülür. Yürütmenin başarıyla tamamlanması için giriş ve çıkış işlenenlerinin boyutları tam olarak belirtilmelidir. Dahili işlenenler bir veya daha fazla bilinmeyen boyuta sahip olabilir, ancak belirtilen sıraya sahip olmaları gerekir.

Birden çok sürücüye yayılan kullanıcı istekleri için, ara bellek ayırmaktan ve her sürücüye yapılan çağrıları sıralamaktan çerçeve sorumludur.

Çoklu istekleri aynı üzerinde paralel olarak başlatılabilir @1.3::IPreparedModel . Sürücü, istekleri paralel olarak yürütebilir veya yürütmeleri seri hale getirebilir.

Çerçeve, bir sürücüden birden fazla hazırlanmış model tutmasını isteyebilir. Örneğin, model hazırlamak m1 hazırlamak m2 , talep yürütmek r1 ile m1 , yürütmek r2 ile m2 yürütmek r3 ile m1 , yürütmek r4 ile m2 , (açıklanan salınım Temizleme ) m1 , ve serbest bırakma m2 .

Kötü bir kullanıcı deneyimiyle sonuçlanabilecek yavaş bir ilk yürütmeyi önlemek için (örneğin, bir ilk kare kekemeliği), sürücü başlatmaların çoğunu derleme aşamasında gerçekleştirmelidir. İlk çalıştırmada başlatma, büyük geçici arabellekler ayırmak veya bir aygıtın saat hızını artırmak gibi erken gerçekleştirildiğinde sistem sağlığını olumsuz etkileyen eylemlerle sınırlandırılmalıdır. Yalnızca sınırlı sayıda eşzamanlı model hazırlayabilen sürücülerin, ilk çalıştırmada başlatmalarını yapmaları gerekebilir.

Android 10 veya sonraki sürümlerde, aynı hazırlanmış modelle birden çok yürütmenin hızlı bir şekilde art arda yürütüldüğü durumlarda, istemci, uygulama ve sürücü süreçleri arasında iletişim kurmak için bir yürütme patlaması nesnesi kullanmayı seçebilir. Daha fazla bilgi için, bkz İnfazıyla ve Hızlı Mesaj Kuyrukları Burst .

Hızlı bir şekilde art arda birden fazla yürütme için performansı artırmak için sürücü geçici arabellekleri tutabilir veya saat hızlarını artırabilir. Sabit bir süre sonra yeni istek oluşturulmazsa, kaynakları serbest bırakmak için bir bekçi dizisi oluşturulması önerilir.

Çıkış şekli

Bir veya daha fazla çıktı işleneninin tüm boyutlarının belirtilmediği istekler için, sürücü, yürütmeden sonra her bir çıktı işleneni için boyut bilgilerini içeren bir çıktı şekilleri listesi sağlamalıdır. Boyutları hakkında daha fazla bilgi için bkz OutputShape .

Bir yürütme, düşük boyutlu bir çıktı arabelleği nedeniyle başarısız olursa, sürücü, çıktı şekilleri listesinde hangi çıktı işlenenlerinin yetersiz arabellek boyutuna sahip olduğunu belirtmeli ve bilinmeyen boyutlar için sıfır kullanarak, mümkün olduğunca çok boyutlu bilgi bildirmelidir.

Zamanlama

Android 10'da, uygulama derleme işlemi sırasında kullanmak üzere tek bir cihaz belirtmişse uygulama yürütme süresini sorabilir. Ayrıntılar için bkz MeasureTiming ve Aygıt Bulma ve Ataması . Bu durumda, bir NN HAL 1.2 sürücü çalıştırma süresinin ölçülmesi veya bildirmelidir UINT64_MAX bir istek çalıştırırken (süre kullanılamaz olduğunu belirtmek için). Sürücü, yürütme süresinin ölçülmesinden kaynaklanan herhangi bir performans cezasını en aza indirmelidir.

Sürücü içinde mikrosaniye aşağıdaki sürelerini bildiriyor Timing yapısı:

  • Cihazda işletim süresi: mu değil ev sahibi işlemci üzerinde çalışan sürücü, yürütme zamanı vardır.
  • Sürücüsünde işletim süresi: cihazda yürütme zamanı içerir.

Bu süreler, yürütmenin askıya alındığı, örneğin yürütmenin başka görevler tarafından engellendiği veya bir kaynağın kullanılabilir hale gelmesinin beklendiği zamanı içermelidir.

Sürücü yürütme süresini ölçmek için bir talep gelmediğini zaman veya bir yürütme hatası olduğunda, sürücü gibi süreleri bildirmelisiniz UINT64_MAX . Sürücü yürütme süresini ölçmek istendi bile, yerine bildirebilirsiniz UINT64_MAX sürücüsü veya her ikisi de, cihazda zaman zaman. Sürücü dışında bir değer olarak, her iki süreleri bildirdiğinde UINT64_MAX , sürücüde uygulama süresi eşit veya cihazda zaman aşmalıdır.

çitle çevrili yürütme

Android 11, NNAPI infaz bir listesi için beklemeye izin veren sync_fence bir kolları ve isteğe bağlı olarak geri sync_fence yürütme tamamlandığında sinyal nesne. Bu, küçük dizi modelleri ve akış kullanım durumları için ek yükü azaltır. Bir çit uygulama ayrıca, sinyal veya bekleyebilir diğer bileşenler ile daha etkili bir birlikte çalışma sağlar sync_fence . Hakkında daha fazla bilgi için sync_fence , bkz Senkronizasyon Framework .

Bir çit düzenlemede, çerçeve aramalar IPreparedModel::executeFenced beklemek senkronizasyon çitler bir vektör ile hazırlanmış bir model üzerinde bir çit, uyumsuz yürütme başlatmak için bir yöntem. Asenkron görev çağrı dönmeden önce bitmiş ise, boş bir sap için iade edilebilir sync_fence . Bir IFencedExecutionCallback nesnesi de sorgu hata durumu ve süresi bilgilerine çerçeveyi sağlamak için iade edilmelidir.

Bir yürütme işlemi tamamlandıktan sonra, aşağıdaki iki zamanlama yürütme süresini ölçüm değeri ile sorgulanabilir IFencedExecutionCallback::getExecutionInfo .

  • timingLaunched : tarihten itibaren Süre executeFenced zaman çağrılır executeFenced döndü sinyalleri syncFence .
  • timingFenced : Süre zaman gelen yürütme bekler zaman işareti olan tüm senkronize çitler executeFenced geri sinyal syncFence .

Kontrol akışı

Android 11 veya üstünü çalıştıran cihazlar için, NNAPI iki kontrol akış işlemleri içerir IF ve WHILE argümanlar olarak diğer modellere alıp koşullu (onları yürütmek, IF (defalarca) ya da WHILE ). Bu nasıl uygulanacağına ilişkin daha fazla bilgi için bkz Kontrol akışı .

Hizmet kalitesi

Android 11'de NNAPI, bir uygulamanın modellerinin göreli önceliklerini, bir modelin hazırlanması için beklenen maksimum süreyi ve bir yürütme için beklenen maksimum süreyi belirtmesine izin vererek iyileştirilmiş hizmet kalitesi (QoS) içerir. tamamlanacak. Daha fazla bilgi için, bkz Hizmet Kalitesi .

Temizlemek

Bir uygulama hazırlanmış bir model kullanılarak tamamlandığında, çerçeve olan başvurusunu serbest @1.3::IPreparedModel nesne. Ne zaman IPreparedModel nesne artık başvuruda bulunulan, otomatik oluşturulduğu sürücü hizmetinde yok edilecek. Modele özgü kaynaklar, bu sırada sürücünün yıkıcıyı uygulamasında geri alınabilir. Sürücü hizmeti istiyorsa IPreparedModel artık istemci tarafından gerektiğinde nesne otomatik olarak yok edilmek üzere, bu ilgili herhangi bir referans tutmak olmamalıdır IPreparedModel sonra nesnenin IPreparedeModel nesne yoluyla iade edilmiştir IPreparedModelCallback::notify_1_3 .

CPU kullanımı

Sürücülerin hesaplamaları ayarlamak için CPU'yu kullanması beklenir. Sürücüler, grafik hesaplamaları yapmak için CPU'yu kullanmamalıdır, çünkü bu, çerçevenin işi doğru şekilde tahsis etme becerisine müdahale eder. Sürücü, işleyemediği parçaları çerçeveye bildirmeli ve gerisini çerçevenin halletmesine izin vermelidir.

Çerçeve, satıcı tarafından tanımlanan işlemler dışındaki tüm NNAPI işlemleri için bir CPU uygulaması sağlar. Daha fazla bilgi için, bkz Satıcı Uzantıları .

Android 10'da sunulan işlemleri (API düzeyinde 29) sadece CTS ve VTS testleri doğru olduğunu doğrulamak için bir referans işlemci uygulaması var. Mobil makine öğrenimi çerçevelerinde yer alan optimize edilmiş uygulamalar, NNAPI CPU uygulamasına göre tercih edilir.

Yardımcı işlevler

NNAPI kod tabanı, sürücü hizmetleri tarafından kullanılabilecek yardımcı program işlevlerini içerir.

frameworks/ml/nn/common/include/Utils.h dosya, günlük için ve farklı NN HAL alternatifler arasında dönüştürme için kullanılanlar gibi çeşitli yardımcı işlevler içerir.

  • VLog: VLOG Android'in etrafında sarıcı makro olduğu LOG uygun etiket ayarlanır eğer sadece mesaj kaydeder debug.nn.vlog özelliği. initVLogMask() çağrılmadan önce çağrılmalıdır VLOG . VLOG_IS_ON makro olmadığını kontrol etmek için kullanılabilir VLOG şu anda etkin gerekli değilse atlanır karmaşık günlük kodu sağlayan. Mülkün değeri aşağıdakilerden biri olmalıdır:

    • Günlük kaydı yapılmayacağını belirten boş bir dize.
    • Belirteci 1 ya da all tüm günlük yapılması olduğuna işaret etmektedir.
    • Hangi günlüğe kaydetmenin yapılacağını belirten, boşluk, virgül veya iki nokta üst üste ile ayrılmış bir etiket listesi. Etiketleri compilation , cpuexe , driver , execution , manager ve model .
  • compliantWithV1_* : İade true bir NN HAL nesne bilgi kaybı olmadan farklı bir HAL versiyonunun aynı tip dönüştürülebilir eğer. Örneğin, arama compliantWithV1_0 bir ilgili V1_2::Model döner false modeli NN HAL 1.1 veya NN HAL 1.2'de çalışma modlarını içeriyorsa.

  • convertToV1_* : dönüştürür bir sürümden diğerine bir NN HAL nesnesi. Dönüştürme bilgi kaybına neden olursa (yani türün yeni sürümü değeri tam olarak temsil edemiyorsa) bir uyarı günlüğe kaydedilir.

  • Yetenekleri: nonExtensionOperandPerformance ve update fonksiyonları yardım yapı için kullanılabilecek Capabilities::operandPerformance alanını.

  • : Tiplerinin özelliklerini sorgulanıyor isExtensionOperandType , isExtensionOperationType , nonExtensionSizeOfData , nonExtensionOperandSizeOfData , nonExtensionOperandTypeIsScalar , tensorHasUnspecifiedDimensions .

frameworks/ml/nn/common/include/ValidateHal.h dosyası, NN HAL nesne HAL sürümü kullanıcının özelliklerine göre geçerli olduğunu doğrulamak için yardımcı fonksiyonları içerir.

  • validate* : İade true NN HAL nesne HAL sürümün şartnamesine uygun geçerli olup olmadığını. OEM türleri ve uzantı türleri doğrulanmaz. Örneğin, validateModel döndüren false modeli ameliyat içeriyorsa o referanslar var olmayan bir işlenen indeksi veya bu HAL sürümü de desteklenmeyen bir çalışma.

frameworks/ml/nn/common/include/Tracing.h dosya ekleme basitleştirmek için makrolar içeren systracing Sinir Ağları koduna bilgi. Bir örnek için bkz NNTRACE_* makro çağırmaları örnek sürücüsü .

frameworks/ml/nn/common/include/GraphDump.h dosyası içeriğini boşaltmak için bir yardımcı işlev içeren Model ayıklama amacıyla, grafik biçiminde.

  • graphDump : Graphviz (modelin bir temsilini yazar .dot (eğer varsa), belirtilen akışına ya da (herhangi bir akış temin edilir ise) LogCat için) biçiminde.

doğrulama

NNAPI uygulamanızı test etmek için Android çerçevesinde bulunan VTS ve CTS testlerini kullanın. VTS, sürücülerinizi doğrudan (çerçeveyi kullanmadan) uygularken, CTS bunları çerçeve aracılığıyla dolaylı olarak uygular. Bunlar, her bir API yöntemini test eder ve sürücüler tarafından desteklenen tüm işlemlerin doğru çalıştığını doğrular ve kesinlik gereksinimlerini karşılayan sonuçlar sağlar.

NNAPI için CTS ve VTS'deki kesinlik gereksinimleri aşağıdaki gibidir:

  • Kayan nokta: ABS (beklenen - gerçek) <= atol + rtol * abs (beklenen); nerede:

    • fp32 için atol = 1e-5f, rtol = 5.0f * 1.1920928955078125e-7
    • fp16 için atol = rtol = 5.0f * 0.0009765625f
  • Nicelenmiş: kapalı-bir (haricinde mobilenet_quantized , olan kapalı-by-üç)

  • Boole: Tam eşleme

CTS'nin NNAPI'yi test etme yollarından biri, her sürücünün yürütme sonuçlarını NNAPI referans uygulamasıyla test etmek ve karşılaştırmak için kullanılan sabit sözde rastgele grafikler oluşturmaktır. Sonuçlar hassas kriterlere uymayan eğer NN HAL 1.2 veya daha yüksek olan sürücüler için CTS bir hata bildirir ve altında başarısız modeli için bir şartname dosyası döker /data/local/tmp ayıklama için. Hassas ölçütleri hakkında daha ayrıntılı bilgi için bkz TestRandomGraph.cpp ve TestHarness.h .

tüy testi

Bulanıklık testinin amacı, beklenmeyen girdiler gibi faktörler nedeniyle test edilen kodda çökmeleri, iddiaları, bellek ihlallerini veya genel tanımsız davranışları bulmaktır. NNAPI hav testi için, Android dayalı testler kullanır libFuzzer yeni rastgele girişler oluşturmak için önceki test durumlarda hat kapsama kullandıkları için fuzzing etmek için etkilidirler. Örneğin, libFuzzer, yeni kod satırlarında çalışan test senaryolarını tercih eder. Bu, testlerin sorunlu kodu bulmak için harcadığı süreyi büyük ölçüde azaltır.

Sürücü uygulama doğrulamak için test tüylenme gerçekleştirmek için, ise Modifiye frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp içinde libneuralnetworks_driver_fuzzer Test programı sürücü kod dahil etmek AOSP bulundu. NNAPI tüylenme testi hakkında daha fazla bilgi için, bkz frameworks/ml/nn/runtime/test/android_fuzzing/README.md .

Güvenlik

Uygulama süreçleri doğrudan sürücü süreciyle iletişim kurduğundan, sürücülerin aldıkları çağrıların bağımsız değişkenlerini doğrulaması gerekir. Bu doğrulama VTS tarafından doğrulanır. Doğrulama kodu olan frameworks/ml/nn/common/include/ValidateHal.h .

Sürücüler, aynı cihazı kullanırken uygulamaların diğer uygulamalara müdahale etmemesini de sağlamalıdır.

Android Makine Öğrenimi Test Paketi

Android Machine Learning Test Suite (MLTS), satıcı cihazlarda gerçek modellerin doğruluğunu doğrulamak için CTS ve VTS'de bulunan bir NNAPI karşılaştırmasıdır. Kriter değerlendirir gecikme ve doğruluk ve kullanan sonuçlar ile sürücülerin sonuçlarını karşılaştırır TF Lite aynı model ve veri kümeleri için, CPU üzerinde çalışan. Bu, bir sürücünün doğruluğunun CPU referans uygulamasından daha kötü olmamasını sağlar.

Android platformu geliştiricileri, sürücülerin gecikmesini ve doğruluğunu değerlendirmek için MLTS'yi de kullanır.

NNAPI karşılaştırma ölçütü, AOSP'deki iki projede bulunabilir:

Modeller ve veri kümeleri

NNAPI karşılaştırması aşağıdaki modelleri ve veri kümelerini kullanır.

  • Farklı boyutlarda nicelenmiş MobileNetV1 kayan nokta ve u8, Açık Görüntüler Veri Kümesi v4'ün küçük bir alt kümesine (1500 görüntü) karşı çalışır.
  • Farklı boyutlarda nicelenmiş MobileNetV2 kayan nokta ve u8, Açık Görüntüler Veri Kümesi v4'ün küçük bir alt kümesine (1500 görüntü) karşı çalışır.
  • Metinden konuşmaya yönelik uzun kısa süreli bellek (LSTM) tabanlı akustik model, CMU Arctic kümesinin küçük bir alt kümesine karşı çalışır.
  • Otomatik konuşma tanıma için LSTM tabanlı akustik model, LibriSpeech veri kümesinin küçük bir alt kümesine karşı çalışır.

Daha fazla bilgi için, bkz platform/test/mlts/models .

Stres testi

Android Makine Öğrenimi Test Paketi, sürücülerin yoğun kullanım koşulları altında veya müşterilerin davranışlarının kritik durumlarında dayanıklılığını doğrulamak için bir dizi çarpışma testi içerir.

Tüm çarpışma testleri aşağıdaki özellikleri sağlar:

  • Asın algılama: Bir test sırasında NNAPI istemci takılırsa, sınama hatası nedeni ile başarısız olursa HANG ve sonraki teste test paketi hamle.
  • NNAPI istemci kazasında algılama: Testler istemci çöker hayatta ve testler başarısız olmasının nedeni ile başarısız CRASH .
  • Sürücü kazasında algılama: Testler bir NNAPI çağrı üzerine bir başarısızlık neden olan bir sürücü kazasında algılayabilir. Sürücü işlemlerinde NNAPI hatasına neden olmayan ve testin başarısız olmasına neden olmayan çökmeler olabileceğini unutmayın. Başarısızlık bu tür karşılamak için, çalıştırmanız önerilir tail sürücülerle ilgili hata veya çöker için sistem günlüğüne üzerinde komutu.
  • Tüm mevcut hızlandırıcıları Hedefleme: Testler mevcut tüm sürücülerin karşı çalıştırılır.

Tüm çarpışma testleri aşağıdaki dört olası sonuca sahiptir:

  • SUCCESS : Bir hatasız tamamladı Yürütme.
  • FAILURE : Yürütme başarısız oldu. Tipik olarak, bir model test edilirken, sürücünün modeli derleyemediğini veya yürütemediğini gösteren bir hatadan kaynaklanır.
  • HANG : Test süreci tepkisiz hale geldi.
  • CRASH : Test işlemi kilitlendi.

Stres testi ve çarpışma testleri tam listesi hakkında daha fazla bilgi için bkz platform/test/mlts/benchmark/README.txt .

MLTS'yi kullanma

MLTS'yi kullanmak için:

  1. Senin iş istasyonuna bir hedef cihazı bağlayın ve emin üzerinden erişilebilir olduğunu yapmak adb . Hedef cihaz dışa ANDROID_SERIAL birden fazla cihaz bağlıysa ortam değişkeni.
  2. cd Android üst düzey kaynak dizine.

    source build/envsetup.sh
    lunch aosp_arm-userdebug # Or aosp_arm64-userdebug if available.
    ./test/mlts/benchmark/build_and_run_benchmark.sh
    

    Bir performans testinin sonunda, sonuçları bir HTML sayfası olarak sunulmaktadır ve geçirilen xdg-open .

Daha fazla bilgi için, bkz platform/test/mlts/benchmark/README.txt .

Sinir Ağları HAL sürümleri

Bu bölüm, Android ve Neural Networks HAL sürümlerinde sunulan değişiklikleri açıklar.

Android 11

Android 11, aşağıdaki önemli değişiklikleri içeren NN HAL 1.3'ü sunar.

  • NNAPI'de imzalı 8 bit niceleme desteği. Ekler TENSOR_QUANT8_ASYMM_SIGNED işlenen türü. İmzasız nicelemeyle işlemleri destekleyen NN HAL 1.3'e sahip sürücülerin, bu işlemlerin imzalı türevlerini de desteklemesi gerekir. : En nicelenmiş operasyonların imzalı ve imzasız sürümlerini çalıştırırken, sürücüler bu gereksinime beş istisnası vardır 128 ofset kadar bir aynı sonuçlar üretmelidir CAST , HASHTABLE_LOOKUP , LSH_PROJECTION , PAD_V2 ve QUANTIZED_16BIT_LSTM . QUANTIZED_16BIT_LSTM operasyonu imzalı işlenen desteklemez ve diğer dört işlem imzalı nicemlemesini destekleyen ama aynı olması sonucu gerektirmez.
  • Çerçeve aramaları çitle çevrili infaz için destek IPreparedModel::executeFenced yöntemini beklemek senkronizasyon çitler bir vektör ile hazırlanmış bir model üzerinde bir çit, asenkron yürütme başlatmak için. Daha fazla bilgi için, bkz Çitlerle sarılmış yürütme .
  • Kontrol akışı için destek. Ekler IF ve WHILE argümanlar olarak diğer modellere alıp koşullu (onları yürütmek işlemleri, IF defalarca () veya WHILE ). Daha fazla bilgi için, bkz Kontrol akışı .
  • Uygulamalar, modellerinin göreli önceliklerini, bir modelin hazırlanması için beklenen maksimum süreyi ve bir yürütmenin tamamlanması için beklenen maksimum süreyi gösterebildiğinden iyileştirilmiş hizmet kalitesi (QoS). Daha fazla bilgi için, bkz Hizmet Kalitesi .
  • Sürücü tarafından yönetilen arabellekler için ayırıcı arabirimleri sağlayan bellek etki alanları desteği. Bu, aynı sürücü üzerinde ardışık yürütmeler arasında gereksiz veri kopyalamayı ve dönüştürmeyi önleyerek, aygıt yerel belleklerinin yürütmeler arasında geçirilmesine olanak tanır. Daha fazla bilgi için, bkz Hafıza etki .

Android 10

Android 10, aşağıdaki önemli değişiklikleri içeren NN HAL 1.2'yi sunar.

  • Capabilities yapı skaler veri türleri de dahil tüm veri türlerini içerir ve adlandırılmış alanlar yerine bir vektör kullanılarak nonrelaxed performansını gösterir.
  • getVersionString ve getType yöntemleri çerçeve cihaz türü (almasına olanak tanıdığından DeviceType ) ve sürüm bilgisini. Bkz Aygıt Bulma ve Ataması .
  • executeSynchronously yöntem eş zamanlı olarak, bir yürütme yapmak için varsayılan olarak adlandırılır. execute_1_2 yöntemi senkronize bir yürütme yapmak için bir çerçeve gösterir. Bkz Yürütme .
  • MeasureTiming parametre executeSynchronously , execute_1_2 ve patlama yürütme belirlediği sürücü çalıştırma süresinin ölçülmesi için olup olmadığı. Sonuçlar raporlanır Timing yapısı. Bkz Zamanlaması .
  • Bir veya daha fazla çıktı işleneninin bilinmeyen bir boyuta veya dereceye sahip olduğu yürütmeler için destek. Bkz Çıktı şekli .
  • Satıcı tanımlı işlemler ve veri türleri koleksiyonları olan satıcı uzantıları için destek. Sürücü raporları üzerinden uzantıları desteklenen IDevice::getSupportedExtensions yöntemle. Bkz Satıcı Uzantıları .
  • Bir patlama nesnesinin, uygulama ve sürücü süreçleri arasında iletişim kurmak için hızlı mesaj kuyrukları (FMQ'lar) kullanarak bir dizi patlama yürütmesini kontrol ederek gecikmeyi azaltma yeteneği. Bkz Burst İnfazıyla ve Hızlı Mesaj Kuyrukları .
  • Sürücünün verileri kopyalamadan yürütme gerçekleştirmesine izin vermek için AHardwareBuffer desteği. Bkz AHardwareBuffer .
  • Bir uygulama başladığında derleme için kullanılan süreyi azaltmak için derleme yapılarının önbelleğe alınması için geliştirilmiş destek. Bkz Derleme önbellekleme .

Android 10, aşağıdaki işlenen türlerini ve işlemlerini tanıtır.

  • işlenen türleri

    • ANEURALNETWORKS_BOOL
    • ANEURALNETWORKS_FLOAT16
    • ANEURALNETWORKS_TENSOR_BOOL8
    • ANEURALNETWORKS_TENSOR_FLOAT16
    • ANEURALNETWORKS_TENSOR_QUANT16_ASYMM
    • ANEURALNETWORKS_TENSOR_QUANT16_SYMM
    • ANEURALNETWORKS_TENSOR_QUANT8_SYMM
    • ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL
  • Operasyonlar

    • ANEURALNETWORKS_ABS
    • ANEURALNETWORKS_ARGMAX
    • ANEURALNETWORKS_ARGMIN
    • ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM
    • ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM
    • ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN
    • ANEURALNETWORKS_BOX_WITH_NMS_LIMIT
    • ANEURALNETWORKS_CAST
    • ANEURALNETWORKS_CHANNEL_SHUFFLE
    • ANEURALNETWORKS_DETECTION_POSTPROCESSING
    • ANEURALNETWORKS_EQUAL
    • ANEURALNETWORKS_EXP
    • ANEURALNETWORKS_EXPAND_DIMS
    • ANEURALNETWORKS_GATHER
    • ANEURALNETWORKS_GENERATE_PROPOSALS
    • ANEURALNETWORKS_GREATER
    • ANEURALNETWORKS_GREATER_EQUAL
    • ANEURALNETWORKS_GROUPED_CONV_2D
    • ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT
    • ANEURALNETWORKS_INSTANCE_NORMALIZATION
    • ANEURALNETWORKS_LESS
    • ANEURALNETWORKS_LESS_EQUAL
    • ANEURALNETWORKS_LOG
    • ANEURALNETWORKS_LOGICAL_AND
    • ANEURALNETWORKS_LOGICAL_NOT
    • ANEURALNETWORKS_LOGICAL_OR
    • ANEURALNETWORKS_LOG_SOFTMAX
    • ANEURALNETWORKS_MAXIMUM
    • ANEURALNETWORKS_MINIMUM
    • ANEURALNETWORKS_NEG
    • ANEURALNETWORKS_NOT_EQUAL
    • ANEURALNETWORKS_PAD_V2
    • ANEURALNETWORKS_POW
    • ANEURALNETWORKS_PRELU
    • ANEURALNETWORKS_QUANTIZE
    • ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
    • ANEURALNETWORKS_RANDOM_MULTINOMIAL
    • ANEURALNETWORKS_REDUCE_ALL
    • ANEURALNETWORKS_REDUCE_ANY
    • ANEURALNETWORKS_REDUCE_MAX
    • ANEURALNETWORKS_REDUCE_MIN
    • ANEURALNETWORKS_REDUCE_PROD
    • ANEURALNETWORKS_REDUCE_SUM
    • ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR
    • ANEURALNETWORKS_ROI_ALIGN
    • ANEURALNETWORKS_ROI_POOLING
    • ANEURALNETWORKS_RSQRT
    • ANEURALNETWORKS_SELECT
    • ANEURALNETWORKS_SIN
    • ANEURALNETWORKS_SLICE
    • ANEURALNETWORKS_SPLIT
    • ANEURALNETWORKS_SQRT
    • ANEURALNETWORKS_TILE
    • ANEURALNETWORKS_TOPK_V2
    • ANEURALNETWORKS_TRANSPOSE_CONV_2D
    • ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM
    • ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN

Android 10, mevcut işlemlerin çoğuna güncellemeler getiriyor. Güncellemeler esas olarak aşağıdakilerle ilgilidir:

  • NCHW bellek düzeni desteği
  • Softmax ve normalizasyon işlemlerinde rankı 4'ten farklı olan tensörler için destek
  • Genişletilmiş kıvrımlar için destek
  • Karışık Nicemlemenin ile girişler için destek ANEURALNETWORKS_CONCATENATION

Gösterileri altında liste değişikliklerine dair tüm detaylar için Android 10. yılında değiştirilen işlemleri, bkz OperationCode NNAPI referans belgelerinde.

  • ANEURALNETWORKS_ADD
  • ANEURALNETWORKS_AVERAGE_POOL_2D
  • ANEURALNETWORKS_BATCH_TO_SPACE_ND
  • ANEURALNETWORKS_CONCATENATION
  • ANEURALNETWORKS_CONV_2D
  • ANEURALNETWORKS_DEPTHWISE_CONV_2D
  • ANEURALNETWORKS_DEPTH_TO_SPACE
  • ANEURALNETWORKS_DEQUANTIZE
  • ANEURALNETWORKS_DIV
  • ANEURALNETWORKS_FLOOR
  • ANEURALNETWORKS_FULLY_CONNECTED
  • ANEURALNETWORKS_L2_NORMALIZATION
  • ANEURALNETWORKS_L2_POOL_2D
  • ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION
  • ANEURALNETWORKS_LOGISTIC
  • ANEURALNETWORKS_LSH_PROJECTION
  • ANEURALNETWORKS_LSTM
  • ANEURALNETWORKS_MAX_POOL_2D
  • ANEURALNETWORKS_MEAN
  • ANEURALNETWORKS_MUL
  • ANEURALNETWORKS_PAD
  • ANEURALNETWORKS_RELU
  • ANEURALNETWORKS_RELU1
  • ANEURALNETWORKS_RELU6
  • ANEURALNETWORKS_RESHAPE
  • ANEURALNETWORKS_RESIZE_BILINEAR
  • ANEURALNETWORKS_RNN
  • ANEURALNETWORKS_ROI_ALIGN
  • ANEURALNETWORKS_SOFTMAX
  • ANEURALNETWORKS_SPACE_TO_BATCH_ND
  • ANEURALNETWORKS_SPACE_TO_DEPTH
  • ANEURALNETWORKS_SQUEEZE
  • ANEURALNETWORKS_STRIDED_SLICE
  • ANEURALNETWORKS_SUB
  • ANEURALNETWORKS_SVDF
  • ANEURALNETWORKS_TANH
  • ANEURALNETWORKS_TRANSPOSE

Android 9

NN HAL 1.1, Android 9'da tanıtıldı ve aşağıdaki önemli değişiklikleri içeriyor.

  • IDevice::prepareModel_1_1 bir içermektedir ExecutionPreference parametresi. Bir sürücü, uygulamanın pilden tasarruf etmeyi tercih ettiğini veya modeli hızlı ardışık aramalarda çalıştıracağını bilerek, hazırlığını ayarlamak için bunu kullanabilir.
  • Dokuz yeni operasyonlar eklenmiştir: BATCH_TO_SPACE_ND , DIV , MEAN , PAD , SPACE_TO_BATCH_ND , SQUEEZE , STRIDED_SLICE , SUB , TRANSPOSE .
  • Bir uygulama 32 bit şamandıra hesaplamaları ayarlayarak 16 bit şamandıra aralığını ve / veya hassas kullanılarak çalıştırılabilir belirtebilirsiniz Model.relaxComputationFloat32toFloat16 için true . Capabilities yapı ek alan vardır relaxedFloat32toFloat16Performance sürücü çerçevesine onun rahat performansını rapor böylece.

Android 8.1

İlk Sinir Ağları HAL (1.0), Android 8.1'de yayınlandı. Daha fazla bilgi için, bkz /neuralnetworks/1.0/ .