Hizmet kalitesi

Android 11'den başlayarak NNAPI, bir uygulamanın modellerinin göreceli önceliklerini, belirli bir modelin hazırlanması için beklenen maksimum süreyi ve modelin hazırlanması için beklenen maksimum süreyi belirtmesine izin vererek daha iyi hizmet kalitesi (QoS) sunar. Belirli bir infazın tamamlanması gerekiyor. Ayrıca Android 11, bir hizmetin bir hata oluştuğunda neyin yanlış gittiğini daha doğru bir şekilde belirtmesine olanak tanıyan ek NNAPI hata değerleri sunar, böylece istemci uygulaması daha iyi tepki verebilir ve durumu kurtarabilir.

Öncelik

Android 11 ve üzeri için modeller NN HAL 1.3 öncelikli olarak hazırlanmaktadır. Bu öncelik, aynı uygulamanın sahip olduğu diğer hazırlanmış modellere göredir. Yüksek öncelikli yürütmeler, düşük öncelikli yürütmelere göre daha fazla bilgi işlem kaynağı kullanabilir ve düşük öncelikli yürütmeleri engelleyebilir veya sonlandırabilir.

Açık bir bağımsız değişken olarak Priority içeren NN HAL 1.3 çağrısı IDevice::prepareModel_1_3 . IDevice::prepareModelFromCache_1_3 önbellek bağımsız değişkenlerinde örtülü olarak Priority içerdiğini unutmayın.

Sürücünün ve hızlandırıcının yeteneklerine bağlı olarak öncelikleri desteklemek için birçok olası strateji vardır. İşte birkaç strateji:

  • Yerleşik öncelik desteğine sahip sürücüler için Priority alanını doğrudan gaz pedalına iletin.
  • Bir yürütme hızlandırıcıya ulaşmadan önce bile farklı öncelikleri desteklemek için uygulama başına öncelik sırası kullanın.
  • Hızlandırıcıyı yüksek öncelikli modelleri yürütmek üzere serbest bırakmak için yürütülen düşük öncelikli modelleri duraklatın veya iptal edin. Bunu, düşük öncelikli modellere ulaşıldığında mevcut yürütmenin zamanından önce durdurulması gerekip gerekmediğini belirlemek için bir bayrak sorgulayan denetim noktaları ekleyerek veya modeli alt modellere bölerek ve alt model yürütmeleri arasındaki bayrağı sorgulayarak yapın. Öncelikli olarak hazırlanan modellerde denetim noktalarının veya alt modellerin kullanılmasının, NN HAL 1.3'ün altındaki sürümlerde önceliği olmayan modellerde mevcut olmayan ek yük getirebileceğini unutmayın.

    • Önceliği desteklemek için, yürütülecek bir sonraki işlem veya alt model ve ilgili tüm ara işlenen verileri dahil olmak üzere yürütme bağlamını koruyun. Yürütmeyi daha sonra sürdürmek için bu yürütme bağlamını kullanın.
    • Tam önleme desteği gerekli değildir, dolayısıyla yürütme bağlamının korunmasına gerek yoktur. NNAPI modeli yürütmeleri deterministik olduğundan, yürütmeler daha sonra sıfırdan yeniden başlatılabilir.

Android, hizmetlerin bir AID (Android UID) kullanımı yoluyla farklı arama uygulamaları arasında ayrım yapmasına olanak tanır. HIDL, çağıran uygulamanın UID'sini ::android::hardware::IPCThreadState::getCallingUid yöntemi aracılığıyla almak için yerleşik mekanizmalara sahiptir. AID'lerin bir listesi libcutils/include/cutils/android_filesystem_config.h dosyasında bulunabilir.

Son teslim tarihleri

