ARMのブログ、Using Arm development solutions to bring On-Device Machine Learning inference to embedded world
Cortex-A55でMNIST用のディープラーニングを実施。
実機ではなく、Arm Fast Modelを使っているところが味噌。
おまけに、ARM DS-5のStreamlineを使って、CPUコアがどんな感じに動いているのかを視覚化。
おまけに、コンパイラオプションを、O1からO3に変えて、高速およびコードサイズを小さくしています。
これ、Keras MNIST to ARM Cortex-A9 Baremetal porting using DS-5 - CQ ARM MCU Workshop 2017のコードを使っている模様。
そこまでで終わらずに、Convolutionを変えてみて、さらに、Load/Storeを少なくすることで高速化。。。
引用 Execution Time (instr) NN code size (byte) Convolution function usage CPU Load/Store O1 13146K 49K 96.7% 1187 / 547 O3 7166K 31K 86.99% 608 / 224 O3 w/conv2 3952K 28K 77.16% 250 / 76
そして、NN Accelerator にすると、
引用 Execution Time (instr) NN code size (byte) Convolution function usage CPU Load/Store O1 13146K 49K 96.70% 1187 / 547 O3 7166K 31K 86.99% 608 / 224 O3 w/conv2 3952K 28K 77.16% 250 / 76 O3 w/NNacc 850k 24K 50.00% 106 / 23
になり、最初から実行時間では、1桁以上速くなり、コードサイズも半分に。。。
いやー、凄いわ。。。これが、チューニングだよね。。。ompiled_code M0コード生成は、ここだよ]。