7.10. CMSIS-NN¶
TFLM’nin gezdiği operatör listesi çoğunlukla bir avuç ağır operatörden oluşur: evrişim (convolution) öğrenilmiş ağırlıklardan oluşan küçük bir ızgarayı bir girdi tensörü üzerinde kaydırır ve her konumda ağırlıklı toplamı yazar; derinlemesine evrişim (depthwise convolution) aynısını kanal başına yapar; tam bağlı (fully-connected) katmanlar bir girdi vektörü ile bir ağırlık matrisi arasında matris çarpımı yapar; havuzlama (pooling) küçük komşuluklar üzerinde maksimum veya ortalama alarak bir tensörü küçültür; ReLU ve sigmoid gibi aktivasyon fonksiyonları her değer üzerinde noktasal olarak çalışır. Bir görüntü çıkarımı çevrimlerinin çoğunu o birkaç operatörün içinde geçirir.
Doğrudan yöntemle uygulandığında, bunlar bir mikrodenetleyicide yavaş olurdu. CMSIS-NN, Arm’ın hızlı sürümlerden oluşan kütüphanesidir – elle assembly diliyle ayarlanmış, tensör G/Ç bölümünün açıkladığı int8 ve uint8 değerlerine tam sayı kuantize edilmiş ve CPU’nun SIMD komutlarına göre yazılmıştır. SIMD – Single Instruction, Multiple Data (Tek Komut, Çoklu Veri) – CPU’nun aynı çevrimde birkaç değer üzerinde tek bir aritmetik işlem çalıştırmasını sağlar. Sade bir skaler çarp-topla işlemi çevrim başına bir sonuç üretir; bir SIMD çarp-topla işlemi birkaç değeri geniş bir yazmaca paketler ve hepsini aynı anda üretir.
H7 ve RT1062 üzerindeki Cortex-M7, Arm’ın DSP uzantısına sahiptir; bu uzantı 32 bitlik bir yazmaçta dört int8 değeri tutar ve bir çevrimde dördünün hepsi üzerinde bir çarp-topla çalıştırır. AE3 üzerindeki Cortex-M55, Helium – resmi olarak MVE, M-profile Vector Extension – içerir; bu, 128 bitlik bir yazmaçta on altı int8 şeridi tutar, yani çevrim başına dört kat iş hacmi. Helium, bir hızlandırıcı değil, daha geniş bir CPU komut kümesidir; aynı yonga üzerindeki Ethos-U55 NPU ise hızlandırıcıdır.
Sevk edilen TFLM derlemeleri CMSIS-NN’ye bağlanır ve TFLM, çalışma zamanında her ağır operatörü kamera için doğru SIMD varyantına yönlendirir. AE3’te yönlendirme biraz daha karmaşıktır: Vela derleyicisi modeli çevrimdışı zaten gezmiş ve NPU’ya uygun operatörlerin bağlı dilimlerini – alt grafikleri (subgraphs) – Ethos-U’ya yönlendirilmek üzere işaretlemiştir. Çıkarım anında bu alt grafikler hızlandırıcıda tek bir blok halinde çalışır, geri kalanı ise M55 üzerindeki Helium CMSIS-NN’ye geri döner.
Float operatörler CMSIS-NN’yi tamamen atlar ve TFLM’nin taşınabilir referans çekirdekleri üzerinden çalışır. Bir int8 model ile bir float model arasındaki doğruluk farkı genellikle küçüktür; iş hacmi farkı ise büyüktür. Kameraya sevk edilen modeller bu nedenle int8 olarak kuantize edilir.