איכות השירות

החל מאנדרואיד 11, ה-NNAPI מציע איכות שירות טובה יותר (QoS) על ידי מתן אפשרות לאפליקציה לציין את סדרי העדיפויות היחסיים של הדגמים שלה, את משך הזמן המקסימלי הצפוי להכנה של דגם נתון, ואת משך הזמן המקסימלי הצפוי עבור ביצוע נתון שיש להשלים. יתר על כן, אנדרואיד 11 מציגה ערכי שגיאה נוספים של NNAPI המאפשרים לשירות לציין בצורה מדויקת יותר מה השתבש כאשר מתרחש כשל, כך שאפליקציית הלקוח תוכל להגיב ולהתאושש בצורה טובה יותר.

עדיפות

עבור אנדרואיד 11 ומעלה, דגמים מוכנים עם עדיפות ב-NN HAL 1.3. עדיפות זו היא ביחס לדגמים מוכנים אחרים בבעלות אותה אפליקציה. ביצועים בעדיפות גבוהה יותר יכולים להשתמש ביותר משאבי מחשוב מאשר ביצועים בעדיפות נמוכה יותר, ויכולות להקדים או להרעיב ביצועים עם עדיפות נמוכה יותר.

הקריאה NN HAL 1.3 הכוללת Priority כארגומנט מפורש היא IDevice::prepareModel_1_3 . שים לב ש- IDevice::prepareModelFromCache_1_3 כולל באופן מרומז Priority בארגומנטים של המטמון.

ישנן אסטרטגיות אפשריות רבות לתמיכה בסדרי עדיפויות בהתאם ליכולות הנהג והמאיץ. להלן מספר אסטרטגיות:

  • עבור נהגים שיש להם תמיכת עדיפות מובנית, הפיצו ישירות את שדה Priority למאיץ.
  • השתמש בתור עדיפות לכל אפליקציה כדי לתמוך בסדרי עדיפויות שונים עוד לפני שביצוע מגיע למאיץ.
  • השהה או בטל מודלים בעלי עדיפות נמוכה המופעלים כדי לשחרר את המאיץ לביצוע מודלים בעלי עדיפות גבוהה. עשה זאת על ידי הוספת נקודות ביקורת במודלים בעלי עדיפות נמוכה, שכאשר מגיעים אליהם, מבצעים שאילתות על דגל כדי לקבוע אם יש לעצור את הביצוע הנוכחי בטרם עת או על ידי חלוקת המודל לתת-מודלים ושאילתת הדגל בין ביצועי תת-מודל. שים לב שהשימוש בנקודות ביקורת או תת-דגמים בדגמים שהוכנו עם עדיפות יכול להכניס תקורה נוספת שאינה קיימת עבור דגמים ללא עדיפות בגרסאות נמוכות מ-NN HAL 1.3.

    • כדי לתמוך במניעה מוקדמת, שמרו על הקשר הביצוע כולל הפעולה או המשנה הבאה שיבוצעו וכל נתוני אופרנד ביניים רלוונטיים. השתמש בהקשר ביצוע זה כדי לחדש את הביצוע במועד מאוחר יותר.
    • אין צורך בתמיכה מלאה בהקדמה, ולכן אין צורך לשמר את הקשר הביצוע. מכיוון שביצועי מודל NNAPI הם דטרמיניסטיים, ניתן להפעיל מחדש מאפס במועד מאוחר יותר.

אנדרואיד מאפשרת לשירותים להבדיל בין אפליקציות שיחות שונות באמצעות שימוש ב-AID (Android UID). ל-HIDL יש מנגנונים מובנים לאחזור ה-UID של האפליקציה המתקשרת באמצעות השיטה ::android::hardware::IPCThreadState::getCallingUid . ניתן למצוא רשימה של מכשירי AID ב- libcutils/include/cutils/android_filesystem_config.h .

מועדים

החל מאנדרואיד 11, ניתן להפעיל את הכנת הדגמים וביצועו באמצעות ארגומנט מועד אחרון OptionalTimePoint . עבור נהגים שיכולים להעריך כמה זמן נמשכת משימה, מועד זה מאפשר לנהג לבטל את המשימה לפני שהיא מתחילה אם הנהג מעריך שלא ניתן להשלים את המשימה לפני המועד האחרון. באופן דומה, המועד האחרון מאפשר לנהג לבטל משימה מתמשכת שלהערכתו לא תושלם לפני המועד האחרון. ארגומנט המועד האחרון אינו מאלץ נהג לבטל משימה אם המשימה לא הושלמה עד למועד האחרון או אם המועד האחרון חלף. ניתן להשתמש בארגומנט המועד האחרון כדי לפנות משאבי מחשוב בתוך הנהג ולהחזיר את השליטה לאפליקציה מהר יותר ממה שניתן ללא המועד האחרון.

קריאות NN HAL 1.3 הכוללות מועדי זמן OptionalTimePoint כארגומנט הן:

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

כדי לראות יישום עזר של תכונת המועד האחרון עבור כל אחת מהשיטות לעיל, ראה את מנהל ההתקן לדוגמה של NNAPI ב- frameworks/ml/nn/driver/sample/SampleDriver.cpp .

קודי שגיאה

אנדרואיד 11 כולל ארבעה ערכי קוד שגיאה ב-NN HAL 1.3 כדי לשפר את דיווח השגיאות, המאפשר לנהגים לתקשר טוב יותר את מצבם ואפליקציות להתאושש בצורה חיננית יותר. אלו הם ערכי קוד השגיאה ב- ErrorStatus .

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

באנדרואיד 10 ומטה, מנהל ההתקן יכול להצביע על כשל רק באמצעות קוד השגיאה GENERAL_FAILURE . מ-Android 11, ניתן להשתמש בשני קודי השגיאה MISSED_DEADLINE כדי לציין שעומס העבודה הופסק בגלל שהמועד האחרון הושג או בגלל שהנהג חזה שעומס העבודה לא יסתיים עד המועד האחרון. ניתן להשתמש בשני קודי השגיאה RESOURCE_EXHAUSTED כדי לציין שהמשימה נכשלה בגלל מגבלת משאבים בתוך מנהל ההתקן, כגון למנהל ההתקן אין מספיק זיכרון לשיחה.

הגרסה TRANSIENT של שתי השגיאות מציינת שהבעיה היא זמנית, וששיחות עתידיות לאותה משימה עשויות להצליח לאחר עיכוב קצר. לדוגמה, יש להחזיר קוד שגיאה זה כאשר מנהל ההתקן עסוק בעבודה קודמת ארוכת שנים או עתירת משאבים, אך המשימה החדשה תושלם בהצלחה אם מנהל ההתקן לא היה עסוק בעבודה הקודמת. הגרסה PERSISTENT של שתי השגיאות מציינת ששיחות עתידיות לאותה משימה צפויות תמיד להיכשל. לדוגמה, יש להחזיר את קוד השגיאה הזה כאשר הנהג מעריך שהמשימה לא תושלם עד המועד אפילו בתנאים מושלמים, או שהמודל מטבעו גדול מדי וחורג ממשאבי הנהג.

מַתַן תוֹקֵף

פונקציונליות איכות השירות נבדקת במבחני NNAPI VTS ( VtsHalNeuralnetworksV1_3Target ). זה כולל קבוצה של בדיקות לאימות ( TestGenerated/ValidationTest#Test/ ) כדי להבטיח שהנהג דוחה סדרי עדיפויות לא חוקיים ומערכת בדיקות שנקראת DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) כדי להבטיח שהנהג מטפל במועדים נכון.