บริการเร่งความเร็วสำหรับ Android (เบต้า)

การใช้โปรเซสเซอร์พิเศษ เช่น GPU, NPU หรือ DSP สำหรับการเร่งฮาร์ดแวร์สามารถปรับปรุงประสิทธิภาพการอนุมานได้อย่างมาก (การอนุมานเร็วขึ้นสูงสุด 10 เท่าในบางกรณี) และประสบการณ์ผู้ใช้ของแอปพลิเคชัน Android ที่เปิดใช้งาน ML อย่างไรก็ตาม เนื่องจากมีฮาร์ดแวร์และไดรเวอร์ที่หลากหลายที่ผู้ใช้ของคุณอาจมี การเลือกการกำหนดค่าการเร่งด้วยฮาร์ดแวร์ที่เหมาะสมที่สุดสำหรับอุปกรณ์ของผู้ใช้แต่ละคนอาจเป็นเรื่องที่ท้าทาย นอกจากนี้ การเปิดใช้งานการกำหนดค่าที่ไม่ถูกต้องบนอุปกรณ์สามารถสร้างประสบการณ์การใช้งานที่ไม่ดีแก่ผู้ใช้เนื่องจากเวลาแฝงสูง หรือในบางกรณีที่พบได้ยาก ข้อผิดพลาดรันไทม์หรือปัญหาด้านความแม่นยำที่เกิดจากความเข้ากันไม่ได้ของฮาร์ดแวร์

Acceleration Service สำหรับ Android เป็น API ที่ช่วยคุณเลือกการกำหนดค่าการเร่งด้วยฮาร์ดแวร์ที่เหมาะสมที่สุดสำหรับอุปกรณ์ของผู้ใช้ที่กำหนดและรุ่น .tflite ของคุณ ในขณะที่ลดความเสี่ยงของข้อผิดพลาดรันไทม์หรือปัญหาด้านความแม่นยำ

Acceleration Service ประเมินการกำหนดค่าการเร่งความเร็วต่างๆ บนอุปกรณ์ของผู้ใช้โดยเรียกใช้การวัดประสิทธิภาพการอนุมานภายในด้วยโมเดล TensorFlow Lite ของคุณ โดยทั่วไปการทดสอบเหล่านี้จะเสร็จสิ้นภายในไม่กี่วินาที ขึ้นอยู่กับรุ่นของคุณ คุณสามารถเรียกใช้การวัดประสิทธิภาพหนึ่งครั้งบนอุปกรณ์ของผู้ใช้ทุกเครื่องก่อนเวลาอนุมาน แคชผลลัพธ์ และใช้ระหว่างการอนุมาน การวัดประสิทธิภาพเหล่านี้อยู่นอกกระบวนการ ซึ่งช่วยลดความเสี่ยงของการขัดข้องในแอปของคุณ

ระบุโมเดล ตัวอย่างข้อมูล และผลลัพธ์ที่คาดหวังของคุณ (อินพุตและเอาต์พุต "สีทอง") และ Acceleration Service จะเรียกใช้การวัดประสิทธิภาพการอนุมาน TFLite ภายในเพื่อให้คำแนะนำเกี่ยวกับฮาร์ดแวร์แก่คุณ

ภาพ

Acceleration Service เป็นส่วนหนึ่งของ ML stack ที่กำหนดเองของ Android และทำงานร่วมกับ 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 Services หากคุณยังไม่ได้ใช้รันไทม์ TensorFlow Lite ที่ให้บริการผ่าน Play Services คุณจะต้องอัปเดต การอ้างอิง ของคุณ

วิธีใช้ Acceleration Service API

หากต้องการใช้บริการการเร่งความเร็ว ให้เริ่มด้วยการสร้างการกำหนดค่าการเร่งที่คุณต้องการประเมินสำหรับโมเดลของคุณ (เช่น GPU ที่มี OpenGL) จากนั้นสร้างการกำหนดค่าการตรวจสอบด้วยโมเดลของคุณ ข้อมูลตัวอย่างบางส่วน และเอาต์พุตของโมเดลที่คาดไว้ สุดท้ายเรียก validateConfig() เพื่อส่งทั้งการกำหนดค่าการเร่งความเร็วและการกำหนดค่าการตรวจสอบความถูกต้อง

