คุณภาพของการบริการ

เริ่มต้นจาก Android 11 NNAPI นำเสนอคุณภาพการบริการที่ดีขึ้น (QoS) โดยอนุญาตให้แอประบุลำดับความสำคัญที่สัมพันธ์กันของรุ่นต่างๆ ระยะเวลาสูงสุดที่คาดหวังสำหรับโมเดลที่ระบุในการเตรียมการ และระยะเวลาสูงสุดที่คาดไว้สำหรับ การดำเนินการที่กำหนดให้แล้วเสร็จ นอกจากนี้ Android 11 ยังเพิ่มค่าข้อผิดพลาด NNAPI เพิ่มเติมที่ช่วยให้บริการสามารถระบุสิ่งที่ผิดพลาดเมื่อเกิดความล้มเหลวได้อย่างแม่นยำยิ่งขึ้น เพื่อให้แอปไคลเอ็นต์สามารถตอบสนองและกู้คืนได้ดียิ่งขึ้น

ลำดับความสำคัญ

สำหรับ Android 11 หรือสูงกว่า รุ่นต่างๆ จะถูกจัดเตรียมโดยมีความสำคัญใน NN HAL 1.3 ลำดับความสำคัญนี้สัมพันธ์กับรุ่นอื่นๆ ที่เตรียมไว้ซึ่งเป็นของแอปเดียวกัน การดำเนินการที่มีลำดับความสำคัญสูงกว่าสามารถใช้ทรัพยากรการประมวลผลมากกว่าการดำเนินการที่มีลำดับความสำคัญต่ำกว่า และสามารถระงับหรือหยุดการดำเนินการที่มีลำดับความสำคัญต่ำกว่าได้

NN HAL 1.3 การโทรที่มี Priority ในฐานะที่เป็นข้อโต้แย้งอย่างชัดเจนเป็น IDevice::prepareModel_1_3 โปรดทราบว่า IDevice::prepareModelFromCache_1_3 โดยปริยายรวมถึงการ Priority ในการขัดแย้งแคช

มีกลยุทธ์ที่เป็นไปได้มากมายในการสนับสนุนลำดับความสำคัญขึ้นอยู่กับความสามารถของคนขับและคันเร่ง นี่คือกลยุทธ์หลายประการ:

  • ไดรเวอร์ที่ได้สร้างขึ้นในการสนับสนุนการจัดลำดับความสำคัญโดยตรงเผยแพร่ Priority ฟิลด์คันเร่ง
  • ใช้คิวลำดับความสำคัญต่อแอปเพื่อรองรับลำดับความสำคัญต่างๆ ก่อนที่การดำเนินการจะไปถึงตัวเร่งความเร็ว
  • หยุดชั่วคราวหรือยกเลิกโมเดลที่มีลำดับความสำคัญต่ำที่กำลังดำเนินการอยู่เพื่อให้ตัวเร่งความเร็วว่างเพื่อดำเนินการกับโมเดลที่มีลำดับความสำคัญสูง ทำเช่นนี้โดยทั้งด่านแทรกในรูปแบบลำดับความสำคัญต่ำว่าเมื่อถึงแบบสอบถามธงเพื่อตรวจสอบว่าการดำเนินการในปัจจุบันควรจะหยุดก่อนเวลาอันควรหรือโดยการแบ่งรูปแบบการเข้าไปในโมเดลย่อยและสอบถามธงระหว่างการประหารชีวิตรุ่นย่อยดัง โปรดทราบว่าการใช้จุดตรวจสอบหรือโมเดลย่อยในแบบจำลองที่เตรียมโดยมีลำดับความสำคัญสามารถทำให้เกิดโอเวอร์เฮดเพิ่มเติมที่ไม่มีอยู่ในรุ่นที่ไม่มีลำดับความสำคัญในเวอร์ชันที่ต่ำกว่า NN HAL 1.3

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

Android ช่วยให้บริการต่างๆ แยกความแตกต่างระหว่างแอปการโทรต่างๆ ผ่านการใช้ AID (Android UID) HIDL มีในตัวกลไกในการดึง UID แอปโทรผ่านวิธีการที่ ::android::hardware::IPCThreadState::getCallingUid รายชื่อของโรคเอดส์สามารถพบได้ใน libcutils/include/cutils/android_filesystem_config.h

กำหนดเวลา

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

NN HAL 1.3 สายที่มี OptionalTimePoint กำหนดเวลาเป็นอาร์กิวเมนต์คือ:

  • IDevice::prepareModel_1_3
  • IDevice::prepareModelFromCache_1_3
  • IPreparedModel::execute_1_3
  • IPreparedModel::executeSynchronously_1_3
  • IPreparedModel::executeFenced

หากต้องการดูการดำเนินการอ้างอิงของคุณลักษณะที่กำหนดเส้นตายสำหรับแต่ละวิธีการข้างต้นเห็นคนขับตัวอย่าง NNAPI ที่ frameworks/ml/nn/driver/sample/SampleDriver.cpp

รหัสข้อผิดพลาด

Android 11 มีค่ารหัสข้อผิดพลาดสี่ค่าใน NN HAL 1.3 เพื่อปรับปรุงการรายงานข้อผิดพลาด ช่วยให้ผู้ขับขี่สามารถสื่อสารสถานะและแอปของตนได้ดีขึ้นเพื่อกู้คืนได้อย่างสวยงามยิ่งขึ้น เหล่านี้เป็นค่ารหัสข้อผิดพลาดใน ErrorStatus

  • MISSED_DEADLINE_TRANSIENT
  • MISSED_DEADLINE_PERSISTENT
  • RESOURCE_EXHAUSTED_TRANSIENT
  • RESOURCE_EXHAUSTED_PERSISTENT

ใน Android 10 หรือต่ำกว่าคนขับเท่านั้นที่สามารถบ่งบอกถึงความล้มเหลวที่ผ่าน GENERAL_FAILURE รหัสข้อผิดพลาด จาก Android 11 ทั้งสอง MISSED_DEADLINE รหัสข้อผิดพลาดสามารถนำมาใช้เพื่อบ่งชี้ว่าภาระงานที่ถูกยกเลิกเนื่องจากกำหนดเส้นตายก็มาถึงหรือเพราะคนขับคาดการณ์ภาระงานจะไม่เสร็จสมบูรณ์ภายในวันที่กำหนด ทั้งสอง RESOURCE_EXHAUSTED รหัสข้อผิดพลาดสามารถใช้ในการแสดงให้เห็นว่างานที่ล้มเหลวเนื่องจากข้อ จำกัด ของทรัพยากรภายในขับเช่นคนขับรถไม่ได้มีหน่วยความจำเพียงพอสำหรับการโทร

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

การตรวจสอบความถูกต้อง

คุณภาพของการทำงานของบริการการทดสอบในการทดสอบ NNAPI VTS ( VtsHalNeuralnetworksV1_3Target ) ซึ่งรวมถึงชุดของการทดสอบสำหรับการตรวจสอบ ( TestGenerated/ValidationTest#Test/ ) เพื่อให้แน่ใจว่าคนขับเสียลำดับความสำคัญที่ไม่ถูกต้องและชุดของการทดสอบที่เรียกว่า DeadlineTest ( TestGenerated/DeadlineTest#Test/ ) เพื่อให้แน่ใจว่าการกำหนดเวลาขับรถจับได้อย่างถูกต้อง