หน้านี้แสดงภาพรวมของวิธีใช้ Neural Networks API (NNAPI)
คนขับ สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารที่อยู่ในคำจำกัดความ HAL
ไฟล์ใน
hardware/interfaces/neuralnetworks
ตัวอย่างการใช้งานไดรเวอร์อยู่ใน
frameworks/ml/nn/driver/sample
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Neural Networks API โปรดดู Neural Networks API
HAL โครงข่ายระบบประสาทเทียม
โครงข่ายระบบประสาทเทียม (NN) HAL แสดงนามธรรมของอุปกรณ์ต่างๆ
เช่น หน่วยประมวลผลกราฟิก (GPU) และผู้ประมวลผลสัญญาณดิจิทัล (DSP)
ที่อยู่ในผลิตภัณฑ์ (เช่น โทรศัพท์หรือแท็บเล็ต) ปัจจัยขับเคลื่อนของวงการเหล่านี้
อุปกรณ์ต้องเป็นไปตาม NN HAL อินเทอร์เฟซจะระบุอยู่ใน HAL
ไฟล์คำจำกัดความใน
hardware/interfaces/neuralnetworks
มีการแสดงภาพขั้นตอนทั่วไปของอินเทอร์เฟซระหว่างเฟรมเวิร์กและไดรเวอร์ ในรูปที่ 1
รูปที่ 1 การไหลของโครงข่ายระบบประสาทเทียม
การเริ่มต้น
ในช่วงเริ่มต้น เฟรมเวิร์กจะค้นหาความสามารถของคนขับเพื่อดูความสามารถของไดรเวอร์โดยใช้
IDevice::getCapabilities_1_3
โครงสร้าง @1.3::Capabilities
มีข้อมูลทุกประเภทและ
แสดงประสิทธิภาพที่ไม่ตัดออกโดยใช้เวกเตอร์
ในการกำหนดวิธีจัดสรรการคำนวณให้กับอุปกรณ์ที่ใช้ได้ จะใช้ความสามารถในการทำความเข้าใจว่า ผู้ขับขี่แต่ละคนสามารถดำเนินการอย่างมีประสิทธิภาพได้ หากต้องการให้ข้อมูลนี้ คนขับต้องระบุตัวเลขประสิทธิภาพมาตรฐานตามการดำเนินการ ของภาระงานอ้างอิง
เพื่อระบุค่าที่คนขับแสดงผลตาม
IDevice::getCapabilities_1_3
โปรดใช้แอปเปรียบเทียบ NNAPI เพื่อวัด
ประสิทธิภาพของข้อมูล
ประเภทต่างๆ ที่เกี่ยวข้อง MobileNet v1 และ v2, asr_float
และแนะนำให้ใช้โมเดล tts_float
สำหรับการวัดประสิทธิภาพแบบ 32 บิต
ค่าทศนิยมและโมเดลที่ควอนไตซ์ของ MobileNet v1 และ v2
แนะนำสำหรับค่าที่แปลงเป็น 8 บิต สำหรับข้อมูลเพิ่มเติม โปรดดู
ชุดทดสอบแมชชีนเลิร์นนิงของ Android
ใน Android 9 และต่ำกว่า โครงสร้าง Capabilities
จะรวมประสิทธิภาพของไดรเวอร์
ข้อมูลเฉพาะสำหรับจุดลอยตัวและ Tensor ที่เล็กลง และไม่รวมถึง
ประเภทข้อมูลสเกลาร์
ในกระบวนการเริ่มต้น เฟรมเวิร์กอาจค้นหาข้อมูลเพิ่มเติม
โดยใช้
IDevice::getType
IDevice::getVersionString
IDevice:getSupportedExtensions
และ
IDevice::getNumberOfCacheFilesNeeded
ระหว่างการรีบูตผลิตภัณฑ์ เฟรมเวิร์กจะคาดหวังคำค้นหาทั้งหมดที่อธิบายไว้ในบทความนี้ เพื่อรายงานค่าเดียวกันสำหรับไดรเวอร์ที่ระบุเสมอ ไม่เช่นนั้น แอป การใช้ไดรเวอร์นั้นอาจทำให้ประสิทธิภาพการทำงานลดลงหรือทำงานไม่ถูกต้อง
การรวบรวม
โดยเฟรมเวิร์กจะกำหนดอุปกรณ์ที่จะใช้เมื่อได้รับคำขอจาก แอป ใน Android 10 แอปจะค้นพบ และระบุอุปกรณ์ ที่เฟรมเวิร์กเลือกใช้ สำหรับข้อมูลเพิ่มเติม โปรดดู การค้นหาและการให้สิทธิ์อุปกรณ์
ในเวลาคอมไพล์โมเดล เฟรมเวิร์กจะส่งโมเดลไปยังผู้สมัครแต่ละราย
คนขับโดยการโทร
IDevice::getSupportedOperations_1_3
ไดรเวอร์แต่ละตัวแสดงผลอาร์เรย์ของบูลีนที่ระบุ
การดำเนินการของโมเดลได้รับการสนับสนุน คนขับสามารถระบุได้
สนับสนุนการดำเนินการหนึ่งๆ ด้วยเหตุผลหลายประการ เช่น
- ไดรเวอร์ไม่รองรับประเภทข้อมูลนี้
- ไดรเวอร์รองรับการดำเนินการที่มีพารามิเตอร์อินพุตที่ระบุเท่านั้น สำหรับ ตัวอย่างเช่น ไดรเวอร์อาจรองรับ 3x3 และ 5x5 แต่ไม่รองรับ Convolution 7x7
- ไดรเวอร์มีข้อจำกัดด้านหน่วยความจำทำให้ไม่สามารถจัดการได้ในวงกว้าง กราฟหรืออินพุต
ระหว่างการคอมไพล์ อินพุต เอาต์พุต และตัวถูกดำเนินการภายในของโมเดล โดยที่
อธิบายไว้ใน
OperandLifeTime
อาจมีมิติข้อมูลหรืออันดับที่ไม่รู้จักได้ สำหรับข้อมูลเพิ่มเติม โปรดดู
รูปร่างเอาต์พุต
เฟรมเวิร์กนี้จะสั่งให้ผู้ขับขี่ที่เลือกแต่ละรายเตรียมพร้อมสำหรับการดำเนินการเซตย่อย
โมเดลด้วยการเรียก
IDevice::prepareModel_1_3
จากนั้นไดรเวอร์แต่ละตัวจะรวบรวมชุดย่อยของตัวเอง เช่น คนขับอาจ
สร้างโค้ดหรือสร้างสำเนาของน้ำหนักที่เรียงลำดับใหม่ เนื่องจากอาจมี
ระยะเวลาอย่างมากระหว่างการคอมไพล์โมเดลและ
การดำเนินการตามคำขอ ทรัพยากรต่างๆ เช่น หน่วยหน่วยความจำของอุปกรณ์ขนาดใหญ่ไม่ควร
ระหว่างการคอมไพล์
เมื่อสำเร็จ คนขับได้ส่งคืน @1.3::IPreparedModel
แฮนเดิล ถ้าไดรเวอร์แสดงผลรหัสความล้มเหลวเมื่อเตรียมชุดย่อยของ
เฟรมเวิร์กนี้จะเรียกใช้ทั้งโมเดลบน CPU
ในการลดเวลาที่ใช้ในการคอมไพล์เมื่อแอปเริ่มทำงาน ผู้ขับขี่สามารถ อาร์ติแฟกต์การคอมไพล์แคช สำหรับข้อมูลเพิ่มเติม โปรดดู การรวบรวม การแคช
การลงมือปฏิบัติ
เมื่อแอปขอให้เฟรมเวิร์กดำเนินการตามคำขอ เฟรมเวิร์กจะเรียกใช้
เวลา
IPreparedModel::executeSynchronously_1_3
เมธอด HAL โดยค่าเริ่มต้นเพื่อดำเนินการแบบซิงโครนัสบนโมเดลที่เตรียมไว้
คำขอยังสามารถดำเนินการแบบไม่พร้อมกันโดยใช้
execute_1_3
เมธอด
executeFenced
(ดูการดำเนินการ Fenced)
หรือดำเนินการโดยใช้
การถ่ายภาพอัจฉริยะ
การเรียกใช้การดำเนินการแบบซิงโครนัสช่วยปรับปรุงประสิทธิภาพและลดการแยกชุดข้อความ โอเวอร์เฮดเมื่อเทียบกับการเรียกใช้แบบไม่พร้อมกัน เนื่องจากการควบคุมจะส่งกลับไปยัง ของกระบวนการของแอปก็ต่อเมื่อการดำเนินการเสร็จสมบูรณ์เท่านั้น ซึ่งหมายความว่า ไม่ต้องใช้กลไกแยกต่างหากเพื่อแจ้งกระบวนการของแอปว่า การดำเนินการเสร็จสิ้นแล้ว
เมื่อใช้เมธอด execute_1_3
แบบไม่พร้อมกัน ตัวควบคุมจะกลับไปที่
กระบวนการของแอปหลังจากที่เริ่มการดำเนินการแล้ว และคนขับต้องแจ้ง
เมื่อการดำเนินการเสร็จสมบูรณ์ โดยใช้
@1.3::IExecutionCallback
พารามิเตอร์ Request
ที่ส่งผ่านไปยังเมธอดดำเนินการจะแสดงรายการอินพุตและเอาต์พุต
ตัวถูกดำเนินการที่ใช้สำหรับการดำเนินการ หน่วยความจำที่เก็บข้อมูลตัวถูกดำเนินการจะต้อง
ใช้ลำดับหลักแถวที่มีมิติข้อมูลแรกทำซ้ำช้าที่สุดและไม่มี
ระยะห่างจากขอบที่ท้ายแถว หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับประเภทของตัวถูกดำเนินการ
ดู
Operand
สำหรับไดรเวอร์ NN HAL 1.2 ขึ้นไป เมื่อมีการส่งคำขอ เสร็จสมบูรณ์ สถานะข้อผิดพลาด รูปร่างเอาต์พุต และ ข้อมูลเวลาจะแสดงกลับมา เฟรมเวิร์กนี้ได้ง่ายขึ้น ในระหว่างการดำเนินการ เอาต์พุตหรือตัวถูกดำเนินการภายในของโมเดลสามารถ มีมิติข้อมูลหรืออันดับที่ไม่รู้จักอย่างน้อยหนึ่งรายการ เมื่อมีเอาต์พุตอย่างน้อย 1 รายการ ตัวถูกดำเนินการมีมิติข้อมูลหรืออันดับที่ไม่รู้จัก ไดรเวอร์ต้องส่งคืน ข้อมูลเอาต์พุตที่มีขนาดแบบไดนามิก
สำหรับไดรเวอร์ที่มี NN HAL 1.1 หรือต่ำกว่า สถานะข้อผิดพลาดจะปรากฏเมื่อ เสร็จสมบูรณ์แล้ว มิติข้อมูลสำหรับตัวถูกดำเนินการของอินพุตและเอาต์พุตต้องครบถ้วนสมบูรณ์ ที่ระบุไว้เพื่อให้การดำเนินการเสร็จสมบูรณ์ ตัวถูกดำเนินการภายใน มีมิติข้อมูลที่ไม่รู้จักอย่างน้อยหนึ่งรายการ แต่ต้องระบุอันดับ
สำหรับคำขอของผู้ใช้ที่ครอบคลุมไดรเวอร์หลายตัว เฟรมเวิร์กนี้มีหน้าที่ การสงวนหน่วยความจำระดับกลางและสำหรับการเรียงลำดับการเรียกไปยังไดรเวอร์แต่ละตัว
สามารถเริ่มคำขอหลายรายการพร้อมกันได้ใน
@1.3::IPreparedModel
ไดรเวอร์สามารถดำเนินการกับคำขอพร้อมกันหรือเรียงลำดับการดำเนินการได้
เฟรมเวิร์กนี้สามารถขอให้ผู้ขับขี่เก็บโมเดลที่เตรียมไว้ได้มากกว่า 1 รายการ สำหรับ
เช่น เตรียมโมเดล m1
เตรียม m2
ดำเนินการตามคำขอ r1
ใน m1
ดำเนินการ
r2
ใน m2
เรียกใช้ r3
ใน m1
เรียกใช้ r4
ใน m2
รุ่น (ตามที่อธิบายไว้ใน
ล้างข้อมูล) m1
และเผยแพร่ m2
เพื่อหลีกเลี่ยงการดำเนินการครั้งแรกอย่างช้าๆ ซึ่งอาจส่งผลให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี (สำหรับ เช่น เฟรมแรกกระตุก) คนขับควรเริ่มต้นการทำงานส่วนใหญ่ ในขั้นตอนการรวบรวม การเริ่มต้นในการดำเนินการครั้งแรกควรจำกัดไว้ที่ การดำเนินการที่ส่งผลเสียต่อประสิทธิภาพของระบบเมื่อดำเนินการตั้งแต่เนิ่นๆ เช่น การจองบัฟเฟอร์ชั่วคราวขนาดใหญ่หรือการเพิ่มอัตรานาฬิกาของอุปกรณ์ ไดรเวอร์ที่สามารถเตรียมโมเดลที่ทำงานพร้อมกันในจำนวนจำกัดอาจมี ในการเริ่มต้น
ใน Android 10 ขึ้นไป ในกรณีที่มี การดำเนินการด้วยโมเดลที่จัดเตรียมไว้เดียวกัน ดำเนินการตามลำดับอย่างรวดเร็ว ลูกค้าอาจเลือกใช้การดำเนินการ วัตถุระเบิดเพื่อสื่อสารระหว่างการทำงานของแอปและไดรเวอร์ สำหรับข้อมูลเพิ่มเติม ดูข้อมูลได้ที่ Burst Executions และ Fast Message Queues
เพื่อปรับปรุงประสิทธิภาพสำหรับการดำเนินการหลายครั้งต่อเนื่องกันอย่างรวดเร็ว ผู้ขับขี่ สามารถเก็บบัฟเฟอร์ชั่วคราวหรือเพิ่มอัตรานาฬิกา กำลังสร้าง Watchdog ขอแนะนำให้เทรดปล่อยทรัพยากรหากไม่มีการสร้างคำขอใหม่หลังจาก ระยะเวลาที่กำหนด
รูปร่างเอาต์พุต
สำหรับคำขอที่ตัวถูกดำเนินการเอาต์พุตอย่างน้อย 1 รายการไม่มีมิติข้อมูลทั้งหมด
ไดรเวอร์ต้องระบุรายการรูปร่างเอาต์พุตที่มีฟังก์ชัน
ข้อมูลมิติข้อมูลสำหรับตัวถูกดำเนินการของเอาต์พุตแต่ละรายการหลังการดำเนินการ สำหรับข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับมิติข้อมูล โปรดดู
OutputShape
หากการดำเนินการไม่สำเร็จเนื่องจากมีบัฟเฟอร์เอาต์พุตขนาดเล็ก ไดรเวอร์ต้อง ระบุว่าตัวถูกดำเนินการของเอาต์พุตใดมีขนาดบัฟเฟอร์ไม่เพียงพอในรายการ และควรรายงานข้อมูลด้านมิติให้มากที่สุดเท่าที่จะเป็นไปได้ ใช้ศูนย์สำหรับมิติข้อมูลที่ไม่รู้จัก
ช่วงเวลา
ใน Android 10 แอปจะขอการดำเนินการได้
เวลาที่แอป
ได้ระบุอุปกรณ์เครื่องเดียวที่จะใช้ในระหว่างกระบวนการคอมไพล์ สำหรับ
ดูรายละเอียดได้ที่
MeasureTiming
และการค้นพบและการกำหนดอุปกรณ์
ในกรณีนี้
ไดรเวอร์ NN HAL 1.2 ต้องวัดระยะเวลาการดำเนินการหรือรายงาน UINT64_MAX
(เพื่อ
แสดงว่าไม่มีระยะเวลา) เมื่อดำเนินการตามคำขอ ผู้ขับขี่
ควรลดผลกระทบด้านประสิทธิภาพใดๆ ซึ่งเกิดจากการวัดการดำเนินการ
คนขับรายงานระยะเวลาต่อไปนี้เป็นไมโครวินาทีใน
Timing
โครงสร้าง:
- เวลาดำเนินการในอุปกรณ์: ไม่รวมเวลาดำเนินการใน ซึ่งทำงานบนโปรเซสเซอร์โฮสต์
- เวลาดำเนินการในไดรเวอร์: รวมเวลาดำเนินการในอุปกรณ์
ระยะเวลาเหล่านี้ต้องรวมเวลาเมื่อการดำเนินการถูกระงับ ตัวอย่างเช่น เมื่อการดำเนินการนั้นถูกขัดจังหวะชั่วคราวโดยงานอื่น หรือเมื่อ กำลังรอให้แหล่งข้อมูลพร้อมใช้งาน
เมื่อคนขับไม่ได้ถูกขอให้วัดระยะเวลาการดำเนินการ หรือเมื่อ
แต่มีข้อผิดพลาดในการดำเนินการ ผู้ขับขี่ต้องรายงานระยะเวลาเป็น
UINT64_MAX
แม้ว่าพนักงานขับรถจะถูกขอให้วัดปริมาณการประหารชีวิตก็ตาม
แต่สามารถรายงานเวลา UINT64_MAX
ในอุปกรณ์ หรือเวลาใน
หรือทั้ง 2 อย่าง เมื่อผู้ขับขี่รายงานระยะเวลาทั้งสองเป็นค่าอื่นที่ไม่ใช่
UINT64_MAX
เวลาดำเนินการในไดรเวอร์ต้องเท่ากับหรือเกินเวลาบน
อุปกรณ์
การดำเนินการแบบจำกัด
ใน Android 11 นั้น NNAPI อนุญาตการดำเนินการเพื่อรอ
รายการแฮนเดิล sync_fence
และแสดงผลออบเจ็กต์ sync_fence
หรือไม่ก็ได้
จะได้รับสัญญาณเมื่อการดำเนินการเสร็จสมบูรณ์ ซึ่งช่วยลดค่าใช้จ่ายสำหรับ
โมเดลลำดับและกรณีการใช้งานสตรีมมิง การดำเนินการแบบ Fenced ยังช่วยเพิ่ม
ความสามารถในการทำงานร่วมกับคอมโพเนนต์อื่นๆ ที่มีประสิทธิภาพซึ่งสามารถส่งสัญญาณหรือรอให้
sync_fence
ดูข้อมูลเพิ่มเติมเกี่ยวกับ sync_fence
ได้ที่
เฟรมเวิร์กการซิงค์
ในการดำเนินการแบบจำกัด เฟรมเวิร์กนี้
IPreparedModel::executeFenced
ในการเรียกใช้การดำเนินการแบบ Fenced แบบไม่พร้อมกันบนโมเดลที่เตรียมไว้
เวกเตอร์ของขีดจำกัดการซิงค์เพื่อรอ หากงานแบบไม่พร้อมกันเสร็จก่อน
การเรียกกลับมา แฮนเดิลที่ว่างเปล่าสำหรับ sync_fence
ได้ CANNOT TRANSLATE
ต้องส่งคืนออบเจ็กต์ IFencedExecutionCallback
ด้วยเพื่อให้เฟรมเวิร์ก
เพื่อค้นหาข้อมูลสถานะข้อผิดพลาดและระยะเวลา
หลังจากการดำเนินการเสร็จสมบูรณ์ จะมี 2 สิ่งต่อไปนี้
ค่า timing
การวัดระยะเวลาของการดำเนินการ สามารถค้นหาได้จาก
IFencedExecutionCallback::getExecutionInfo
timingLaunched
: ระยะเวลาตั้งแต่ตอนที่เรียกexecuteFenced
ถึงเมื่อexecuteFenced
ส่งสัญญาณsyncFence
ที่แสดงผลtimingFenced
: ระยะเวลานับตั้งแต่ที่รั้วซิงค์ทั้งหมด ที่การรอเรียกใช้จะได้รับสัญญาณเมื่อมีสัญญาณexecuteFenced
syncFence
ที่แสดงผล
ควบคุมโฟลว์
สำหรับอุปกรณ์ที่ใช้ Android 11 ขึ้นไป NNAPI
ประกอบด้วยการดำเนินการขั้นตอนการควบคุม 2 รายการคือ IF
และ WHILE
ที่ใช้โมเดลอื่นๆ
เป็นอาร์กิวเมนต์ และดำเนินการอย่างมีเงื่อนไข (IF
) หรือซ้ำๆ (WHILE
) สำหรับ
ข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้สิ่งนี้ โปรดดู
ควบคุมโฟลว์
คุณภาพของการบริการ
ใน Android 11 NNAPI ประกอบด้วยคุณภาพที่ดีขึ้นของ บริการ (QoS) โดยการอนุญาตให้แอประบุลำดับความสำคัญที่เกี่ยวข้องของบริการ ระยะเวลาสูงสุดที่คาดไว้ในการเตรียมโมเดล และ ระยะเวลาสูงสุดที่คาดไว้เพื่อให้การดำเนินการเสร็จสมบูรณ์ สำหรับ ข้อมูลเพิ่มเติม โปรดดู คุณภาพของการบริการ
ทำความสะอาดข้อมูล
เมื่อแอปใช้โมเดลที่เตรียมเสร็จแล้ว เฟรมเวิร์กจะเผยแพร่
มีการอ้างอิงถึง
@1.3::IPreparedModel
ออบเจ็กต์ เมื่อไม่มีการอ้างอิงออบเจ็กต์ IPreparedModel
แล้ว
โดยอัตโนมัติในบริการไดรเวอร์ที่สร้างรหัสดังกล่าว เฉพาะรุ่น
ในขณะนี้คุณสามารถเรียกคืนทรัพยากรได้ในกรณีที่ผู้ขับขี่ใช้
ผู้ทำลาย หากบริการไดรเวอร์ต้องการให้ออบเจ็กต์ IPreparedModel
เป็น
ถูกทำลายโดยอัตโนมัติเมื่อไคลเอ็นต์ไม่จำเป็นต้องใช้อีกต่อไป แท็กนั้นจะต้องไม่เก็บ
การอ้างอิงไปยังออบเจ็กต์ IPreparedModel
หลังออบเจ็กต์ IPreparedeModel
ได้รับการส่งคืนผ่านทาง
IPreparedModelCallback::notify_1_3
การใช้ CPU
ไดรเวอร์ควรใช้ CPU เพื่อตั้งค่าการคำนวณ ผู้ขับขี่ไม่ควร ใช้ CPU ในการคำนวณกราฟ เนื่องจากจะรบกวน ความสามารถของเฟรมเวิร์กในการจัดสรรงานอย่างถูกต้อง คนขับควรรายงาน ที่จัดการกับเฟรมเวิร์กไม่ได้ และให้เฟรมเวิร์กจัดการ พักผ่อน
เฟรมเวิร์กนี้จะมีการใช้ CPU สำหรับการดำเนินการ NNAPI ทั้งหมด ยกเว้น การดำเนินการที่กำหนดโดยผู้ให้บริการ สำหรับข้อมูลเพิ่มเติม โปรดดู ส่วนขยายผู้ให้บริการ
การดำเนินการที่เปิดตัวใน Android 10 (API ระดับ 29) ติดตั้ง CPU อ้างอิงเพื่อยืนยันการทดสอบ CTS และ VTS เท่านั้น ถูกต้อง การติดตั้งใช้งานที่เพิ่มประสิทธิภาพซึ่งรวมอยู่ในแมชชีนเลิร์นนิงบนอุปกรณ์เคลื่อนที่ แนะนำให้ใช้เฟรมเวิร์กมากกว่าการใช้ CPU ของ NNAPI
ฟังก์ชันยูทิลิตี
ฐานของโค้ด NNAPI มีฟังก์ชันยูทิลิตีที่ไดรเวอร์สามารถใช้ได้ บริการต่างๆ
frameworks/ml/nn/common/include/Utils.h
มีฟังก์ชันยูทิลิตีต่างๆ เช่น ฟังก์ชันที่ใช้สำหรับบันทึกและ
สำหรับการแปลงระหว่าง NN HAL เวอร์ชันต่างๆ
วิดีโอบล็อก:
VLOG
คือมาโคร Wrapper รอบๆLOG
ของ Android ซึ่งจะ จะบันทึกข้อความหากมีการตั้งค่าแท็กที่เหมาะสมในdebug.nn.vlog
initVLogMask()
ต้องถูกเรียกก่อนที่จะเรียกไปยังVLOG
มาโครVLOG_IS_ON
สามารถ ใช้เพื่อตรวจสอบว่าVLOG
เปิดใช้อยู่ในขณะนี้หรือไม่ ซึ่งเป็นการเปิดใช้การบันทึกที่ซับซ้อน รหัสเพื่อให้ข้ามได้ถ้าไม่จำเป็น ค่าของพร็อพเพอร์ตี้ต้องเป็น ดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้- สตริงว่างซึ่งบ่งชี้ว่าไม่ต้องบันทึก
- โทเค็น
1
หรือall
ซึ่งบ่งชี้ว่าต้องบันทึกทั้งหมด - รายการแท็ก โดยคั่นด้วยเว้นวรรค คอมมา หรือโคลอน
เพื่อระบุว่าต้องบันทึกข้อมูลใด แท็กคือ
compilation
cpuexe
,driver
,execution
,manager
และmodel
compliantWithV1_*
: แสดงผลtrue
หากแปลงออบเจ็กต์ NN HAL ได้ ไปยัง HAL เวอร์ชันเดียวกัน โดยไม่สูญเสียข้อมูล สำหรับ เช่น การเรียกcompliantWithV1_0
ในV1_2::Model
จะแสดงผลfalse
หาก โมเดลนี้มีประเภทการดำเนินการที่ใช้ใน NN HAL 1.1 หรือ NN HAL 1.2convertToV1_*
: แปลงออบเจ็กต์ NN HAL จากเวอร์ชันหนึ่งเป็นอีกเวอร์ชันหนึ่ง ระบบจะบันทึกคำเตือนหาก Conversion ส่งผลให้ข้อมูลสูญหาย ( คือ หากเวอร์ชันใหม่ของประเภทไม่สามารถแทนค่าได้ครบถ้วน)ความสามารถ:
nonExtensionOperandPerformance
และupdate
สามารถช่วยสร้างCapabilities::operandPerformance
ด้วยกำลังค้นหาพร็อพเพอร์ตี้ของประเภท:
isExtensionOperandType
,isExtensionOperationType
nonExtensionSizeOfData
nonExtensionOperandSizeOfData
nonExtensionOperandTypeIsScalar
tensorHasUnspecifiedDimensions
frameworks/ml/nn/common/include/ValidateHal.h
ไฟล์มีฟังก์ชันยูทิลิตีสำหรับการตรวจสอบว่าออบเจ็กต์ NN HAL ถูกต้อง
ตามข้อกำหนดของเวอร์ชัน HAL
validate*
: แสดงผลtrue
หากออบเจ็กต์ NN HAL ถูกต้อง ตามข้อกำหนดของเวอร์ชัน HAL ประเภท OEM และประเภทส่วนขยาย ยังไม่ได้ตรวจสอบ ตัวอย่างเช่นvalidateModel
จะแสดงผลfalse
หากพารามิเตอร์ โมเดลมีการดำเนินการที่อ้างอิงดัชนีตัวถูกดำเนินการที่ไม่ ที่มีอยู่ หรือการดำเนินการที่ไม่รองรับในเวอร์ชัน HAL ดังกล่าว
frameworks/ml/nn/common/include/Tracing.h
มีมาโครเพื่อให้เพิ่มได้ง่ายขึ้น
ข้อมูล systracing เป็นโค้ดโครงข่ายระบบประสาทเทียม
ตัวอย่างเช่น ดูการเรียกมาโคร NNTRACE_*
ใน
ไดรเวอร์ตัวอย่าง
frameworks/ml/nn/common/include/GraphDump.h
ไฟล์มีฟังก์ชันยูทิลิตีเพื่อถ่ายโอนเนื้อหาของ Model
ในรูปแบบกราฟิก
ฟอร์มสำหรับแก้ไขข้อบกพร่อง
graphDump
: เขียนการนำเสนอโมเดลใน Graphviz (.dot
) จัดรูปแบบเป็นสตรีมที่ระบุ (หากมี) หรือไปยัง Logcat (หากระบุ) ไม่ได้ให้สตรีม)
การตรวจสอบความถูกต้อง
หากต้องการทดสอบการใช้งาน NNAPI ให้ใช้การทดสอบ VTS และ CTS ที่รวมอยู่ใน เฟรมเวิร์กของ Android VTS ทำงานกับคนขับของคุณโดยตรง (โดยไม่ใช้ ของเฟรมเวิร์ก) ขณะที่ CTS ดำเนินการผ่านเฟรมเวิร์กโดยอ้อม เหล่านี้ ทดสอบเมธอด API แต่ละเมธอด และตรวจสอบว่าการดำเนินการทั้งหมดที่รองรับโดย ไดรเวอร์ทำงานได้อย่างถูกต้อง และแสดงผลลัพธ์ที่เป็นไปตามข้อกำหนดความถูกต้องแม่นยำ
ข้อกำหนดความแม่นยำใน CTS และ VTS สำหรับ NNAPI มีดังนี้
จุดลอย: abs(คาดหวัง - จริง) <= atol + rtol * abs(คาดหวัง); โดยมี
- สำหรับ fp32, atol = 1e-5f, rtol = 5.0f * 1.1920928955078125e-7
- สำหรับ fp16 atol = rtol = 5.0f * 0.0009765625f
วัดปริมาณ: ปิดทีละรายการ (ยกเว้น
mobilenet_quantized
ทีละ 3)บูลีน: การทำงานแบบตรงทั้งหมด
วิธีหนึ่งของการทดสอบ CTS NNAPI คือการสร้างกราฟเชิงสุ่มแบบตายตัว
ที่ใช้ในการทดสอบและเปรียบเทียบผลการปฏิบัติการจากคนขับแต่ละคนกับ
การใช้การอ้างอิง NNAPI สำหรับไดรเวอร์ที่มี NN HAL 1.2 ขึ้นไป หาก
ผลลัพธ์ไม่เป็นไปตามเกณฑ์ความแม่นยํา CTS จะรายงานข้อผิดพลาดและบันทึกข้อมูล
ไฟล์ข้อมูลจำเพาะสำหรับโมเดลที่ล้มเหลวภายใต้ /data/local/tmp
สำหรับการแก้ไขข้อบกพร่อง
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเกณฑ์ความแม่นยำ โปรดดูที่
TestRandomGraph.cpp
และ
TestHarness.h
การทดสอบ Fuzz
วัตถุประสงค์ของการทดสอบความไม่แน่นอนคือ เพื่อค้นหาข้อขัดข้อง การยืนยัน การละเมิดหน่วยความจำ หรือลักษณะการทำงานทั่วไปที่ไม่ระบุในโค้ดภายใต้การทดสอบเนื่องจากปัจจัยต่างๆ เช่น ข้อมูลที่ไม่คาดคิด สำหรับการทดสอบ NNAPI Fuzz นั้น Android ใช้การทดสอบที่ยึดตาม libFuzzer ซึ่งเป็น มีประสิทธิภาพในการกระจายข้อมูล เนื่องจากใช้ความครอบคลุมของกรณีการทดสอบก่อนหน้านี้เพื่อ สร้างอินพุตแบบสุ่มใหม่ ตัวอย่างเช่น libFuzzer สนับสนุนกรอบการทดสอบที่ทำงาน เกี่ยวกับโค้ดใหม่ๆ ได้ วิธีนี้ช่วยลดเวลาในการทดสอบในการค้นหา โค้ดที่เป็นปัญหา
หากต้องการดำเนินการทดสอบ Fuzz เพื่อตรวจสอบการใช้งานไดรเวอร์ ให้แก้ไข
frameworks/ml/nn/runtime/test/android_fuzzing/DriverFuzzTest.cpp
ในยูทิลิตีการทดสอบ libneuralnetworks_driver_fuzzer
ที่พบใน AOSP เพื่อรวม
รหัสไดรเวอร์ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบ NNAPI Fuzz ที่
frameworks/ml/nn/runtime/test/android_fuzzing/README.md
ความปลอดภัย
เนื่องจากกระบวนการของแอปจะสื่อสารกับกระบวนการของผู้ขับโดยตรง
ผู้ขับขี่ต้องตรวจสอบความถูกต้องของอาร์กิวเมนต์ของการเรียกที่ได้รับ การตรวจสอบความถูกต้องนี้
ได้รับการยืนยันโดย VTS รหัสการตรวจสอบอยู่ใน
frameworks/ml/nn/common/include/ValidateHal.h
ไดรเวอร์ควรตรวจสอบด้วยว่าแอปจะไม่รบกวนแอปอื่นๆ เมื่อใช้อุปกรณ์เดียวกัน
ชุดทดสอบแมชชีนเลิร์นนิงของ Android
ชุดทดสอบแมชชีนเลิร์นนิงของ Android (MLTS) เป็นเกณฑ์มาตรฐาน NNAPI ที่รวมอยู่ใน CTS และ VTS สำหรับการตรวจสอบความถูกต้องของโมเดลจริงในอุปกรณ์ของผู้ให้บริการ เพื่อเปรียบเทียบผลของเวลาในการตอบสนองและความแม่นยำ และเปรียบเทียบปัจจัยที่ขับเคลื่อนวงการ ผลลัพธ์ที่มี ผลลัพธ์โดยใช้ TF Lite ที่ทำงานอยู่บน CPU สำหรับโมเดลและชุดข้อมูลเดียวกัน เพื่อให้แน่ใจว่าผู้ขับจะไม่มีความแม่นยำ แย่กว่าการใช้การอ้างอิง CPU
นักพัฒนาแพลตฟอร์ม Android ยังใช้ MLTS ในการประเมินเวลาในการตอบสนองและความแม่นยำด้วย ของผู้ขับขี่ได้
ดูการเปรียบเทียบ NNAPI ได้จาก 2 โปรเจ็กต์ใน AOSP ดังนี้
platform/test/mlts/benchmark
(แอปเปรียบเทียบ)platform/test/mlts/models
(โมเดลและชุดข้อมูล)
โมเดลและชุดข้อมูล
การเปรียบเทียบ NNAPI ใช้โมเดลและชุดข้อมูลต่อไปนี้
- MobileNetV1 Float และ u8 ที่ควอนตัมในขนาดต่างๆ รันกับ ส่วนย่อยขนาดเล็ก (1,500 ภาพ) ของ Open Images Dataset v4
- MobileNetV2 Float และ u8 ที่ควอนตัมในขนาดที่ต่างกัน รันกับ ส่วนย่อยขนาดเล็ก (1,500 ภาพ) ของ Open Images Dataset v4
- โมเดลเสียงสำหรับการอ่านออกเสียงข้อความที่อิงตามหน่วยความจำระยะสั้น (LSTM) ที่ทำงานกับชุดย่อยของ CMU อาร์กติก
- โมเดลอะคูสติกจาก LSTM สำหรับการรู้จำคำพูดอัตโนมัติวิ่งแข่ง กลุ่มย่อยเล็กๆ ของชุดข้อมูล LibriSpeech
สำหรับข้อมูลเพิ่มเติม โปรดดู
platform/test/mlts/models
การทดสอบความเครียด
ชุดทดสอบแมชชีนเลิร์นนิงของ Android มีชุดการทดสอบข้อขัดข้อง ตรวจสอบความยืดหยุ่นของผู้ขับขี่เมื่อเจอสภาวะการใช้งานหนักหรือในมุมถนน กรณีของลูกค้า พฤติกรรมของคุณ
การทดสอบข้อขัดข้องทั้งหมดจะมีฟีเจอร์ต่อไปนี้
- การตรวจหาการค้าง: หากไคลเอ็นต์ NNAPI ค้างระหว่างการทดสอบ
การทดสอบล้มเหลวโดยมีเหตุผลที่ล้มเหลว
HANG
และชุดทดสอบ ย้ายไปยังการทดสอบถัดไป - การตรวจจับข้อขัดข้องของไคลเอ็นต์ NNAPI: การทดสอบที่รอดพ้นจากข้อขัดข้องและการทดสอบของไคลเอ็นต์
ล้มเหลวโดยมีเหตุผลความล้มเหลว
CRASH
- การตรวจจับการชน: การทดสอบสามารถตรวจจับการชนของคนขับ
ที่ทำให้การเรียก NNAPI ล้มเหลว โปรดทราบว่าอาจเกิดข้อขัดข้องใน
กระบวนการในไดรเวอร์ที่ไม่ทำให้ NNAPI ล้มเหลวและไม่ทำให้เกิดการทดสอบ
ล้มเหลว ขอแนะนำให้เรียกใช้
tail
เพื่อรองรับความล้มเหลวประเภทนี้ ในบันทึกระบบเพื่อหาข้อผิดพลาดหรือข้อขัดข้องที่เกี่ยวกับไดรเวอร์ - การกำหนดเป้าหมายของ Accelerator ที่มีอยู่ทั้งหมด: การทดสอบจะทำงานกับ ของผู้ขับที่พร้อมใช้งาน
การทดสอบข้อขัดข้องทั้งหมดมีผลลัพธ์ที่เป็นไปได้ 4 อย่างดังต่อไปนี้
SUCCESS
: ดำเนินการเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดFAILURE
: ดำเนินการไม่สำเร็จ โดยทั่วไปจะเกิดจากความล้มเหลว ในการทดสอบโมเดล ซึ่งบ่งชี้ว่าไดรเวอร์ไม่สามารถคอมไพล์หรือปฏิบัติการ โมเดลHANG
: ขั้นตอนการทดสอบไม่ตอบสนองCRASH
: ขั้นตอนการทดสอบขัดข้อง
ดูข้อมูลเพิ่มเติมเกี่ยวกับการทดสอบภาวะวิกฤตและรายการทั้งหมดของการทดสอบข้อขัดข้องได้ที่
platform/test/mlts/benchmark/README.txt
ใช้ MLTS
วิธีใช้ MLTS
- เชื่อมต่ออุปกรณ์เป้าหมายกับเวิร์กสเตชันและตรวจสอบว่า
เข้าถึงได้ผ่าน
adb
ส่งออกอุปกรณ์เป้าหมาย
ANDROID_SERIAL
ตัวแปรสภาพแวดล้อมหากมีการเชื่อมต่ออุปกรณ์มากกว่า 1 เครื่อง cd
ลงในไดเรกทอรีแหล่งที่มาระดับบนสุดของ Androidsource build/envsetup.sh lunch aosp_arm-userdebug # Or aosp_arm64-userdebug if available. ./test/mlts/benchmark/build_and_run_benchmark.sh
เมื่อสิ้นสุดการทำงานเปรียบเทียบ ผลลัพธ์จะแสดงเป็นหน้า HTML และส่งไปยัง
xdg-open
สำหรับข้อมูลเพิ่มเติม โปรดดู
platform/test/mlts/benchmark/README.txt
เวอร์ชัน HAL ของโครงข่ายระบบประสาทเทียม
ส่วนนี้จะอธิบายการเปลี่ยนแปลงที่เริ่มใช้ใน Android และ Neural เวอร์ชัน HAL ของเครือข่าย
Android 11
Android 11 เปิดตัว NN HAL 1.3 ซึ่งรวมถึง ดังต่อไปนี้
- รองรับการวัดปริมาณ 8 บิตที่มีการรับรองใน NNAPI เพิ่ม
TENSOR_QUANT8_ASYMM_SIGNED
ประเภทตัวถูกดำเนินการ ไดรเวอร์ที่มี NN HAL 1.3 ที่สนับสนุน การดำเนินการที่มีการวัดปริมาณที่ไม่มีการรับรองต้องรองรับตัวแปรที่ลงนามด้วย ของการดำเนินการเหล่านั้น เมื่อใช้เวอร์ชันส่วนใหญ่ที่มีการรับรองและไม่มีการรับรอง การดำเนินการเชิงปริมาณ ตัวขับเคลื่อนจะต้องให้ผลลัพธ์เดียวกันสูงสุด เป็น 128 ข้อกำหนดนี้มีข้อยกเว้น 5 ข้อ ได้แก่CAST
HASHTABLE_LOOKUP
,LSH_PROJECTION
,PAD_V2
และQUANTIZED_16BIT_LSTM
การดำเนินการQUANTIZED_16BIT_LSTM
ไม่รองรับตัวถูกดำเนินการที่ลงชื่อและ การดำเนินการอื่นๆ อีก 4 รายการรองรับการวัดปริมาณที่ลงนามแล้ว แต่ไม่ต้องใช้ ให้เหมือนกันได้ - การสนับสนุนสำหรับการดำเนินการแบบจำกัดซึ่งเฟรมเวิร์กเรียกใช้
IPreparedModel::executeFenced
ในการเรียกใช้การดำเนินการแบบ Fenced แบบไม่พร้อมกันบนโมเดลที่เตรียมไว้ เวกเตอร์ของขีดจำกัดการซิงค์เพื่อรอ สำหรับข้อมูลเพิ่มเติม โปรดดู การดำเนินการแบบ Fenced - รองรับขั้นตอนการควบคุม เพิ่มการดำเนินการ
IF
และWHILE
ซึ่งใช้เวลา โมเดลอื่นเป็นอาร์กิวเมนต์และดำเนินการอย่างมีเงื่อนไข (IF
) หรือ ซ้ำๆ (WHILE
) สำหรับข้อมูลเพิ่มเติม โปรดดู ควบคุมโฟลว์ - คุณภาพของการบริการ (QoS) ดีขึ้นเนื่องจากแอปสามารถระบุได้ว่า ลำดับความสำคัญของโมเดล ระยะเวลาสูงสุดที่คาดไว้สำหรับ เพื่อเตรียมพร้อม และเวลาสูงสุดที่คาดไว้สำหรับ จะเสร็จสมบูรณ์ สำหรับข้อมูลเพิ่มเติม โปรดดู คุณภาพของการบริการ
- การรองรับโดเมนหน่วยความจำที่มีอินเทอร์เฟซที่จัดสรรสำหรับ บัฟเฟอร์ที่จัดการโดยคนขับ การดำเนินการนี้ช่วยให้ส่งผ่านความทรงจำที่มากับอุปกรณ์ได้ ข้ามการดำเนินการต่างๆ การยับยั้งการคัดลอกและการเปลี่ยนรูปแบบข้อมูลที่ไม่จำเป็น ระหว่างการปฏิบัติการติดต่อกัน กับคนขับรถคนเดียวกัน สำหรับข้อมูลเพิ่มเติม ดูโดเมนของหน่วยความจำ
Android 10
Android 10 เปิดตัว NN HAL 1.2 ซึ่งรวมถึง ดังต่อไปนี้
- โครงสร้าง
Capabilities
มีข้อมูลทุกประเภทรวมถึงสเกลาร์ ประเภทข้อมูล และแสดงประสิทธิภาพที่ไม่ผ่อนคลายโดยใช้เวกเตอร์ มากกว่าฟิลด์ที่มีชื่อ - เมธอด
getVersionString
และgetType
ทำให้เฟรมเวิร์กสามารถ เรียกดูข้อมูลประเภทอุปกรณ์ (DeviceType
) และข้อมูลเวอร์ชัน โปรดดู การค้นหาและการให้สิทธิ์อุปกรณ์ - โดยค่าเริ่มต้น ระบบจะเรียกเมธอด
executeSynchronously
เพื่อดำเนินการ แบบซิงโครนัส เมธอดexecute_1_2
จะบอกเฟรมเวิร์กให้ ดำเนินการไม่พร้อมกัน ดูการดำเนินการ - พารามิเตอร์
MeasureTiming
กับexecuteSynchronously
,execute_1_2
, และการดำเนินการแบบต่อเนื่อง (Burst Execution) เป็นการระบุว่าไดรเวอร์นั้นจะวัดการดำเนินการหรือไม่ ผลลัพธ์จะได้รับการรายงานในโครงสร้างTiming
โปรดดู ช่วงเวลา - การรองรับการดำเนินการที่ตัวถูกดำเนินการเอาต์พุตอย่างน้อย 1 รายการมีค่าที่ไม่รู้จัก มิติข้อมูลหรืออันดับ ดูรูปร่างเอาต์พุต
- การรองรับส่วนขยายของผู้ให้บริการ ซึ่งเป็นคอลเล็กชันที่ผู้ให้บริการกำหนด
การดำเนินการและประเภทข้อมูล ผู้ขับขี่รายงานส่วนขยายที่สนับสนุนผ่าน
เมธอด
IDevice::getSupportedExtensions
โปรดดู ส่วนขยายผู้ให้บริการ - ความสามารถของวัตถุระเบิดในการควบคุมชุดการดำเนินการแบบต่อเนื่องโดยใช้ คิวข้อความด่วน (FMQ) สำหรับสื่อสารระหว่างแอปและคนขับ กระบวนการต่างๆ ซึ่งช่วยลดเวลาในการตอบสนอง โปรดดู Burst Executions และ Fast Message Queues
- การรองรับ A hardwareBuffer เพื่อช่วยให้คนขับดำเนินการ โดยไม่ต้องคัดลอกข้อมูล โปรดดู Aฮาร์ดแวร์Buffer
- ปรับปรุงการรองรับการแคชอาร์ติแฟกต์สำหรับการคอมไพล์เพื่อลดเวลา ซึ่งใช้สำหรับคอมไพล์เมื่อแอปเริ่มทำงาน โปรดดู การแคชการรวบรวม
Android 10 ขอแนะนำประเภทตัวถูกดำเนินการต่อไปนี้และ
-
ANEURALNETWORKS_BOOL
ANEURALNETWORKS_FLOAT16
ANEURALNETWORKS_TENSOR_BOOL8
ANEURALNETWORKS_TENSOR_FLOAT16
ANEURALNETWORKS_TENSOR_QUANT16_ASYMM
ANEURALNETWORKS_TENSOR_QUANT16_SYMM
ANEURALNETWORKS_TENSOR_QUANT8_SYMM
ANEURALNETWORKS_TENSOR_QUANT8_SYMM_PER_CHANNEL
-
ANEURALNETWORKS_ABS
ANEURALNETWORKS_ARGMAX
ANEURALNETWORKS_ARGMIN
ANEURALNETWORKS_AXIS_ALIGNED_BBOX_TRANSFORM
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_LSTM
ANEURALNETWORKS_BIDIRECTIONAL_SEQUENCE_RNN
ANEURALNETWORKS_BOX_WITH_NMS_LIMIT
ANEURALNETWORKS_CAST
ANEURALNETWORKS_CHANNEL_SHUFFLE
ANEURALNETWORKS_DETECTION_POSTPROCESSING
ANEURALNETWORKS_EQUAL
ANEURALNETWORKS_EXP
ANEURALNETWORKS_EXPAND_DIMS
ANEURALNETWORKS_GATHER
ANEURALNETWORKS_GENERATE_PROPOSALS
ANEURALNETWORKS_GREATER
ANEURALNETWORKS_GREATER_EQUAL
ANEURALNETWORKS_GROUPED_CONV_2D
ANEURALNETWORKS_HEATMAP_MAX_KEYPOINT
ANEURALNETWORKS_INSTANCE_NORMALIZATION
ANEURALNETWORKS_LESS
ANEURALNETWORKS_LESS_EQUAL
ANEURALNETWORKS_LOG
ANEURALNETWORKS_LOGICAL_AND
ANEURALNETWORKS_LOGICAL_NOT
ANEURALNETWORKS_LOGICAL_OR
ANEURALNETWORKS_LOG_SOFTMAX
ANEURALNETWORKS_MAXIMUM
ANEURALNETWORKS_MINIMUM
ANEURALNETWORKS_NEG
ANEURALNETWORKS_NOT_EQUAL
ANEURALNETWORKS_PAD_V2
ANEURALNETWORKS_POW
ANEURALNETWORKS_PRELU
ANEURALNETWORKS_QUANTIZE
ANEURALNETWORKS_QUANTIZED_16BIT_LSTM
ANEURALNETWORKS_RANDOM_MULTINOMIAL
ANEURALNETWORKS_REDUCE_ALL
ANEURALNETWORKS_REDUCE_ANY
ANEURALNETWORKS_REDUCE_MAX
ANEURALNETWORKS_REDUCE_MIN
ANEURALNETWORKS_REDUCE_PROD
ANEURALNETWORKS_REDUCE_SUM
ANEURALNETWORKS_RESIZE_NEAREST_NEIGHBOR
ANEURALNETWORKS_ROI_ALIGN
ANEURALNETWORKS_ROI_POOLING
ANEURALNETWORKS_RSQRT
ANEURALNETWORKS_SELECT
ANEURALNETWORKS_SIN
ANEURALNETWORKS_SLICE
ANEURALNETWORKS_SPLIT
ANEURALNETWORKS_SQRT
ANEURALNETWORKS_TILE
ANEURALNETWORKS_TOPK_V2
ANEURALNETWORKS_TRANSPOSE_CONV_2D
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_LSTM
ANEURALNETWORKS_UNIDIRECTIONAL_SEQUENCE_RNN
Android 10 มาพร้อมกับการอัปเดตต่างๆ การปรับปรุงมีดังนี้ เกี่ยวข้องกับสิ่งต่อไปนี้เป็นหลัก
- การสนับสนุนรูปแบบหน่วยความจำ NCHW
- การสนับสนุนสำหรับ Tensor ที่มีอันดับต่ำกว่า 4 ใน Softmax และ การดำเนินการแปลงรูปแบบมาตรฐาน
- รองรับอาการปวดเมื่อยล้า
- การรองรับอินพุตที่มีการวัดปริมาณแบบผสมใน
ANEURALNETWORKS_CONCATENATION
รายการด้านล่างแสดงการดำเนินการที่มีการแก้ไขใน Android 10 สำหรับแบบเต็ม ดูรายละเอียดการเปลี่ยนแปลงได้ที่ OperationCode ในเอกสารอ้างอิง NNAPI
ANEURALNETWORKS_ADD
ANEURALNETWORKS_AVERAGE_POOL_2D
ANEURALNETWORKS_BATCH_TO_SPACE_ND
ANEURALNETWORKS_CONCATENATION
ANEURALNETWORKS_CONV_2D
ANEURALNETWORKS_DEPTHWISE_CONV_2D
ANEURALNETWORKS_DEPTH_TO_SPACE
ANEURALNETWORKS_DEQUANTIZE
ANEURALNETWORKS_DIV
ANEURALNETWORKS_FLOOR
ANEURALNETWORKS_FULLY_CONNECTED
ANEURALNETWORKS_L2_NORMALIZATION
ANEURALNETWORKS_L2_POOL_2D
ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION
ANEURALNETWORKS_LOGISTIC
ANEURALNETWORKS_LSH_PROJECTION
ANEURALNETWORKS_LSTM
ANEURALNETWORKS_MAX_POOL_2D
ANEURALNETWORKS_MEAN
ANEURALNETWORKS_MUL
ANEURALNETWORKS_PAD
ANEURALNETWORKS_RELU
ANEURALNETWORKS_RELU1
ANEURALNETWORKS_RELU6
ANEURALNETWORKS_RESHAPE
ANEURALNETWORKS_RESIZE_BILINEAR
ANEURALNETWORKS_RNN
ANEURALNETWORKS_ROI_ALIGN
ANEURALNETWORKS_SOFTMAX
ANEURALNETWORKS_SPACE_TO_BATCH_ND
ANEURALNETWORKS_SPACE_TO_DEPTH
ANEURALNETWORKS_SQUEEZE
ANEURALNETWORKS_STRIDED_SLICE
ANEURALNETWORKS_SUB
ANEURALNETWORKS_SVDF
ANEURALNETWORKS_TANH
ANEURALNETWORKS_TRANSPOSE
Android 9
NN HAL 1.1 เปิดตัวใน Android 9 และมีฟีเจอร์ต่อไปนี้ การเปลี่ยนแปลง
IDevice::prepareModel_1_1
มีExecutionPreference
พารามิเตอร์ คนขับสามารถใช้ป้ายนี้เพื่อปรับการเตรียมพร้อมรถ โดยจะทราบว่า แอปต้องการประหยัดแบตเตอรี่หรือจะใช้งานโมเดล ในการโทรติดต่อกันอย่างรวดเร็ว- มีการเพิ่มการดำเนินการใหม่ 9 รายการ ได้แก่
BATCH_TO_SPACE_ND
,DIV
,MEAN
PAD
,SPACE_TO_BATCH_ND
,SQUEEZE
,STRIDED_SLICE
,SUB
,TRANSPOSE
- แอประบุให้เรียกใช้การคำนวณแบบลอย 32 บิตได้
โดยใช้ช่วงจำนวนลอยตัว 16 บิตและ/หรือความแม่นยำในการตั้งค่า
Model.relaxComputationFloat32toFloat16
ไปยังtrue
Capabilities
struct มีช่องเพิ่มเติมเป็นrelaxedFloat32toFloat16Performance
เพื่อให้คนขับรายงานประสิทธิภาพที่ผ่อนคลายของตนต่อเฟรมเวิร์กได้
Android 8.1
โครงข่ายระบบประสาทเทียม HAL (1.0) รุ่นแรกเปิดตัวแล้วใน Android 8.1 สำหรับข้อมูลเพิ่มเติม
ดูข้อมูลได้ที่
/neuralnetworks/1.0/