ภาพ

สร้างการกำหนดค่าการเร่งความเร็ว

การกำหนดค่าการเร่งความเร็วเป็นตัวแทนของการกำหนดค่าฮาร์ดแวร์ซึ่งแปลเป็นผู้รับมอบสิทธิ์ในระหว่างเวลาดำเนินการ จากนั้น Acceleration Service จะใช้การกำหนดค่าเหล่านี้เป็นการภายในเพื่อดำเนินการทดสอบการอนุมาน

ในขณะนี้ บริการเร่งความเร็วช่วยให้คุณสามารถประเมินการกำหนดค่า GPU (แปลงเป็นผู้รับมอบสิทธิ์ GPU ในช่วงเวลาดำเนินการ) ด้วย GpuAccelerationConfig และการอนุมานของ CPU (ด้วย CpuAccelerationConfig ) เรากำลังพยายามสนับสนุนผู้รับมอบสิทธิ์ให้เข้าถึงฮาร์ดแวร์อื่นๆ ได้มากขึ้นในอนาคต

การกำหนดค่าการเร่ง GPU

สร้างการกำหนดค่าการเร่ง GPU ดังนี้:

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

คุณต้องระบุว่าโมเดลของคุณใช้การกำหนดปริมาณด้วย setEnableQuantizedInference() หรือไม่

การกำหนดค่าการเร่ง CPU

สร้างการเร่งความเร็วของ CPU ดังนี้:

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

ใช้เมธอด setNumThreads() เพื่อกำหนดจำนวนเธรดที่คุณต้องการใช้เพื่อประเมินการอนุมานของ CPU

สร้างการกำหนดค่าการตรวจสอบ

การกำหนดค่าการตรวจสอบช่วยให้คุณสามารถกำหนดวิธีที่คุณต้องการให้ Acceleration Service ประเมินการอนุมาน คุณจะใช้มันเพื่อผ่าน:

  • ตัวอย่างอินพุต,
  • ผลลัพธ์ที่คาดหวัง
  • ตรรกะการตรวจสอบความถูกต้อง

ตรวจสอบให้แน่ใจว่าได้จัดเตรียมตัวอย่างอินพุตที่คุณคาดหวังประสิทธิภาพที่ดีของโมเดลของคุณ (หรือที่เรียกว่าตัวอย่าง "สีทอง")

สร้าง ValidationConfig ด้วย CustomValidationConfig.Builder ดังนี้:

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

ระบุจำนวนตัวอย่างสีทองด้วย setBatchSize() ส่งผ่านอินพุตของตัวอย่างสีทองของคุณโดยใช้ setGoldenInputs() ระบุเอาต์พุตที่คาดไว้สำหรับอินพุตที่ส่งผ่านด้วย setGoldenOutputs()

คุณสามารถกำหนดเวลาอนุมานสูงสุดได้ด้วย setInferenceTimeoutMillis() (5000 ms ตามค่าเริ่มต้น) หากการอนุมานใช้เวลานานกว่าเวลาที่คุณกำหนดไว้ การกำหนดค่าจะถูกปฏิเสธ

คุณยังสามารถสร้าง 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 พร้อม 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 > จาก Task Api ของบริการ Google Play ซึ่งเปิดใช้งานงานแบบอะซิงโครนัส
หากต้องการรับผลลัพธ์จากการเรียกตรวจสอบ ให้เพิ่มการเรียกกลับ addOnSuccessListener()

ใช้การกำหนดค่าที่ผ่านการตรวจสอบในล่ามของคุณ

หลังจากตรวจสอบว่า ValidatedAccelerationConfigResult ที่ส่งคืนในการเรียกกลับนั้นถูกต้องหรือไม่ คุณสามารถตั้งค่าการกำหนดค่าที่ผ่านการตรวจสอบเป็นการกำหนดค่า interpreterOptions.setAccelerationConfig() เร่งความเร็วสำหรับล่ามของคุณที่เรียกใช้

