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.
Ş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ındanexecuteFenced
tarihine kadar geçen süre döndürülensyncFence
sinyalini sağlar.timingFenced
: Tüm senkronizasyon eşiklerinin ortadan kalktığı süreexecuteFenced
sinyali sunulduğunda, yürütmenin beklediği sinyalesyncFence
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'inLOG
etrafında oluşturulmuş bir sarmalayıcı makrosudur.debug.nn.vlog
içinde uygun etiket ayarlanmışsa, iletiyi günlüğe kaydederinitVLogMask()
VLOG
çağrılarından önce çağrılmalıdır.VLOG_IS_ON
makrosuVLOG
ü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
veyaall
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
vemodel
.
compliantWithV1_*
: NN HAL nesnesi dönüştürülebiliyorsatrue
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
üzerindecompliantWithV1_0
çağrısı yapıldığındafalse
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
veupdate
fonksiyonları kullanarakCapabilities::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çerliysetrue
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 durumdafalse
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:
platform/test/mlts/benchmark
(karşılaştırma uygulaması)platform/test/mlts/models
(modeller ve veri kümeleri)
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:
- 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. 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
veQUANTIZED_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
veWHILE
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
vegetType
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çlarTiming
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.
-
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
-
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
birExecutionPreference
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/
.