Neural Networks API sürücüleri

Bu sayfada, Neural Networks API'sinin (NNAPI) nasıl uygulanacağına ilişkin genel bilgiler sunulmaktadır gerekir. Daha ayrıntılı bilgi için HAL tanımındaki belgelere bakın içindeki dosyaları hardware/interfaces/neuralnetworks. Örnek bir sürücü uygulaması frameworks/ml/nn/driver/sample.

Neural Networks API hakkında daha fazla bilgi için bkz. Nöral Networks API.

Sinir Ağları HAL'si

Sinir Ağları (NN) HAL'si, çeşitli cihazların soyutlanmasını tanımlar. örneğin grafik işlem birimleri (GPU'lar) ve dijital sinyal işlemciler (TTP'ler), (ör. telefon veya tablet) Bu durumun nedenleri cihazlar NN HAL'ye uygun olmalıdır. Arayüz, HAL tanım dosyalarında hardware/interfaces/neuralnetworks.

Çerçeve ile sürücü arasındaki arayüzün genel akışı gösteriliyor Şekil 1'de verilmiştir.

Sinir Ağları akışı

Şekil 1. Sinir Ağları akışı

Başlatma

Başlatma sırasında çerçeve, aşağıdakini kullanarak sürücüyü becerilerini sorgular: IDevice::getCapabilities_1_3. @1.3::Capabilities yapısı, tüm veri türlerini ve değeri, bir vektör kullanılarak esnek olmayan performansı temsil eder.

Hesaplamaların kullanılabilir cihazlara nasıl ayrılacağını belirlemek için çerçeve, enerjinin ne kadar hızlı ve ne kadar hızlı verimli bir şekilde yürütmesini sağlar. Bu bilgileri sağlamak için sürücü, yürütme işlevine dayalı olarak standartlaştırılmış performans rakamları sağlamalıdır. sayısı kadardır.

Sürücünün yanıt olarak döndürdüğü değerleri belirlemek için IDevice::getCapabilities_1_3, ölçmek için NNAPI karşılaştırma uygulamasını kullanın performansını da görebilirsiniz. MobileNet v1 ve v2, asr_float, ve 32 bit performansı ölçmek için tts_float model önerilir kayan nokta değerlerinin yanı sıra MobileNet v1 ve v2 sayısallaştırılmış modelleri de 8 bitlik nicelenmiş değerler için önerilir. Daha fazla bilgi için bkz. Android Makine Öğrenimi Test Paketi.

Android 9 ve önceki sürümlerde Capabilities yapısı, sürücü performansını içerir kayan nokta ve nicelleştirilmiş tensörlerle ilgili bilgiler içerir ve skaler veri türlerini ifade eder.

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

Çerçeve, ürün yeniden başlatmaları arasında bu bölümünü kullanabilirsiniz. Aksi halde, sürücünün kullanımında performans düşüşü veya yanlış davranış görülebilir.

Derleme

Çerçeve, bir uygulamasını indirin. Android 10'da uygulamalar ve cihaz bilgisini seçebileceği bir sonraki aşamaya geçebiliriz. Daha fazla bilgi için bkz. Cihaz Keşfi ve Atama.

Model derleme zamanında çerçeve, modeli her adaya gönderir arayarak IDevice::getSupportedOperations_1_3. Her sürücü, bir boole dizisi döndürerek hangi desteklenir. Sürücü, güncellemenin çeşitli nedenlerle belirli bir işlemi destekler. Örnek:

  • Sürücü, veri türünü desteklemiyor.
  • Sürücü yalnızca belirli giriş parametrelerine sahip işlemleri destekler. Örneğin, Örneğin, bir sürücü 3x3 ve 5x5'i destekleyebilir, ancak 7x7 evrişini desteklemez anlamına gelir.
  • Sürücünün, büyük boyutlu dosyaları işlemesini engelleyen bellek kısıtlamaları var grafikler veya girişler olabilir.

Derleme sırasında, modelin giriş, çıkış ve dahili işlenenleri şurada açıklandığı: OperandLifeTime bilinmeyen boyutları veya sıralaması olabilir. Daha fazla bilgi için bkz. Çıktı şekli.

Çerçeve, seçilen her sürücüye belirli bir aşamanın alt kümesini yürütmeye çağırarak modelinizi IDevice::prepareModel_1_3. Daha sonra her sürücü kendi alt kümesini derler. Örneğin bir sürücü, ağırlıkların yeniden sıralanmış bir kopyasını oluşturun. Çünkü birden fazla ve modelin derlemesi ile bu süreç arasında büyük hacimli cihaz belleği parçaları gibi kaynaklar, atanabilir.

Başarılı olursa sürücü bir @1.3::IPreparedModel döndürüyor herkese açık kullanıcı adı. Sürücü, veri alt kümesini hazırlarken bir hata kodu döndürürse bu çerçeve, modelin tamamını CPU üzerinde çalıştırır.

Sürücü, uygulama başlatıldığında derleme için harcanan süreyi azaltmak için derleme yapılarını da kullanabilir. Daha fazla bilgi için bkz. Derleme Önbelleğe alma.

Uygulama

Uygulama, çerçeveden bir isteği yürütmesini istediğinde çerçeve, şunu çağırır: "the" IPreparedModel::executeSynchronously_1_3 Varsayılan olarak, hazırlanan bir modelde eşzamanlı yürütme gerçekleştirmek için HAL yöntemi kullanılır. Bir istek, execute_1_3 yöntemini, executeFenced yöntemi (Özel yürütme bölümüne bakın), veya sunucu tarafından seri işlem yürütme.

Eşzamanlı yürütme çağrıları performansı artırır ve ileti dizisini azaltır daha fazla ek yük çıkarır. Bunun nedeni, işlemi yalnızca yürütme tamamlandıktan sonra yapılır. Bu, sürücüsünün, uygulama işlemine bildirisi bildirmek için ayrı bir mekanizmaya ihtiyacı yoktur. yürütmenin sağladığını varsayalım.

Eşzamansız execute_1_3 yöntemiyle kontrol, uygulama işlemi başladıktan sonra işleme başlar ve sürücünün çerçeveyi kullanarak ve çerçeve oluşturmak @1.3::IExecutionCallback

Yürütme yöntemine iletilen Request parametresi, giriş ve çıkışı listeler. işlenen sayısı. İşlem gören verileri depolayan bellek, en yavaş itilen ilk boyuta sahip satır-ana sıralamayı kullanın ve dolgu ekleyebilirsiniz. İşlem gören türleri hakkında daha fazla bilgi için bkz. İşlem görenler.

NN HAL 1.2 veya daha yeni sürücüler için, bir istek ve hata durumu, çıktı şekli ve zamanlama bilgileri döndürülür bilmek zorundasınız. Yürütme işlemi sırasında, modelin çıktısı veya dahili işlenenleri en az bir bilinmeyen boyuta veya bilinmeyen değere sahip olmalıdır. En az bir çıkış olduğunda işlenenin boyutu veya sıralaması bilinmiyorsa sürücünün döndürülmesi gerekir çıkış bilgileri dinamik olarak boyutlandırılmıştır.

NN HAL 1.1 veya daha düşük bir sürüme sahip sürücüler için, yalnızca bir tamamlandı. Giriş ve çıkış işlenenlerinin boyutları tam olarak olmalıdır başarıyla tamamlanması için belirtilir. Dahili işlenenler bir veya daha fazla bilinmeyen boyutu vardır, ancak bunların sıralaması belirtilmelidir.

Birden fazla sürücüye yayılan kullanıcı taleplerinde çerçeve, ara bellek ayırmaya ve çağrıları her bir sürücüye göre sıralamaya yarar.

Aynı ağ üzerinde paralel olarak birden çok istek başlatılabilir @1.3::IPreparedModel. Sürücü, istekleri paralel olarak yürütebilir veya yürütmeleri serileştirebilir.

Çerçeve, sürücüden birden fazla hazır model tutmasını isteyebilir. Örneğin, örnek, m1 modelini hazırlama, m2 hazırlama, m1 üzerinde r1 isteğini yürütme, yürütme m2 tarihinde r2, m1 tarihinde r3 yürütme, m2 üzerinde r4 yürütme, sürüm yayınlama (şurada açıklanmıştır: Temizlik) m1 ve m2 sürümünü yayınlayın.

Kötü kullanıcı deneyimine neden olabilecek yavaş bir ilk yürütmeden kaçınmak için (örneğin, Örneğin, ilk kare takılması) sürücünün çoğu başlatma işlemini yapması gerekir. ve derleme aşamasındayız. İlk yürütmede başlatma işlemi ile sınırlı olmalıdır. erken aşamada sistem sağlığını olumsuz etkileyen işlemler (ör. büyük geçici arabellekler rezerve etmek veya cihazın saat hızını artırmak. Yalnızca sınırlı sayıda eşzamanlı model hazırlayabilen sürücüler ilk çalıştırma sırasında bunu gerçekleştirmeleri gerekir.

Android 10 veya sonraki sürümlerde, birden fazla yürütme ve yürütme işlemleri hızlı bir şekilde başarılı bir şekilde yürütülürse, istemci uygulama ile sürücü işlemleri arasında iletişim kurmak için seri işlem Daha fazla bkz. Seri Yürütme İşlemleri ve Hızlı Mesaj Sıraları.

Sürücü, arka arkaya birden fazla yürütmenin performansını artırmak için zaman alabilir veya saat hızlarını artırabilir. Güvenlik zamanlayıcısı oluşturma Şundan sonra yeni istek oluşturulmazsa kaynakları serbest bırakmak için iş parçacığı önerilir: sabit bir süredir.

Çıktı şekli

Bir veya daha fazla çıkış işleneninin tüm boyutlara sahip olmadığı istekler için belirtildiğinde, sürücünün tablodaki boyut bilgilerini girin. Daha fazla için bkz. OutputShape.

Yürütme işlemi, çıkış arabelleğinin küçük olması nedeniyle başarısız olursa sürücünün listesinde hangi çıkış işlenenlerinin yeterli tampon boyutuna sahip olmadığını ve mümkün olduğunca çok boyutla ilgili bilgi sunmalı, bilinmeyen boyutlar için sıfır kullanabilirsiniz.

Zamanlama

Android 10'da bir uygulama, zaman , derleme işlemi sırasında kullanılacak tek bir cihaz belirtti. Örneğin, için bkz. MeasureTiming ve Cihaz Keşfi ve Atama. Böyle bir durumda, NN HAL 1.2 sürücüsü, yürütme süresini ölçmeli veya UINT64_MAX ( sürenin kullanılamadığını belirtir). Sürücü yürütmenin ölçülmesinden kaynaklanan performans cezalarını en aza indirmelidir. süresidir.

Sürücü, Timing yapı:

  • Cihazda yürütme süresi: ana makine işlemcisinde çalışan sürücüye ait olur.
  • Sürücüdeki yürütme süresi: Cihazdaki yürütme süresini içerir.

Bu süreler, yürütmenin askıya alındığı zamanı içermelidir. başka görevler tarafından geçici olarak durdurulduğunda veya bir kaynağın hazır olmasını beklersiniz.

Sürücüden yürütme süresini ölçmesi istenmediğinde veya bir yürütme hatası varsa sürücü, süreleri UINT64_MAX Sürücüden yürütmeyi ölçmesi istendiğinde bile cihazdaki süre için UINT64_MAX değerini raporlayabilir. ya da her ikisi birden olabilir. Sürücü her iki süreyi de UINT64_MAX, sürücüdeki yürütme süresi, belirtilen süreye eşit veya bundan fazla olmalıdır için geçerlidir.

Özel yürütme

Android 11'de NNAPI, yürütmelerin sync_fence işleyicilerin listesini oluşturur ve isteğe bağlı olarak sync_fence nesnesini döndürür. yürütme tamamlandığında sinyal verilir. Bu şekilde küçük boyutlu cihazlar için akışla ilgili kullanım alanlarına bakacağız. Sınırları olan uygulama ayrıca, sinyal gönderebilen veya bekleyebilen diğer bileşenlerle verimli birlikte çalışabilirlik sync_fence sync_fence hakkında daha fazla bilgi için bkz. Senkronizasyon çerçevesi.

Sınırlandırılmış bir yürütmede çerçeve, IPreparedModel::executeFenced özel, eşzamansız bir yürütmeye başlamak için kullanılan yöntemde senkronize kareleri girin. Eşzamansız görev çağrı geri dönerse sync_fence için boş bir herkese açık kullanıcı adı döndürülebilir. Çerçeveye izin vermek için IFencedExecutionCallback nesnesinin de döndürülmesi gerekir hata durumu ve süre bilgilerini sorgulamak için kullanılır.

Bir yürütme tamamlandıktan sonra zamanlama değerleri ne kadar zaman alacağını ölçmek için IFencedExecutionCallback::getExecutionInfo.

  • timingLaunched: executeFenced adlı çağrının çağrılmasından executeFenced tarihine kadar geçen süre döndürülen syncFence sinyalini sağlar.
  • timingFenced: Tüm senkronizasyon eşiklerinin ortadan kalktığı süre executeFenced sinyali sunulduğunda, yürütmenin beklediği sinyale syncFence döndürüldü.

Akışı kontrol etme

Android 11 veya sonraki sürümleri çalıştıran cihazlar için NNAPI başka modelleri alan IF ve WHILE olmak üzere iki kontrol akışı işlemi içerir bağımsız değişken olarak kullanabilir ve bunları koşullu olarak (IF) veya tekrar tekrar (WHILE) yürütebilirsiniz. Örneğin, Bunun nasıl uygulanacağına ilişkin daha fazla bilgi için Akışı denetleyin.

Hizmet kalitesi

Android 11'de NNAPI, yüksek kaliteli hizmetinin (QoS) temel aldığı, bir uygulamanın, kullandığı özelliklerin göreceli önceliklerini belirtmesine modelin hazırlanması için gereken maksimum süre ve bir yürütmenin tamamlanması için beklenen maksimum süredir. Örneğin, daha fazla bilgi için Hizmet Kalitesi.

Temizle

Hazırlanan model kullanılarak oluşturulan bir uygulama tamamlandığında çerçeve, ve @1.3::IPreparedModel nesnesini tanımlayın. IPreparedModel nesnesine artık başvuruda bulunulmadığında bu nesne dosyayı oluşturan sürücü hizmetinde otomatik olarak kaldırılır. Modele özel şu anda sürücünün kullandığı veri kaynağında yıkıcıdır. Sürücü hizmeti, IPreparedModel nesnesinin müşteri tarafından artık ihtiyaç duyulmadığında otomatik olarak imha edilir. IPreparedeModel nesnesinden sonraki IPreparedModel nesnesine yapılan tüm referanslar üzerinden iade edildi 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 kullanın çünkü bu, tahsis etme kabiliyetine katkıda bulunur. Sürücü, ve çerçevenin bu işleri yürütmesine izin verir. mola vermektir.

Çerçeve, aşağıdakiler hariç tüm NNAPI işlemleri için bir CPU uygulaması sağlar: işlemleri de içerir. Daha fazla bilgi için bkz. Tedarikçi Firma Uzantıları.

İlgili içeriği oluşturmak için kullanılan Android 10'da kullanıma sunulan işlemler (API düzeyi 29) yalnızca CTS ve VTS testlerinin doğrulandığını doğrulamak için bir referans CPU uygulaması vardır doğru. Mobil makine öğrenimine dahil edilen optimize edilmiş uygulamalar çerçeveleri, NNAPI CPU uygulaması yerine tercih edilir.

Yardımcı işlevler

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

İlgili içeriği oluşturmak için kullanılan frameworks/ml/nn/common/include/Utils.h dosyası, günlük kaydı ve dosya paylaşım için kullanılanlar gibi çeşitli yardımcı program dönüşüm modellemesini kullanın.

  • VLogging: VLOG, yalnızca Android'in LOG etrafında oluşturulmuş bir sarmalayıcı makrosudur. debug.nn.vlog içinde uygun etiket ayarlanmışsa, iletiyi günlüğe kaydeder initVLogMask() VLOG çağrılarından önce çağrılmalıdır. VLOG_IS_ON makrosu VLOG ürününün şu anda etkin olup olmadığını kontrol etmek için kullanılır ve karmaşık günlük kaydı sağlar. kod kullanılmaması durumunda atlanır. Özelliğin değeri olmalıdır şunlardan biri:

    • Hiçbir günlük kaydı yapılmayacağını belirten boş bir dize.
    • Tüm günlük kayıtlarının gerçekleştirileceğini belirten 1 veya all jetonu.
    • Boşluk, virgül veya iki nokta ile ayrılmış bir etiket listesi. Bu, hangi günlük kaydının yapılacağını gösterir. Etiketler compilation, cpuexe, driver, execution, manager ve model.
  • compliantWithV1_*: NN HAL nesnesi dönüştürülebiliyorsa true değerini döndürür aynı tür farklı bir HAL sürümüne bağlayabilirsiniz. Örneğin, Örneğin, V1_2::Model üzerinde compliantWithV1_0 çağrısı yapıldığında false değeri döndürülür Model, NN HAL 1.1 veya NN HAL 1.2'de kullanıma sunulan işlem türlerini içermektedir.

  • convertToV1_*: Bir NN HAL nesnesini bir sürümden diğerine dönüştürür. Dönüşüm, bilgi kaybına neden olursa (bir başka deyişle, değeri tam olarak temsil edemiyorsa değeri değiştirin).

  • Özellikler: nonExtensionOperandPerformance ve update fonksiyonları kullanarak Capabilities::operandPerformance girin.

  • Şu türlerin sorgu özellikleri: isExtensionOperandType, isExtensionOperationType nonExtensionSizeOfData, nonExtensionOperandSizeOfData, nonExtensionOperandTypeIsScalar, tensorHasUnspecifiedDimensions.

İlgili içeriği oluşturmak için kullanılan frameworks/ml/nn/common/include/ValidateHal.h dosyası, bir NN HAL nesnesinin geçerli olduğunu doğrulamak için yardımcı program işlevleri içeriyor ve HAL sürümünün teknik özelliklerine göre.

  • validate*: NN HAL nesnesi geçerliyse true değerini döndürür ve HAL sürümünün teknik özelliklerine göre. OEM türleri ve uzantı türleri bunlar doğrulanmaz. Örneğin, validateModel, şu durumda false değerini döndürür: model, veya söz konusu HAL sürümünde desteklenmeyen bir işlem olabilir.

İlgili içeriği oluşturmak için kullanılan frameworks/ml/nn/common/include/Tracing.h dosyası, eklemeyi kolaylaştırmak için makrolar içeriyor Bilgileri Nöral Ağlar koduna eklenmesi. Örneğin, NNTRACE_* örnek sürücü.

İlgili içeriği oluşturmak için kullanılan frameworks/ml/nn/common/include/GraphDump.h dosyası, Model içeriğinin grafik biçiminde dökümünü almak için kullanılan bir yardımcı program formunu doldurun.

  • graphDump: Graphviz'de modelin bir temsilini yazar (.dot) biçimini belirtilen akışa (sağlanmışsa) veya logcat'e (varsa) akış sağlanmaz).

Doğrulama

NNAPI uygulamanızı test etmek için, şu kılavuzdaki VTS ve CTS testlerini kullanın: ortaya koyduk. VTS, sürücülerinizi doğrudan ( çerçevesidir), CTS ise bunları çerçeveyle dolaylı olarak uygular. Bu her API yöntemini test edip Google Etiket Yöneticisi'nin desteklediği tüm doğru şekilde çalışıyor ve kesinlik gereksinimlerini karşılayan sonuçlar veriyor.

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

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

    • fp32 için atol = 1e-5f, rtol = 5,0f * 1,1920928955078125e-7
    • fp16 için atol = rtol = 5.0f * 0,0009765625f
  • Nitelikli: tek tek (mobilenet_quantized, Bu, üçte üç devre dışıdır)

  • Boole: tam eşleme

CTS'nin NNAPI'yi test etme yollarından biri, sabit sahte rastgele grafikler oluşturmaktır her sürücüden elde edilen yürütme sonuçlarını test etmek ve NNAPI referansı uygulaması. NN HAL 1.2 veya daha yeni sürüme sahip sürücüler için arama sonuçları kesinlik ölçütlerini karşılamadığında, CTS bir hata bildirir ve hata ayıklama için /data/local/tmp altındaki başarısız modelin spesifikasyon dosyası. Hassasiyet ölçütleriyle ilgili daha fazla ayrıntı için TestRandomGraph.cpp ve TestHarness.h.

Fuzz testi

Fuz testinin amacı kilitlenmeleri, onaylamaları, bellek ihlallerini ve veya aşağıda açıklanan faktörler nedeniyle test edilen kodda, olabilir. Android, NNAPI fuzz testi için libFuzzer önceki test durumlarının çizgi kapsamını kullanarak kaymalarda daha etkili yeni rastgele girişler oluşturabilirsiniz. Örneğin, libFuzzer yeni kod satırlarında kullanabilirsiniz. Bu sayede testler, tahminini bulmak için gereken süreyi sorunlu bir kod yazmaktır.

Sürücü uygulamanızı doğrulamak üzere fuzz testi yapmak için frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp AOSP'de bulunan libneuralnetworks_driver_fuzzer test yardımcı programında ve sürücü kodunuzdur. NNAPI fuzz testi hakkında daha fazla bilgi için bkz. frameworks/ml/nn/runtime/test/android_fuzzing/README.md.

Güvenlik

Uygulama işlemleri doğrudan sürücünün işlemiyle iletişim kurduğu için Sürücüler aldıkları çağrıların bağımsız değişkenlerini doğrulamalıdır. Bu doğrulama VTS tarafından doğrulanır. Doğrulama kodu şurada: frameworks/ml/nn/common/include/ValidateHal.h.

Sürücüler, uygulamaların diğer güvenli uygulamalardır.

Android Makine Öğrenimi Test Paketi

Android Makine Öğrenimi Test Paketi (MLTS), Tedarikçi firma cihazlarındaki gerçek modellerin doğruluğunu doğrulamak için CTS ve VTS. İlgili içeriği oluşturmak için kullanılan Karşılaştırma kriteri gecikme ve doğruluğu değerlendirir ve sürücülerin şununla sonuç: sonuçları CPU'da çalışan TF Lite, aynı model ve veri kümeleri için geçerli değildir. Bu, sürücünün doğruluğunun daha kötü sonuçlar verir.

Android platformu geliştiricileri, gecikme ve doğruluğu değerlendirmek için de MLTS'yi kullanır. şoför sayısı.

NNAPI karşılaştırması, 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 ölçülmüş MobileNetV1 float ve u8, Open Images Veri Kümesi v4'ün küçük alt kümesi (1.500 resim).
  • Farklı boyutlarda ölçülmüş MobileNetV2 float ve u8, Open Images Veri Kümesi v4'ün küçük alt kümesi (1.500 resim).
  • Metin okuma için uzun süreli belleğe (LSTM) dayalı akustik model, CMU Kutup kümesinin küçük bir alt grubuna karşılaştırmaktır.
  • Otomatik konuşma tanıma için LSTM tabanlı akustik model küçük bir alt kümesi olan LibriSpeech veri kümesidir.

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

Stres testi

Android Makine Öğrenimi Test Paketi, Ağır kullanım koşullarında veya yolda sürücülerin direncini doğrulayın iş gerekçesi ve proje başlatma belgesi gösterir.

Tüm kilitlenme testleri aşağıdaki özellikleri sağlar:

  • Kilitlenme algılama: NNAPI istemcisi test sırasında kilitlenirse test, HANG hata nedeni ve test paketi nedeniyle başarısız oluyor sonraki teste geçer.
  • NNAPI istemci kilitlenmesi algılama: Testler, istemci kilitlenmelerinden ve testlerden kurtulmaya çalışır CRASH hata nedeniyle başarısız oldu.
  • Sürücü kazası algılama: Testler, sürücü kazasını algılayabilir NNAPI çağrısında hataya neden olur. Şu konumlarda kilitlenmeler olabileceğini unutmayın: NNAPI hatasına neden olmayan ve teste neden olmayan sürücü işlemleri neden olabilir. Bu tür hataları gidermek için tail komutunu çalıştırmanız önerilir komutunu çalıştırın.
  • Kullanılabilir tüm hızlandırıcıların hedeflenmesi: Testler, tüm hızlandırıcılara karşı çalıştırılır. kontrol edebilirsiniz.

Tüm kilitlenme testlerinin aşağıdaki dört olası sonucu vardır:

  • SUCCESS: Yürütme, hata olmadan tamamlandı.
  • FAILURE: Yürütme başarısız oldu. Genellikle sürücünün derleyemediğini veya yürütülemediğini gösteren bir modeli test etme bahsedeceğim.
  • HANG: Test işlemi yanıt vermemeye başladı.
  • CRASH: Test işlemi kilitlendi.

Stres testi hakkında daha fazla bilgi ve kilitlenme testlerinin tam listesi için bkz. platform/test/mlts/benchmark/README.txt.

MLTS'yi kullan

MLTS'yi kullanmak için:

  1. Hedef cihazı iş istasyonunuza bağlayın ve şunun şundan emin olun: ile erişilebilen adb olarak değiştirin. ANDROID_SERIAL adlı hedef cihazı dışa aktarın ortam değişkeninin değeridir.
  2. cd öğesini Android'in üst düzey kaynak dizinine ekleyin.

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

    Karşılaştırma çalışmasının sonunda sonuçlar bir HTML sayfası olarak sunulur ve xdg-open alanına iletildi.

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

Neural Networks HAL sürümleri

Bu bölümde, Android ve Nöral cihazlarda kullanıma sunulan değişiklikler açıklanmaktadır Ağların HAL sürümleri.

Android 11

Android 11'de şu özelliklere sahip NN HAL 1.3 kullanıma sunuluyor: aşağıdaki önemli değişiklikleri yaptık.

  • NNAPI'de imzalı 8 bit ölçüm desteği. Şunu ekler: TENSOR_QUANT8_ASYMM_SIGNED işlenen türü. NN HAL 1.3'ü destekleyen sürücüler İmzalanmamış miktarlandırma içeren işlemler, imzalı varyantları da desteklemelidir anlamına gelir. Çoğunun imzalı ve imzasız sürümlerini çalıştırırken sağlamak için, sürücüler belirli bir teste kadar uzaklık 128 olsun. Bu şartın beş istisnası vardır: CAST, HASHTABLE_LOOKUP, LSH_PROJECTION, PAD_V2 ve QUANTIZED_16BIT_LSTM. QUANTIZED_16BIT_LSTM işlemi, imzalı işlenenleri desteklemez ve diğer dört işlem imzalı miktar hesaplamayı destekler ancak aynı olmasını sağlar.
  • Çerçevenin IPreparedModel::executeFenced özel, eşzamansız bir yürütmeye başlamak için kullanılan yöntemde senkronize kareleri girin. Daha fazla bilgi için bkz. Özel yürütme.
  • Kontrol akışı desteği. Aşağıdaki işlemler için gereken IF ve WHILE işlemlerini ekler diğer modelleri bağımsız değişken olarak kullanıp bunları koşullu olarak yürütür (IF) veya tekrar tekrar (WHILE). Daha fazla bilgi için bkz. Akışı denetleyin.
  • Uygulamalar göreceli değeri gösterebildiğinden hizmet kalitesinde (HK) zaman çizelgesine tam olarak odaklanmasına yardımcı olur, hazırlıklı olması gerekir ve bir uygulama için beklenen maksimum süre tamamlanması gereken bir görevdir. Daha fazla bilgi için bkz. Hizmet Kalitesi.
  • Şunlar için ayırıcı arayüzler sağlayan bellek alanları desteği: tamponları devreye sokmaktır. Bu, cihazdaki yerel belleklerin iletilmesine olanak tanır. Böylece, gereksiz veri kopyalama ve dönüştürmeyi ortadan kaldırarak yürütme işlemleri arasında geçiş yapabilirsiniz. aynı sürücüde gerçekleştirilen yürütmeler arasında geçiş yapar. Daha fazla bilgi için Bellek alanları başlıklı makaleyi inceleyin.

Android 10

Android 10, aşağıdaki özelliklere sahip NN HAL 1.2'yi kullanıma sunuyor: aşağıdaki önemli değişiklikleri yaptık.

  • Capabilities struct, skaler dahil tüm veri türlerini içerir ve gevşetilmemiş performansı göstermek yerine bir vektör kullanarak daha yüksek olabilir.
  • getVersionString ve getType yöntemleri, çerçevenin şunları yapmasını sağlar: cihaz türünü (DeviceType) ve sürüm bilgilerini al. Görüntüleyin Cihaz Keşfi ve Atama.
  • executeSynchronously yöntemi, senkronize edebilirsiniz. execute_1_2 yöntemi, çerçeveye eşzamansız olarak yürütme Yürütme bölümünü inceleyin.
  • executeSynchronously, execute_1_2, MeasureTiming parametresi ve seri işlem, sürücünün uygulamadaki çalışmayı ölçüp ölçmeyeceğini belirler. süresidir. Sonuçlar Timing yapısında raporlanır. Görüntüleyin Zamanlama.
  • Bir veya daha fazla çıkış işleneninin bilinmeyen olduğu yürütmeler için destek kullanabilirsiniz. Çıktı şekli başlıklı makaleyi inceleyin.
  • Tedarikçi firma tarafından tanımlanan koleksiyonlar olan tedarikçi firma uzantıları için destek işlemleri ve veri türlerini kapsar. Sürücü, desteklenen uzantıları IDevice::getSupportedExtensions yöntemi. Görüntüleyin Tedarikçi Firma Uzantıları.
  • Seri çekim nesnenin bir dizi seri işlem yürütmeyi kontrol edebilmesi uygulama ve sürücü arasında iletişim kurmak için hızlı mesaj sıraları (FMQ'lar) gecikmeyi azaltır. Görüntüleyin Seri Yürütme İşlemleri ve Hızlı Mesaj Sıraları.
  • Sürücünün yürütme işlemleri gerçekleştirebilmesi için ADonanımBuffer desteği gerek yok. Görüntüleyin ADonanımBuffer.
  • Süreyi kısaltmak için derleme yapılarının önbelleğe alınmasıyla ilgili iyileştirilmiş destek uygulama başladığında derleme için kullanılır. Görüntüleyin Derlemeyi Önbelleğe Alma.

Android 10'da aşağıdaki işlem gören türleri ve anlamına gelir.

  • İşlenen türler

    • 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
  • İşlemler

    • 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 pek çok anlamına gelir. Güncellemeler genel olarak şunlarla ilgilidir:

  • NCHW bellek düzeni desteği
  • softmax ve softmax'ta sıralaması 4'ten farklı olan tensörler için destek normalleştirme işlemleri
  • Uzatılmış kıvrımlar için destek
  • ANEURALNETWORKS_CONCATENATION.

Aşağıdaki liste, şunun içinde değiştirilen işlemler gösterir: Android 10. Tam fiyat için daha fazla bilgi edinmek için İşlem Kodu daha fazla bilgi edinip başvurabilirsiniz.

  • 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

Android 9'da kullanıma sunulan NN HAL 1.1, şunları içerir: anlamına gelir.

  • IDevice::prepareModel_1_1 bir ExecutionPreference içeriyor parametresinden sonra bir değer girin. Sürücü, bunun için hazırlıkta ayarlamalar yapabilir. Bunun için Uygulama pil tasarrufu yapmayı tercih ediyor veya modeli çalıştıracak hızlı aramalar yapabilirsiniz.
  • Dokuz yeni işlem eklendi: BATCH_TO_SPACE_ND, DIV, MEAN, PAD, SPACE_TO_BATCH_ND, SQUEEZE, STRIDED_SLICE, SUB, TRANSPOSE.
  • Uygulama, 32 bit kayan hesaplamaların çalıştırılabileceğini belirtebilir 16 bitlik kayan nokta aralığı ve/veya Model.relaxComputationFloat32toFloat16 - true. Capabilities struct, relaxedFloat32toFloat16Performance ek alanına sahiptir. rahatlatıcı performansını çerçeveye raporlayabilir.

Android 8.1

İlk Nöral Ağ HAL'si (1.0) Android 8.1'de kullanıma sunulmuştur. Daha fazla bkz. /neuralnetworks/1.0/.