แคชการกำหนดค่า

การกำหนดค่าการเร่งความเร็วที่เหมาะสมที่สุดสำหรับรุ่นของคุณไม่น่าจะเปลี่ยนแปลงในอุปกรณ์ ดังนั้น เมื่อคุณได้รับการกำหนดค่าการเร่งความเร็วที่น่าพอใจแล้ว คุณควรจัดเก็บไว้ในอุปกรณ์และปล่อยให้แอปพลิเคชันของคุณเรียกข้อมูลและใช้เพื่อสร้าง InterpreterOptions ของคุณในระหว่างเซสชันต่อไปนี้ แทนที่จะเรียกใช้การตรวจสอบอื่น เมธอด serialize() และ deserialize() ใน ValidatedAccelerationConfigResult ทำให้การจัดเก็บและดึงข้อมูลง่ายขึ้น

แอปพลิเคชันตัวอย่าง

หากต้องการตรวจสอบการผสานรวมในแหล่งกำเนิดของ Acceleration Service โปรดดูที่ แอปตัวอย่าง

ข้อจำกัด

Acceleration Service มีข้อจำกัดในปัจจุบันดังต่อไปนี้:

  • ขณะนี้รองรับเฉพาะการกำหนดค่าการเร่ง CPU และ GPU เท่านั้น
  • รองรับเฉพาะ TensorFlow Lite ในบริการ Google Play และคุณไม่สามารถใช้งานได้หากคุณใช้ TensorFlow Lite เวอร์ชันรวม
  • ไม่รองรับ TensorFlow Lite Task Library เนื่องจากคุณไม่สามารถเริ่มต้น BaseOptions ได้โดยตรงด้วยวัตถุ ValidatedAccelerationConfigResult
  • Acceleration Service SDK รองรับ API ระดับ 22 ขึ้นไปเท่านั้น

คำเตือน

โปรดอ่านคำเตือนต่อไปนี้อย่างละเอียด โดยเฉพาะอย่างยิ่งหากคุณวางแผนที่จะใช้ SDK นี้ในการผลิต:

  • ก่อนออกจากเบต้าและปล่อยเวอร์ชันเสถียรสำหรับ Acceleration Service API เราจะเผยแพร่ SDK ใหม่ซึ่งอาจแตกต่างจากเบต้าปัจจุบัน ในการใช้บริการการเร่งความเร็วต่อไป คุณจะต้องย้ายข้อมูลไปยัง SDK ใหม่นี้และพุชการอัปเดตไปยังแอปของคุณอย่างทันท่วงที การไม่ทำเช่นนั้นอาจทำให้เกิดการแตกหักเนื่องจาก SDK รุ่นเบต้าอาจเข้ากันไม่ได้กับบริการ Google Play อีกต่อไปหลังจากผ่านไประยะหนึ่ง

  • ไม่มีการรับประกันว่าคุณสมบัติเฉพาะภายใน Acceleration Service API หรือ API โดยรวมจะพร้อมใช้งานโดยทั่วไป อาจยังคงอยู่ในรุ่นเบต้าอย่างไม่มีกำหนด ปิดตัวลง หรือรวมกับคุณสมบัติอื่นๆ ในแพ็คเกจที่ออกแบบมาสำหรับผู้ชมนักพัฒนาเฉพาะ คุณลักษณะบางอย่างที่มี Acceleration Service API หรือตัว API ทั้งหมดอาจพร้อมใช้งานโดยทั่วไปในที่สุด แต่ไม่มีกำหนดเวลาที่แน่นอนสำหรับสิ่งนี้

ข้อกำหนดและความเป็นส่วนตัว

เงื่อนไขการให้บริการ

การใช้ Acceleration Service API อยู่ภายใต้ ข้อกำหนดในการให้บริการของ Google APIs
นอกจากนี้ Acceleration Service APIs ในปัจจุบันยังอยู่ในช่วงเบต้า ดังนั้น การใช้ API นี้แสดงว่าคุณรับทราบถึงปัญหาที่อาจเกิดขึ้นตามที่ระบุไว้ในส่วนคำเตือนด้านบน และรับทราบว่า Acceleration Service อาจไม่ทำงานตามที่ระบุเสมอไป

