שירות האצה לאנדרואיד (ביטא)

השימוש במעבדים מיוחדים כגון GPUs, NPUs או DSPs להאצת חומרה יכול לשפר באופן דרמטי את ביצועי ההסקות (עד פי 10 יותר הסקה מהירה במקרים מסוימים) ואת חווית המשתמש של אפליקציית Android המותאמת ל-ML. עם זאת, בהתחשב במגוון החומרה והמנהלי התקנים שיכולים להיות למשתמשים שלך, בחירת תצורת האצת החומרה האופטימלית עבור כל מכשיר של משתמש יכולה להיות מאתגרת. יתר על כן, הפעלת תצורה שגויה במכשיר עלולה ליצור חווית משתמש גרועה עקב זמן אחזור גבוה או, במקרים נדירים מסוימים, שגיאות בזמן ריצה או בעיות דיוק הנגרמות כתוצאה מאי תאימות חומרה.

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

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

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

תמונה

שירות האצה הוא חלק מחסנית ה-ML המותאמת של אנדרואיד ועובד עם TensorFlow Lite בשירותי Google Play .

הוסף את התלות לפרויקט שלך

הוסף את התלות הבאות לקובץ build.gradle של היישום שלך:

implementation  "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"

ה-Acceleration Service API עובד עם TensorFlow Lite בשירותי Google Play . אם אינך משתמש עדיין בזמן הריצה של TensorFlow Lite המסופק דרך שירותי Play, תצטרך לעדכן את התלות שלך .

כיצד להשתמש ב-Acceleration Service API

כדי להשתמש בשירות האצה, התחל ביצירת תצורת ההאצה שברצונך להעריך עבור המודל שלך (למשל GPU עם OpenGL). לאחר מכן צור תצורת אימות עם המודל שלך, כמה נתונים לדוגמה ופלט המודל הצפוי. לבסוף קרא validateConfig() תוך העברת תצורת ההאצה שלך ותצורת האימות.

תמונה

צור תצורות האצה

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

כרגע שירות ההאצה מאפשר לך להעריך תצורות GPU (הומרה ל-GPU Delegate במהלך זמן הביצוע) עם GpuAccelerationConfig והסקת CPU (עם CpuAccelerationConfig ). אנו עובדים על תמיכה בנציגים נוספים כדי לגשת לחומרה אחרת בעתיד.

תצורת האצת GPU

צור תצורת האצת GPU באופן הבא:

AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
  .setEnableQuantizedInference(false)
  .build();

עליך לציין אם המודל שלך משתמש בכימות עם setEnableQuantizedInference() .

תצורת האצת מעבד

צור את האצת המעבד באופן הבא:

AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
  .setNumThreads(2)
  .build();

השתמש בשיטת setNumThreads() כדי להגדיר את מספר השרשורים שבהם ברצונך להשתמש כדי להעריך מסקנות CPU.

צור תצורות אימות

תצורות אימות מאפשרות לך להגדיר כיצד אתה רוצה ששירות ההאצה יעריך מסקנות. אתה תשתמש בהם כדי להעביר:

  • דוגמאות קלט,
  • תפוקות צפויות,
  • לוגיקה של אימות דיוק.

הקפד לספק דוגמאות קלט שעבורן אתה מצפה לביצועים טובים של הדגם שלך (הידוע גם בשם דוגמאות "זהובות").

צור ValidationConfig עם CustomValidationConfig.Builder כדלקמן:

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenOutputs(outputBuffer)
   .setAccuracyValidator(new MyCustomAccuracyValidator())
   .build();

ציין את מספר דגימות הזהב באמצעות setBatchSize() . העבר את הקלט של דגימות הזהב שלך באמצעות setGoldenInputs() . ספק את הפלט הצפוי עבור הקלט שהועבר באמצעות setGoldenOutputs() .

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

לחלופין, תוכל גם ליצור AccuracyValidator מותאם אישית באופן הבא:

