שירות Boost ל-Android (בטא)

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

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

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

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

תמונה

Acceleration Service הוא חלק מחבילת למידת המכונה המותאמת אישית של Android והוא פועל עם LiteRT ב-Google Play Services.

הוספת יחסי התלות לפרויקט

מוסיפים את יחסי התלות הבאים לקובץ build.gradle של האפליקציה:

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

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

איך משתמשים ב-Acceleration Service API

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

תמונה

יצירת הגדרות של האצה

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

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

הגדרת האצת GPU

יוצרים הגדרה של האצת GPU באופן הבא:

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

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

הגדרת האצת המעבד (CPU)

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

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

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

יצירה של הגדרות אימות

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

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

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

לכתוב ValidationConfig עם CustomValidationConfig.Builder כמו:

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

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

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

אפשר גם ליצור 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

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

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

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

אימות ההגדרה של האצה

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

יש לוודא שזמן הריצה של LiteRT עם 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 מבצע את תהליך האחסון והאחזור יותר קל.

אפליקציה לדוגמה

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

מגבלות

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

  • כרגע יש תמיכה רק בהגדרות של הגברת מהירות המעבד (CPU) וה-GPU.
  • השירות תומך ב-LiteRT רק בשירותי Google Play, ולא ניתן יש להשתמש בו אם אתה משתמש בגרסה הכלולה בחבילה של LiteRT.
  • ה-SDK של Acceleration Service תומך רק ב-API ברמה 22 ואילך.

נקודות שצריך לשים לב אליהן:

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

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

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

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

תנאים והגבלות

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

פרטיות

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

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

תמיכה ומשוב

אתם יכולים לשלוח משוב ולקבל תמיכה דרך הכלי למעקב אחר בעיות TensorFlow. אפשר לדווח על בעיות ובקשות לתמיכה באמצעות תבנית לבעיות ל-LiteRT ב-Google Play Services.