0
0
この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Raspberry Pi Zero 2 W(bookworm 32bit/64bit)でncnnをクロスコンパイルしてbenckmarkを実行する手順

Last updated at Posted at 2024-07-03

目的

PC(Ubuntu)にクロスコンパイル環境を構築して、ディープラーニングフレームワークのncnnとベンチマークソフトウェアのbenchmarkビルドし、CoreMP135でncnn benchmarkを実行します。

また、こちらのリポジトリで、これまでにCoreMP135、Raspberry Pi Zero 2 W、M5Stack_UnitV2、LicheeNano RV、Luckfox Pico Maxでのncnn benchmarkを比較した結果を公開しています。

PC環境

まず以下のバージョンのUbuntuをインストールしたPC環境で、クロスコンパイル環境を構築します。

Ubuntu 22.04.3 LTS(x64)

コンパイルにツールチェインのインストール

コンパイルに必要なツールチェインを含むパッケージをaptからインストールします

$ sudo apt install crossbuild-essential-armhf crossbuild-essential-arm64

Raspberry Pi Zero 2 WのOSには、32Bit向けOS(bookworm 32Bit)と64Bit向けOS(bookworm 64Bit)とがあります。

以下のコマンドを実行して、それぞれのコンパイラのバージョン情報が出てれくれば、ツールチェインのインストールが完了です。

bookworm 32 Bit

 $ arm-linux-gnueabihf-g++ -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/11/lto-wrapper
Target: arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

bookworm 64 Bit

$ aarch64-linux-gnu-g++ -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/aarch64-linux-gnu/11/lto-wrapper
Target: aarch64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

ncnnのインストール(bookworm 64Bit向け)

ncnnは、Tencentが開発しているモバイルプラットフォーム向けに最適化された高性能なニューラルネットワーク推論コンピューティングフレームワークです。

このシェルスクリプトで、bookworm 64Bit向けにncnnライブラリをgitからクローン、ビルド、そしてインストールします。

$ git clone https://github.com/Tencent/ncnn.git -b 20240410 --depth 1 
$ cd ncnn/
$ cmake -B build/aarch64_raspi_zero -DCMAKE_TOOLCHAIN_FILE=./ toolchains/aarch64-linux-gnu.toolchain.cmake -DNCNN_SIMPLEOCV=ON -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=OFF -DNCNN_BUILD_EXAMPLES=OFF .
$ cmake --build build/aarch64_raspi_zero &&  cmake --install build/aarch64_raspi_zero --prefix install/aarch64_raspi_zero

ncnn benckmarkのインストール(bookworm 64Bit向け)

ncnnディレクトリ内でbenckmarkのファイルを整理し、それをzip圧縮します。