Android 11'den itibaren model hazırlama ve yürütmeler OptionalTimePoint son tarih bağımsız değişkeniyle başlatılabilir. Bir görevin ne kadar süreceğini tahmin edebilen sürücüler için bu son tarih, sürücünün görevin son tarihten önce tamamlanamayacağını tahmin etmesi durumunda sürücünün görevi başlamadan önce iptal etmesine olanak tanır. Benzer şekilde son tarih, sürücünün son tarihten önce tamamlanmayacağını tahmin ettiği devam eden bir görevi iptal etmesine olanak tanır. Son tarih argümanı, görevin son tarihe kadar tamamlanmaması veya son tarihin geçmesi durumunda sürücüyü görevi iptal etmeye zorlamaz. Son tarih bağımsız değişkeni, sürücü içindeki bilgi işlem kaynaklarını serbest bırakmak ve son tarih olmadan mümkün olandan daha hızlı bir şekilde kontrolü uygulamaya geri döndürmek için kullanılabilir.

Bağımsız değişken olarak OptionalTimePoint son tarihlerini içeren NN HAL 1.3 çağrıları şunlardır:

  • IDevice::prepareModel_1_3
  • IDevice::prepareModelFromCache_1_3
  • IPreparedModel::execute_1_3
  • IPreparedModel::executeSynchronously_1_3
  • IPreparedModel::executeFenced

Yukarıdaki yöntemlerin her biri için son tarih özelliğinin referans uygulamasını görmek için, frameworks/ml/nn/driver/sample/SampleDriver.cpp adresindeki NNAPI örnek sürücüsüne bakın.

Hata kodları

Android 11, hata raporlamayı iyileştirmek için NN HAL 1.3'te dört hata kodu değeri içerir; böylece sürücülerin durumlarını daha iyi iletmesine ve uygulamaların daha sorunsuz bir şekilde iyileşmesine olanak tanır. Bunlar ErrorStatus hata kodu değerleridir.

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

Android 10 veya önceki sürümlerde, bir sürücü yalnızca GENERAL_FAILURE hata kodu aracılığıyla bir arızayı belirtebiliyordu. Android 11'den itibaren, iki MISSED_DEADLINE hata kodu, son tarihe ulaşıldığı için veya sürücünün iş yükünün son tarihe kadar tamamlanmayacağını tahmin etmesi nedeniyle iş yükünün iptal edildiğini belirtmek için kullanılabilir. İki RESOURCE_EXHAUSTED hata kodu, sürücünün çağrı için yeterli belleğe sahip olmaması gibi sürücü içindeki bir kaynak sınırlaması nedeniyle görevin başarısız olduğunu belirtmek için kullanılabilir.

Her iki hatanın da TRANSIENT sürümü, sorunun geçici olduğunu ve aynı göreve yapılacak gelecekteki çağrıların kısa bir gecikmeden sonra başarılı olabileceğini gösterir. Örneğin, sürücü daha önce uzun süren veya yoğun kaynak kullanan bir işle meşgul olduğunda bu hata kodu döndürülmelidir; ancak sürücü önceki işle meşgul değilse yeni görev başarıyla tamamlanacaktır. Her iki hatanın PERSISTENT sürümü, aynı göreve yapılacak gelecekteki çağrıların her zaman başarısız olmasının beklendiğini gösterir. Örneğin, sürücü, mükemmel koşullar altında bile görevin son teslim tarihine kadar tamamlanmayacağını tahmin ettiğinde veya model doğası gereği çok büyük olduğunda ve sürücünün kaynaklarını aştığında bu hata kodu döndürülmelidir.

Doğrulama

Hizmet işlevselliğinin kalitesi NNAPI VTS testlerinde ( VtsHalNeuralnetworksV1_3Target ) test edilir. Bu, sürücünün geçersiz öncelikleri reddetmesini sağlamak için doğrulamaya yönelik bir dizi testi ( TestGenerated/ValidationTest#Test/ ) ve sürücünün son teslim tarihlerini doğru şekilde işlediğinden emin olmak için DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) adı verilen bir dizi testi içerir.