class MyCustomAccuracyValidator implements AccuracyValidator {
   boolean validate(
      BenchmarkResult benchmarkResult,
      ByteBuffer[] goldenOutput) {
        for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
            if (!goldenOutputs[i]
               .equals(benchmarkResult.actualOutput().get(i).getValue())) {
               return false;
            }
         }
         return true;

   }
}

הקפד להגדיר לוגיקת אימות שעובדת עבור מקרה השימוש שלך.

שים לב שאם נתוני האימות כבר מוטמעים במודל שלך, אתה יכול להשתמש EmbeddedValidationConfig .

צור פלטי אימות

יציאות הזהב הן אופציונליות וכל עוד אתה מספק תשומות מוזהבות, שירות ההאצה יכול ליצור באופן פנימי את יציאות הזהב. אתה יכול גם להגדיר את תצורת האצה המשמשת ליצירת פלטי הזהב האלה על ידי קריאה setGoldenConfig() :

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenConfig(customCpuAccelerationConfig)
   [...]
   .build();

אמת את תצורת האצה

לאחר שיצרת תצורת האצה ותצורת אימות תוכל להעריך אותם עבור המודל שלך.

ודא שזמן הריצה של TensorFlow Lite with Play Services מאותחל כהלכה ושנציג ה-GPU זמין עבור המכשיר על ידי הפעלת:

TfLiteGpu.isGpuDelegateAvailable(context)
   .onSuccessTask(gpuAvailable -> TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(gpuAvailable)
        .build()
      )
   );

הפעל את ה- AccelerationService על ידי קריאה ל- AccelerationService.create() .

לאחר מכן תוכל לאמת את תצורת ההאצה שלך עבור המודל שלך על ידי קריאה validateConfig() :

InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
   .validateConfig(model, accelerationConfig, validationConfig)
   .addOnSuccessListener(validatedConfig -> {
      if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
         interpreterOptions.setAccelerationConfig(validatedConfig);
         interpreter = InterpreterApi.create(model, interpreterOptions);
});

אתה יכול גם לאמת תצורות מרובות על ידי קריאה ל- validateConfigs() והעברת אובייקט Iterable<AccelerationConfig> כפרמטר.

validateConfig() יחזיר Task< ValidatedAccelerationConfigResult > מ-Google Play Services Task API המאפשר משימות אסינכרוניות.
כדי לקבל את התוצאה מקריאת האימות, הוסף התקשרות חוזרת של addOnSuccessListener() .

השתמש בתצורה מאומתת במתורגמן שלך

לאחר בדיקה אם ValidatedAccelerationConfigResult שהוחזר בהתקשרות חזרה חוקית, אתה יכול להגדיר את התצורה המאומתת כתצורת האצה עבור המתורגמן שלך שקורא ל- interpreterOptions.setAccelerationConfig() .

שמירה במטמון של תצורה

סביר להניח שתצורת האצה האופטימלית עבור הדגם שלך תשתנה במכשיר. אז ברגע שתקבל תצורת האצה מספקת, עליך לאחסן אותה במכשיר ולתת לאפליקציה שלך לאחזר אותה ולהשתמש בה כדי ליצור את InterpreterOptions שלך במהלך הפגישות הבאות במקום להפעיל אימות נוסף. השיטות serialize() ו- deserialize() ב- ValidatedAccelerationConfigResult מקלות על תהליך האחסון והשליפה.

יישום לדוגמא

כדי לסקור שילוב במקום של שירות ההאצה, עיין באפליקציה לדוגמה .

מגבלות

לשירות ההאצה יש את המגבלות הבאות:

  • רק תצורות האצת מעבד ו-GPU נתמכות כרגע,
  • זה תומך רק ב-TensorFlow Lite בשירותי Google Play ולא תוכל להשתמש בו אם אתה משתמש בגרסה המצורפת של TensorFlow Lite,
  • הוא אינו תומך בספריית המשימות TensorFlow Lite מכיוון שאינך יכול לאתחל BaseOptions ישירות עם האובייקט ValidatedAccelerationConfigResult .
  • Acceleration Service SDK תומך רק ברמת API 22 ומעלה.

