บริการ AAccelerated สำหรับ Android (เบต้า)

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

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

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

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

รูปภาพ

AAccelerated Service เป็นส่วนหนึ่งของสแต็ก ML ที่กำหนดเองของ Android และใช้งานได้กับ TensorFlow Lite ในบริการ Google Play

เพิ่มทรัพยากร Dependency ในโปรเจ็กต์

เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ create.gradle ของแอปพลิเคชัน

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

AAccelerated Service API ใช้งานได้กับ TensorFlow Lite ในบริการ Google Play หากคุณไม่ได้ใช้รันไทม์ TensorFlow Lite ที่มีให้ผ่านบริการ Play คุณจะต้องอัปเดตทรัพยากร Dependency

วิธีใช้ Acceleration Service API

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

รูปภาพ

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

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

ในขณะนี้บริการการเร่งความเร็วช่วยให้คุณประเมินการกำหนดค่า GPU (แปลงเป็น 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 ประเมินการอนุมานอย่างไร คุณจะใช้พารามิเตอร์เหล่านี้เพื่อผ่าน:

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

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

สร้าง 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;

   }
}

ตรวจสอบว่าได้กำหนดตรรกะการตรวจสอบที่เหมาะกับ Use Case ของคุณ

โปรดทราบว่าหากฝังข้อมูลการตรวจสอบไว้ในโมเดลแล้ว คุณจะใช้ EmbeddedValidationConfig ได้

สร้างเอาต์พุตการตรวจสอบ

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

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

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

เมื่อสร้างการกำหนดค่าการเร่งและการกำหนดค่าการตรวจสอบแล้ว คุณจะประเมินการกำหนดค่าดังกล่าวสำหรับโมเดลได้

ตรวจสอบว่าได้เริ่มต้นรันไทม์ของ TensorFlow Lite ที่มีรันไทม์ของบริการ Google อย่างถูกต้องและมอบสิทธิ์ 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 ในสถานการณ์เช่นนี้ โปรดดูแอปตัวอย่าง

ข้อจำกัด

AAccelerated Service มีข้อจำกัดดังต่อไปนี้

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

คำเตือน

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

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

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

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

ข้อกำหนดในการให้บริการ

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

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

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

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

การสนับสนุนและความคิดเห็น

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