يمكن أن يؤدي استخدام وحدات معالجة الرسومات (GPU) لتشغيل نماذج تعلُّم الآلة (ML) إلى تحسين الأداء وتجربة المستخدم بشكل كبير في التطبيقات التي تعتمد على تعلُّم الآلة. على أجهزة Android، يمكنك تفعيل مفوَّض وأحد واجهات برمجة التطبيقات التالية:
- واجهة برمجة التطبيقات الخاصة بميزة "الترجمة الفورية" - هذا الدليل
- واجهة برمجة التطبيقات الأصلية (C/C++ ) - دليل
توضّح هذه الصفحة كيفية تفعيل تسريع وحدة معالجة الرسومات لطُرز TensorFlow Lite في تطبيقات Android باستخدام واجهة برمجة التطبيقات "الترجمة الفورية". لمزيد من المعلومات حول استخدام تفويض GPU لـ TensorFlow Lite، بما في ذلك أفضل الممارسات والتقنيات المتقدمة، راجِع صفحة مفوَّضو وحدة معالجة الرسومات.
استخدام وحدة معالجة الرسومات مع TensorFlow Lite مع "خدمات Google Play"
توفر واجهة برمجة التطبيقات للمترجم في TensorFlow Lite مجموعة من واجهات برمجة التطبيقات للأغراض العامة لإنشاء تطبيقات تعلُّم الآلة. يوضّح هذا القسم كيفية استخدام تفويض مسرِّعات وحدة معالجة الرسومات مع واجهات برمجة التطبيقات هذه مع TensorFlow Lite مع "خدمات Google Play".
إنّ TensorFlow Lite مع خدمات Google Play هو المسار المقترَح لاستخدام TensorFlow Lite على Android. إذا كان تطبيقك يستهدف أجهزة لا تعمل على Google Play، راجِع القسم وحدة معالجة الرسومات التي تتضمّن "واجهة برمجة تطبيقات الترجمة الفورية" وقسم TensorFlow Lite المستقل.
إضافة تبعيات المشروع (باستخدام كتالوج إصدار .toml)
- تعديل ملف
libs.versions.toml
الخاص بمشروعك
[libraries]
...
tflite-gpu = { module = "org.tensorflow:tensorflow-lite-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "org.tensorflow:tensorflow-lite-gpu-api", version = "2.X.Y" }
...
- إضافة العناصر الاعتمادية للمشروع في
build.gradle.kts
الخاصة بالتطبيق
dependencies {
...
implementation(libraries.tflite.gpu)
implementation(libraries.tflite.gpu.api)
...
}
إضافة تبعيات المشروع
لإتاحة الوصول إلى المستخدم المفوَّض بإدارة وحدة معالجة الرسومات، أضِف
com.google.android.gms:play-services-tflite-gpu
إلى ملف build.gradle
في تطبيقك:
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'
}
تفعيل ميزة "تسريع وحدة معالجة الرسومات"
عليك بعد ذلك إعداد TensorFlow Lite باستخدام "خدمات Google Play" مع دعم وحدة معالجة الرسومات:
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);
يمكن أيضًا استخدام تفويض وحدة معالجة الرسومات مع ربط نموذج تعلُّم الآلة في "استوديو Android". لمزيد من المعلومات، يمكنك الاطّلاع على إنشاء واجهات نماذج باستخدام البيانات الوصفية.
استخدام وحدة معالجة الرسومات مع تطبيق TensorFlow Lite المستقل
فإذا كان تطبيقك يستهدف أجهزة لا تعمل بـ Google Play، فمن الممكن إضافة تفويض وحدة معالجة الرسومات إلى تطبيقك واستخدامه مع الإصدار المستقل من TensorFlow Lite.
إضافة تبعيات المشروع
لإتاحة الوصول إلى المفوَّض من وحدة معالجة الرسومات، أضِف
org.tensorflow:tensorflow-lite-gpu-delegate-plugin
إلى ملف
build.gradle
الخاص بتطبيقك:
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite'
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
تفعيل ميزة "تسريع وحدة معالجة الرسومات"
شغِّل بعد ذلك TensorFlow Lite على وحدة معالجة الرسومات "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 مع النماذج الكمية تلقائيًا. ولن تضطر إلى إجراء أي تغييرات على الرمز لاستخدام نماذج الكمية مع تفويض وحدة معالجة الرسومات. يوضح القسم التالي كيفية إيقاف الدعم الكمي لأغراض الاختبار أو التجربة.
إيقاف إتاحة النموذج الكمي
يوضّح الرمز التالي كيفية إيقاف إتاحة النماذج الكمية.
Java
GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false)); Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
لمزيد من المعلومات عن تشغيل نماذج الكمية باستخدام تسريع وحدة معالجة الرسومات، يُرجى الاطّلاع على نظرة عامة على تفويض وحدة معالجة الرسومات.