אזהרות

אנא סקור את האזהרות הבאות בקפידה, במיוחד אם אתה מתכנן להשתמש ב-SDK זה בייצור:

  • לפני יציאה מבטא ושחרור הגרסה היציבה עבור ה-API של שירות האצה, נפרסם SDK חדש שעשויים להיות כמה הבדלים מהגרסא הנוכחית. כדי להמשיך להשתמש בשירות ההאצה, תצטרך לעבור ל-SDK החדש הזה ולדחוף עדכון לאפליקציה שלך בזמן. אי ביצוע פעולה זו עלול לגרום לשברים מכיוון ש- SDK בטא עשוי לא להיות תואם יותר לשירותי Google Play לאחר זמן מה.

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

תנאים ופרטיות

תנאי השירות

השימוש בממשקי ה-API של שירות האצה כפוף לתנאים וההגבלות של Google APIs .
בנוסף, ממשקי ה-API של שירות ההאצה נמצאים כעת בגרסת בטא, וככזה, על ידי השימוש בהם אתה מכיר בבעיות הפוטנציאליות המפורטות בסעיף האזהרות לעיל ומכיר בכך ששירות ההאצה לא תמיד יפעל כמפורט.

פְּרָטִיוּת

כאשר אתה משתמש בממשקי ה-API של שירות ההאצה, עיבוד נתוני הקלט (למשל תמונות, וידאו, טקסט) מתבצע במלואו במכשיר, ושירות ההאצה אינו שולח נתונים אלה לשרתי Google . כתוצאה מכך, אתה יכול להשתמש בממשקי ה-API שלנו לעיבוד נתוני קלט שאסור לצאת מהמכשיר.
ממשקי ה-API של שירות האצה עשויים ליצור קשר עם שרתי Google מעת לעת כדי לקבל דברים כמו תיקוני באגים, דגמים מעודכנים ומידע על תאימות מאיץ החומרה. ממשקי ה-API של שירות ההאצה שולחים ל-Google גם מדדים לגבי הביצועים והניצול של ממשקי ה-API באפליקציה שלך. Google משתמשת בנתונים של מדדים אלה כדי למדוד ביצועים, לנפות באגים, לתחזק ולשפר את ממשקי ה-API, ולזהות שימוש לרעה או שימוש לרעה, כמתואר בהמשך במדיניות הפרטיות שלנו.
אתה אחראי ליידע את המשתמשים באפליקציה שלך על העיבוד של Google בנתוני מדדי שירות ההאצה כנדרש על פי החוק החל.
הנתונים שאנו אוספים כוללים את הדברים הבאים:

  • מידע על המכשיר (כגון יצרן, דגם, גרסת מערכת הפעלה ומבנה) ומאיצי חומרה זמינים של ML (GPU ו-DSP). משמש לאבחון וניתוח שימוש.
  • מידע על האפליקציה (שם חבילה / מזהה חבילה, גרסת אפליקציה). משמש לאבחון וניתוח שימוש.
  • תצורת API (כגון פורמט תמונה ורזולוציה). משמש לאבחון וניתוח שימוש.
  • סוג אירוע (כגון אתחול, הורדת דגם, עדכון, הפעלה, זיהוי). משמש לאבחון וניתוח שימוש.
  • קודי שגיאה. משמש לאבחון.
  • מדדי ביצועים. משמש לאבחון.
  • מזהים לכל התקנה שאינם מזהים באופן ייחודי משתמש או מכשיר פיזי. משמש לתפעול של תצורה מרחוק וניתוח שימוש.
  • כתובות IP של שולח בקשת רשת. משמש לאבחון תצורה מרחוק. כתובות IP שנאספו נשמרות באופן זמני.

תמיכה ומשוב

אתה יכול לספק משוב ולקבל תמיכה באמצעות TensorFlow Issue Tracker. אנא דווח על בעיות ובקשות תמיכה באמצעות תבנית הבעיה של TensorFlow Lite בשירותי Google Play.