$ cd ncnn
$ mkdir install/aarch64_raspi_zero/benchmark
$ cp ./build/aarch64_raspi_zero/benchmark/benchncnn ./install/aarch64_raspi_zero/benchmark
$ cp ./benchmark/*.param ./install/aarch64_raspi_zero/benchmark
$ zip -r ./install/arm_raspi_zero/aarch64_raspi_zero_ncnn_benchmark.zip ./install/aarch64_raspi_zero/benchmark

ncnnのインストール(bookworm 32Bit向け)

このシェルスクリプトで、bookworm 32Bit向けにncnnライブラリをgitからクローン、ビルド、そしてインストールします。

$ git clone https://github.com/Tencent/ncnn.git -b 20240410 --depth 1 
$ cd ncnn/
$ cmake -B build/arm_raspi_zero -DCMAKE_TOOLCHAIN_FILE=./ toolchains/arm-linux-gnueabihf.toolchain.cmake -DNCNN_SIMPLEOCV=ON -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=OFF -DNCNN_BUILD_EXAMPLES=OFF .
$ cmake --build build/arm_raspi_zero &&  cmake --install build/arm_raspi_zero --prefix install/arm_raspi_zero

ncnn benckmarkのインストール(bookworm 32Bit向け)

ncnnディレクトリ内でbenckmarkのファイルを整理し、それをzip圧縮します。

$ cd ncnn
$ mkdir install/arm_raspi_zero/benchmark
$ cp ./build/arm_raspi_zero/benchmark/benchncnn ./install/arm_raspi_zero/benchmark
$ cp ./benchmark/*.param ./install/arm_raspi_zero/benchmark
$ zip -r ./install/arm_raspi_zero/arm_raspi_zero_ncnn_benchmark.zip ./install/arm_raspi_zero/benchmark

Raspberry Pi Zero 2 Wでのベンチマークの実行

zipファイルをRaspberry Pi Zero 2 Wにscpでコピー、Raspberry Pi Zero 2 Wでncnn benchmarkを実行します。

# uname -a
Linux raspberrypi 6.6.31+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.31-1+rpt1 (2024-05-29) aarch64 GNU/Linux
# unzip aarch64_raspi_zero_ncnn_benchmark.zip 
# cd benchmark
# $ ./benchncnn 4 4 0 -1 1
loop_count = 4
num_threads = 4
powersave = 0
gpu_device = -1
cooling_down = 1
          squeezenet  min =   94.88  max =   95.50  avg =   95.22
     squeezenet_int8  min =   79.35  max =   80.08  avg =   79.68
           mobilenet  min =  127.13  max =  127.57  avg =  127.40
      mobilenet_int8  min =   78.65  max =   78.98  avg =   78.81
        mobilenet_v2  min =  128.54  max =  129.68  avg =  129.15
        mobilenet_v3  min =   98.26  max =   98.43  avg =   98.33
          shufflenet  min =   66.90  max =   67.47  avg =   67.21
       shufflenet_v2  min =   52.32  max =   52.75  avg =   52.57
             mnasnet  min =  111.90  max =  112.62  avg =  112.34
     proxylessnasnet  min =  118.48  max =  119.47  avg =  118.76
     efficientnet_b0  min =  155.56  max =  157.07  avg =  155.99
   efficientnetv2_b0  min =  171.39  max =  172.90  avg =  172.09
        regnety_400m  min =  135.76  max =  136.19  avg =  135.91
           blazeface  min =   17.39  max =   17.76  avg =   17.60
           googlenet  min =  264.43  max =  265.96  avg =  265.41
      googlenet_int8  min =  211.98  max =  213.73  avg =  212.97
            resnet18  min =  311.56  max =  319.92  avg =  314.21
       resnet18_int8  min =  167.23  max =  169.53  avg =  167.99
             alexnet  min =  188.50  max =  189.31  avg =  188.94
               vgg16  min = 73978.99  max = 82848.12  avg = 79031.31
          vgg16_int8  min = 1361.84  max = 30602.68  avg = 14190.58
            resnet50  min =  652.90  max = 1006.11  avg =  749.30
       resnet50_int8  min =  442.29  max =  458.85  avg =  446.79
      squeezenet_ssd  min =  277.98  max =  281.90  avg =  279.82
 squeezenet_ssd_int8  min =  200.31  max =  202.15  avg =  200.98
       mobilenet_ssd  min =  288.34  max =  291.08  avg =  289.81
  mobilenet_ssd_int8  min =  161.44  max =  161.59  avg =  161.55
      mobilenet_yolo  min =  596.91  max =  598.30  avg =  597.71
  mobilenetv2_yolov3  min =  408.89  max =  411.38  avg =  409.77
         yolov4-tiny  min =  474.56  max =  479.67  avg =  477.37
           nanodet_m  min =  145.40  max =  146.08  avg =  145.63
    yolo-fastest-1.1  min =   94.99  max =   95.68  avg =   95.32
      yolo-fastestv2  min =   73.39  max =   73.75  avg =   73.60
  vision_transformer  min = 4368.69  max = 4412.38  avg = 4396.93
          FastestDet  min =   76.88  max =   77.24  avg =   77.09

Raspberry Pi Zero 2 Wでncnnをクロスコンパイルしてbenckmarkを実行することができました。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0