שימוש ביחידות עיבוד גרפיות (GPU) להרצת מודלים של למידת מכונה (ML) יכולה לשפר באופן משמעותי את הביצועים ואת חוויית המשתמש אפליקציות שתומכות בלמידת מכונה. במכשירי Android, אפשר להפעיל הענקת גישה ואחד מממשקי ה-API הבאים:
- interpreer API – המדריך הזה
- API מקורי (C/C++ ) - מדריך
בדף הזה נסביר איך להפעיל האצת GPU לדגמי LiteRT ב- אפליקציות ל-Android שמשתמשות ב-Translate API. למידע נוסף על השימוש ב-GPU להעביר נתונים ב-LiteRT, כולל שיטות מומלצות וטכניקות מתקדמות, עיינו בדף משתמשים שקיבלו הרשאה ל-GPU.
שימוש ב-GPU עם LiteRT עם Google Play Services
תרגום שיחה פעילה (LiteRT) API מספק קבוצה של ממשקי API לשימוש כללי לפיתוח אפליקציות של למידת מכונה. הקטע הזה מתארת את אופן השימוש בהאצלת GPU עם ממשקי ה-API האלה עם LiteRT עם Google Play Services.
מומלץ להשתמש ב-LiteRT עם Google Play Services נתיב לשימוש ב-LiteRT ב-Android. אם האפליקציה שלך מטרגטת מכשירים שלא מפעילות את Google Play, ראו GPU עם Translate API LiteRT.
מוסיפים יחסי תלות של פרויקט (באמצעות קטלוג הגרסאות של .toml)
- עדכון הקובץ
libs.versions.toml
של הפרויקט
[libraries]
...
tflite-gpu = { module = "com.google.ai.edge.litert:litert-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "com.google.ai.edge.litert:litert-gpu-api", version = "2.X.Y" }
...
- צריך להוסיף יחסי תלות של פרויקט ב-
build.gradle.kts
של האפליקציה
dependencies {
...
implementation(libraries.tflite.gpu)
implementation(libraries.tflite.gpu.api)
...
}
הוספת יחסי תלות של פרויקטים
כדי להפעיל גישה למקבל ההרשאה ל-GPU, צריך להוסיף
com.google.android.gms:play-services-tflite-gpu
ל-build.gradle
של האפליקציה
file:
dependencies {
...
implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
}
הפעלה של האצת GPU
לאחר מכן, מאתחלים את LiteRT עם Google Play Services עם תמיכה ב-GPU:
Kotlin
val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context) val interpreterTask = useGpuTask.continueWith { useGpuTask -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(useGpuTask.result) .build()) }
Java
Task<boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context); Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task -> TfLite.initialize(context, TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(true) .build()); });
עכשיו אפשר לאתחל את המתרגם להעביר GpuDelegateFactory
עד InterpreterApi.Options
:
Kotlin
val options = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(GpuDelegateFactory()) val interpreter = InterpreterApi(model, options) // Run inference writeToInput(input) interpreter.run(input, output) readFromOutput(output)
Java
Options options = InterpreterApi.Options() .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new GpuDelegateFactory()); Interpreter interpreter = new InterpreterApi(model, options); // Run inference writeToInput(input); interpreter.run(input, output); readFromOutput(output);
אפשר להשתמש בהרשאה ל-GPU גם באמצעות קישור מודלים של למידת מכונה ב-Android Studio. עבור מידע נוסף זמין במאמר יצירת ממשקי מודלים באמצעות מטא-נתונים.
שימוש ב-GPU עם LiteRT נפרד
אם האפליקציה שלך מטרגטת מכשירים שלא מפעילים את Google Play, שניתן לאגד את נציג ה-GPU לאפליקציה שלכם ולהשתמש בו עם בגרסה העצמאית של LiteRT.
הוספת יחסי תלות של פרויקטים
כדי להפעיל גישה למקבל ההרשאה ל-GPU, צריך להוסיף
com.google.ai.edge.litert:litert-gpu-delegate-plugin
לאפליקציה שלך
קובץ build.gradle
:
dependencies {
...
implementation 'com.google.ai.edge.litert:litert'
implementation 'com.google.ai.edge.litert:litert-gpu'
implementation 'com.google.ai.edge.litert:litert-gpu-api'
}
הפעלה של האצת GPU
לאחר מכן, מריצים את LiteRT ב-GPU עם TfLiteDelegate
. ב-Java אפשר לציין
GpuDelegate
עד Interpreter.Options
.
Kotlin
import org.tensorflow.lite.Interpreter import org.tensorflow.lite.gpu.CompatibilityList import org.tensorflow.lite.gpu.GpuDelegate val compatList = CompatibilityList() val options = Interpreter.Options().apply{ if(compatList.isDelegateSupportedOnThisDevice){ // if the device has a supported GPU, add the GPU delegate val delegateOptions = compatList.bestOptionsForThisDevice this.addDelegate(GpuDelegate(delegateOptions)) } else { // if the GPU is not supported, run on 4 threads this.setNumThreads(4) } } val interpreter = Interpreter(model, options) // Run inference writeToInput(input) interpreter.run(input, output) readFromOutput(output)
Java
import org.tensorflow.lite.Interpreter; import org.tensorflow.lite.gpu.CompatibilityList; import org.tensorflow.lite.gpu.GpuDelegate; // Initialize interpreter with GPU delegate Interpreter.Options options = new Interpreter.Options(); CompatibilityList compatList = CompatibilityList(); if(compatList.isDelegateSupportedOnThisDevice()){ // if the device has a supported GPU, add the GPU delegate GpuDelegate.Options delegateOptions = compatList.getBestOptionsForThisDevice(); GpuDelegate gpuDelegate = new GpuDelegate(delegateOptions); options.addDelegate(gpuDelegate); } else { // if the GPU is not supported, run on 4 threads options.setNumThreads(4); } Interpreter interpreter = new Interpreter(model, options); // Run inference writeToInput(input); interpreter.run(input, output); readFromOutput(output);
מודלים כמותיים
ספריות להאציל של Android GPU תומכות במודלים כמותיים כברירת מחדל. לא תצטרכו לבצע שינויים בקוד כדי להשתמש במודלים כמותיים עם מקבל הגישה ל-GPU. בקטע הבא מוסבר איך להשבית תמיכה כמותית בבדיקה למטרות ניסיוניות.
השבתת התמיכה במודל כמותי
הקוד הבא מסביר איך להשבית את התמיכה במודלים כמותיים.
Java
GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false)); Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
למידע נוסף על הרצת מודלים כמותיים עם האצת GPU, ראו: סקירה כללית בנושא הענקת גישה ל-GPU.