نماینده شتاب پردازنده گرافیکی برای اندروید

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

استفاده از واحدهای پردازش گرافیکی (GPU) برای اجرای مدل‌های یادگیری ماشینی (ML) می‌تواند عملکرد مدل شما و تجربه کاربری برنامه‌های دارای ML را به طور چشمگیری بهبود بخشد. در دستگاه‌های Android، می‌توانید با استفاده از یک نماینده ، استفاده از مدل‌های خود را با سرعت GPU فعال کنید. نمایندگان به عنوان درایورهای سخت افزاری برای TensorFlow Lite عمل می کنند و به شما امکان می دهند کد مدل خود را روی پردازنده های گرافیکی اجرا کنید.

این صفحه نحوه فعال کردن شتاب GPU را برای مدل‌های TensorFlow Lite در برنامه‌های Android توضیح می‌دهد. برای اطلاعات بیشتر در مورد استفاده از نماینده GPU برای TensorFlow Lite، از جمله بهترین شیوه‌ها و تکنیک‌های پیشرفته، به صفحه نمایندگان GPU مراجعه کنید.

از GPU با APIهای Task Library استفاده کنید

TensorFlow Lite Task Libraries مجموعه‌ای از APIهای مختص کار را برای ساخت برنامه‌های یادگیری ماشین ارائه می‌کنند. این بخش نحوه استفاده از نماینده شتاب دهنده GPU با این APIها را توضیح می دهد.

وابستگی های پروژه را اضافه کنید

با افزودن وابستگی‌های زیر فایل build.gradle پروژه‌های توسعه خود را به‌روزرسانی کنید تا tensorflow-lite-gpu-delegate-plugin را که در مثال کد زیر نشان داده شده است، دسترسی به APIهای نماینده GPU را با کتابخانه‌های وظیفه TensorFlow Lite فعال کنید:

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

شتاب GPU را فعال کنید

گزینه delegate GPU را برای کلاس مدل Task API خود با کلاس BaseOptions کنید. به عنوان مثال، می‌توانید GPU را در ObjectDetector ، همانطور که در مثال‌های کد زیر نشان داده شده است:

کاتلین

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    val baseOptions = BaseOptions.builder().useGpu().build()

    val options =
        ObjectDetector.ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build()

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options)

      

جاوا

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    BaseOptions baseOptions = BaseOptions.builder().useGpu().build();

    ObjectDetectorOptions options =
        ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build();

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options);
      

از GPU با Interpreter API استفاده کنید

TensorFlow Lite Interpreter API مجموعه‌ای از APIهای عمومی را برای ساخت برنامه‌های یادگیری ماشین ارائه می‌کند. این بخش نحوه استفاده از نماینده شتاب دهنده GPU با این APIها را توضیح می دهد.

وابستگی های پروژه را اضافه کنید

با افزودن وابستگی‌های زیر فایل build.gradle پروژه‌های توسعه خود را به‌روزرسانی کنید تا org.tensorflow:tensorflow-lite-gpu را دربر بگیرد، دسترسی به APIهای نماینده GPU را فعال کنید، همانطور که در مثال کد زیر نشان داده شده است:

dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite'
    implementation 'org.tensorflow:tensorflow-lite-gpu'
}

شتاب GPU را فعال کنید

سپس TensorFlow Lite را روی GPU با TfLiteDelegate کنید. در جاوا، می‌توانید GpuDelegate را از طریق Interpreter.Options مشخص کنید.

کاتلین

    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)
      

جاوا

    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);
      

نماینده GPU همچنین می تواند با اتصال مدل ML در Android Studio استفاده شود. برای اطلاعات بیشتر، به ایجاد رابط های مدل با استفاده از ابرداده مراجعه کنید.

پشتیبانی از GPU پیشرفته

این بخش کاربردهای پیشرفته نماینده GPU برای اندروید، از جمله C API، C++ API و استفاده از مدل‌های کوانتیزه را پوشش می‌دهد.

C/C++ API برای اندروید

با ایجاد نماینده با TfLiteGpuDelegateV2Create() و از بین بردن آن با TfLiteGpuDelegateV2Delete() ، همانطور که در کد مثال زیر نشان داده شده است، از نماینده GPU TensorFlow Lite برای Android در C یا C++ استفاده کنید:

// Set up interpreter.
auto model = FlatBufferModel::BuildFromFile(model_path);
if (!model) return false;
ops::builtin::BuiltinOpResolver op_resolver;
std::unique_ptr<Interpreter> interpreter;
InterpreterBuilder(*model, op_resolver)(&interpreter);

// NEW: Prepare GPU delegate.
auto* delegate = TfLiteGpuDelegateV2Create(/*default options=*/nullptr);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;

// Run inference.
WriteToInputTensor(interpreter->typed_input_tensor<float>(0));
if (interpreter->Invoke() != kTfLiteOk) return false;
ReadFromOutputTensor(interpreter->typed_output_tensor<float>(0));

// NEW: Clean up.
TfLiteGpuDelegateV2Delete(delegate);

کد شی TfLiteGpuDelegateOptionsV2 را مرور کنید تا یک نمونه نماینده با گزینه های سفارشی بسازید. می توانید گزینه های پیش فرض را با TfLiteGpuDelegateOptionsV2Default() مقداردهی اولیه کنید و سپس در صورت لزوم آنها را تغییر دهید.

نماینده GPU TensorFlow Lite برای اندروید در C یا C++ از سیستم ساخت Bazel استفاده می کند. با استفاده از دستور زیر می توانید نماینده را بسازید:

bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:delegate                           # for static library
bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:libtensorflowlite_gpu_delegate.so  # for dynamic library

هنگام فراخوانی Interpreter::ModifyGraphWithDelegate() یا Interpreter::Invoke() ، تماس گیرنده باید یک EGLContext در رشته فعلی داشته باشد و Interpreter::Invoke() باید از همان EGLContext شود. اگر یک EGLContext وجود نداشته باشد، نماینده یک متن را به صورت داخلی ایجاد می کند، اما پس از آن باید مطمئن شوید که Interpreter::Invoke() همیشه از همان رشته ای فراخوانی می شود که در آن Interpreter::ModifyGraphWithDelegate() فراخوانی شده است.

مدل های کوانتیزه شده

کتابخانه های نمایندگی GPU اندروید به طور پیش فرض از مدل های کوانتیزه شده پشتیبانی می کنند. برای استفاده از مدل های کوانتیزه شده با نماینده GPU، نیازی به تغییر کد ندارید. بخش زیر نحوه غیرفعال کردن پشتیبانی کوانتیزه شده برای اهداف آزمایشی یا آزمایشی را توضیح می دهد.

پشتیبانی از مدل کوانتیزه را غیرفعال کنید

کد زیر نحوه غیرفعال کردن پشتیبانی از مدل های کوانتیزه را نشان می دهد.

جاوا

GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
      

C++

TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default();
options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE;

auto* delegate = TfLiteGpuDelegateV2Create(options);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
      

برای اطلاعات بیشتر در مورد اجرای مدل های کوانتیزه شده با شتاب GPU، به نمای کلی نماینده GPU مراجعه کنید.