ความเป็นส่วนตัว

เมื่อคุณใช้ Acceleration Service API การประมวลผลข้อมูลที่ป้อนเข้า (เช่น รูปภาพ วิดีโอ ข้อความ) จะเกิดขึ้นบนอุปกรณ์อย่างสมบูรณ์ และ บริการ Acceleration จะไม่ส่งข้อมูลนั้นไปยังเซิร์ฟเวอร์ของ Google ด้วยเหตุนี้ คุณจึงสามารถใช้ API ของเราในการประมวลผลข้อมูลอินพุตที่ไม่ควรออกจากอุปกรณ์
Acceleration Service API อาจติดต่อกับเซิร์ฟเวอร์ของ Google เป็นครั้งคราวเพื่อรับสิ่งต่างๆ เช่น การแก้ไขจุดบกพร่อง รุ่นที่อัปเดต และข้อมูลความเข้ากันได้ของตัวเร่งฮาร์ดแวร์ นอกจากนี้ Acceleration Service API ยังส่งเมตริกเกี่ยวกับประสิทธิภาพและการใช้งาน API ในแอปของคุณไปยัง Google Google ใช้ข้อมูลเมตริกนี้เพื่อวัดประสิทธิภาพ ดีบัก บำรุงรักษา และปรับปรุง API และตรวจหาการใช้งานในทางที่ผิดตามที่อธิบายเพิ่มเติมใน นโยบายส่วนบุคคล ของเรา
คุณมีหน้าที่แจ้งให้ผู้ใช้แอปทราบเกี่ยวกับการประมวลผลข้อมูลเมตริก Acceleration Service ของ Google ตามที่กฎหมายที่เกี่ยวข้องกำหนด
ข้อมูลที่เรารวบรวมมีดังต่อไปนี้:

  • ข้อมูลอุปกรณ์ (เช่น ผู้ผลิต รุ่น เวอร์ชันระบบปฏิบัติการ และรุ่น) และตัวเร่งฮาร์ดแวร์ ML ที่มี (GPU และ DSP) ใช้สำหรับการวินิจฉัยและการวิเคราะห์การใช้งาน
  • ข้อมูลแอพ (ชื่อแพ็คเกจ / รหัสบันเดิล, เวอร์ชั่นแอพ) ใช้สำหรับการวินิจฉัยและการวิเคราะห์การใช้งาน
  • การกำหนดค่า API (เช่น รูปแบบและความละเอียดของภาพ) ใช้สำหรับการวินิจฉัยและการวิเคราะห์การใช้งาน
  • ประเภทเหตุการณ์ (เช่น เริ่มต้น ดาวน์โหลดโมเดล อัปเดต เรียกใช้ ตรวจหา) ใช้สำหรับการวินิจฉัยและการวิเคราะห์การใช้งาน
  • รหัสข้อผิดพลาด ใช้สำหรับการวินิจฉัย
  • การวัดประสิทธิภาพ. ใช้สำหรับการวินิจฉัย
  • ตัวระบุสำหรับแต่ละการติดตั้งที่ไม่ได้ระบุผู้ใช้หรืออุปกรณ์จริงโดยเฉพาะ ใช้สำหรับการดำเนินการกำหนดค่าระยะไกลและการวิเคราะห์การใช้งาน
  • ที่อยู่ IP ของผู้ส่งคำขอเครือข่าย ใช้สำหรับการวินิจฉัยการกำหนดค่าระยะไกล ที่อยู่ IP ที่รวบรวมไว้จะถูกเก็บไว้ชั่วคราว

การสนับสนุนและข้อเสนอแนะ

คุณสามารถแสดงความคิดเห็นและรับการสนับสนุนผ่าน TensorFlow Issue Tracker โปรดรายงานปัญหาและคำขอรับการสนับสนุนโดยใช้ เทมเพลตปัญหา สำหรับ TensorFlow Lite ในบริการ Google Play