7.10. CMSIS-NN

Daftar operator yang dilalui TFLM sebagian besar terdiri dari sejumlah kecil operator berat: konvolusi yang menggeser kisi kecil bobot yang dipelajari di atas tensor masukan dan menuliskan jumlah berbobot di setiap posisi; konvolusi per kedalaman yang melakukan hal yang sama per saluran; fully-connected yang mengalikan matriks antara vektor masukan dan matriks bobot; pooling yang menyusutkan tensor dengan mengambil nilai maksimum atau rata-rata dari lingkungan kecil; fungsi aktivasi seperti ReLU dan sigmoid yang berjalan secara titik-ke-titik di setiap nilai. Sebuah inferensi visi menghabiskan sebagian besar siklus CPU di dalam beberapa operator tersebut.

Jika diimplementasikan dengan cara sederhana, operator-operator tersebut akan berjalan lambat di mikrokontroler. CMSIS-NN adalah pustaka Arm untuk versi yang cepat -- disetel secara manual dalam assembly, dikuantisasi bilangan bulat ke nilai int8 dan uint8 yang dijelaskan oleh tensor I/O, dan ditulis untuk instruksi SIMD CPU. SIMD -- Single Instruction, Multiple Data -- memungkinkan CPU menjalankan satu operasi aritmatika pada beberapa nilai dalam satu siklus. Perkalian-penjumlahan skalar biasa menghasilkan satu hasil per siklus; perkalian-penjumlahan SIMD mengemas beberapa nilai ke dalam register lebar dan menghasilkan semuanya sekaligus.

Cortex-M7 pada H7 dan RT1062 memiliki ekstensi DSP Arm, yang menampung empat nilai int8 dalam register 32-bit dan menjalankan perkalian-penjumlahan untuk keempat nilai tersebut dalam satu siklus. Cortex-M55 pada AE3 memiliki Helium -- secara resmi disebut MVE, M-profile Vector Extension -- yang menampung enam belas lane int8 dalam register 128-bit, empat kali throughput per siklus. Helium adalah set instruksi CPU yang lebih lebar, bukan akselerator; NPU Ethos-U55 pada die yang sama adalah akseleratornya.

Build TFLM yang dikirimkan ditautkan dengan CMSIS-NN, dan TFLM mendistribusikan setiap operator berat ke varian SIMD yang tepat untuk kamera yang digunakan saat runtime. Pada AE3, proses distribusinya sedikit lebih kompleks: kompiler Vela telah menelusuri model secara offline dan menandai irisan-irisan operator yang memenuhi syarat NPU yang terhubung -- subgraf -- untuk didistribusikan ke Ethos-U. Saat waktu inferensi, subgraf-subgraf tersebut dijalankan pada akselerator dalam satu blok, dan sisanya kembali menggunakan Helium CMSIS-NN pada M55.

Operator float melewati CMSIS-NN sepenuhnya dan berjalan melalui kernel referensi portabel TFLM. Perbedaan akurasi antara model int8 dan model float biasanya kecil; perbedaan throughput-nya besar. Model yang dikirimkan pada kamera dikuantisasi ke int8 karena alasan ini.