前言
久闻VisionFive 2的大名,心向往之但是一直没有机会上手,这次有机会评测,感谢ICEasy
给予的宝贵机会。闲话少叙,
VisionFive 2和树莓派,飞腾派外观相似,配置差异见下表,唯一不同的是VisionFive 2使用的是RV64处理器,与基于ARM
指令集的树莓派,飞腾派有较大的差别。
作为全球首款集成3D GPU的高性能量产RISC-V 单板,VisionFive 2搭载StarFive JH7110 64bit RV64GC处理器,最大频率1.5GHz,
这款处理器最大的亮点在于首次在RV64处理器上搭载了IMG BXE-4-32 MC1 GPU (@600MHz),支持OpenCL 3.0,OpenGL ES 3.2和Vulkan 1.2,
可以为计算机视觉、深度学习、图形渲染等应用提供充足的算力支持。
本系列文章将围绕VisionFive 2的机器视觉能力展开,和大家一起学习相关的技术,力有不逮之处,还请多多交流指教。
树莓派 | 飞腾派 | VisionFive 2 | |
---|---|---|---|
SOC核心 | Broadcom BCM2711@1.5GHz,4 Cores, ARM Cortex-A72 | 飞腾CPU@1.8GHz, 4 Cores, FTC-664(兼容ARM-V8) | 惊鸿-7110 RISC-V 四核64位RV64GC@1.5GHz |
RAM | 2GB/ 4GB/8GB | 4GB | 2GB/4GB/8GB |
网络 | 单网口/双频WIFI | 双网口/双频WIFI | 2 x RJ45网口 |
多媒体 | 双micros-HDMI | 标准HDMI,MINI-PCIE拓展 | HDMI, PCIe-2.0 |
外围设备 | USB2.0 x 2, USB3.0 x 2 | USB2.0 x 2, USB3.0 x 2 | USB 3.0 x 4 |
电源 | Type-C 5V 3A | 12V-3A | Type-C 5V 3A |
操作系统 | Raspibian(基于Debian) | 飞腾(基于Debian) | Debian |
1. 环境准备
VisionFive 2支持多种操作系统,例如OpenWRT,Fedora,Ubuntu, Debian等,在这里本文选用官方提供的Debian12作为主开发系统。
下载系统镜像,将镜像烧录至SD卡,插卡,上电开机。
检查系统版本
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
BUILD_ID=24
BUILD_DATE=T2024-05-06
检查cpu核心
$ lscpu
Architecture: riscv64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
1.1 下载交叉编译器
交叉编译器的版本视板子运行的系统为准,一般而言,如果使用官方提供的Debian12
,GCC版本为12.2,GLIBCXX最高支持版本3.4.30
$ strings /lib/riscv64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30
GLIBCXX_DEBUG_MESSAGE_LENGTH
由于GCC版本与支持的GLIBCXX版本有关,
因此需要的下载GCC交叉编译器版本 < 12.2,在此首先从RISCV-GNU-toolchain页面
下载riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz
1.2 配置工具链
解压工具链
$ tar -xzvf riscv64-glibc-ubuntu-20.04-llvm-nightly-2023.09.26-nightly.tar.gz
将bin
添加到环境变量中
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
查看交叉编译器版本
$ riscv64-unknown-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/home/allwinner/Documents/riscv/bin/../libexec/gcc/riscv64-unknown-linux-gnu/12.2.0/lto-wrapper
Target: riscv64-unknown-linux-gnu
Configured with: /home/runner/work/riscv-gnu-toolchain/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/opt/riscv --with-sysroot=/opt/riscv/sysroot --with-pkgversion= --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-multilib --with-abi=lp64d --with-arch=rv64gc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 12.2.0 ()
交叉编译器已安装完成。
2. 交叉编译 OpenCV
OpenCV:Open Source Computer Vision Library,是一个使用Apache License 2.0
开源许可证的计算机视觉库。虽然官方已经提供了OpenCV-deb安装包,然而由于
版本较低,并缺少cmake配置文件,使用开发不便,在这里本文重新使用交叉工具链编译新版本的OpenCV-4.10。
- 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++
- 获取opencv源码
$ git clone --depth=1 https://gitcode.net/mirrors/opencv/opencv.git
- 配置并编译
OpenCV组件众多,然后在实际使用中我们并不会都使用,因此为了加快编译速度,取消一些组件的编译,最终的配置如下
$ cmake -Bbuild -S. \
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_java=OFF \
-D BUILD_opencv_gapi=OFF \
-D BUILD_opencv_objc=OFF \
-D BUILD_opencv_js=OFF \
-D BUILD_opencv_ts=OFF \
-D BUILD_opencv_dnn=OFF \
-D BUILD_opencv_calib3d=OFF \
-D BUILD_opencv_objdetect=OFF \
-D BUILD_opencv_stitching=OFF \
-D BUILD_opencv_ml=ON \
-D BUILD_opencv_world=OFF \
-D BUILD_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF\
-DCMAKE_BUILD_TYPE=Release
编译安装
$ cmake --build build
$ sudo cmake --install build
将install/bin
目录的opencv_version,传输到板子,运行验证,成功的话,opencv_version将在控制台打印opencv版本
$ chmod +x opencv_version
$ opencv_version
4.10.0
3. 交叉编译 MNN
MNN是阿里巴巴开发的一款速度超快的轻量级深度学习框架,支持OpenCL,Vulkan加速,可以充分发挥VisionFive 2
搭载的高性能GPU的实力。
3.1 下载MNN
使用git将MNN代码块复制到本地
$ git clone --recursive https://github.com/alibaba/MNN.git
3.2 交叉编译MNN
- 设置编译器
$ export PATH=$PATH:${YOUR_PATH}/riscv/bin
$ export CC=riscv64-unknown-linux-gnu-gcc
$ export CXX=riscv64-unknown-linux-gnu-g++
- 编译配置
由于VisionFive 2支持OPENCL以及VULKAN,我们将MNN的OPENCL以及VULKAN支持打开。
$ cmake -Bbuild -S. \
-DMNN_SEP_BUILD=OFF \
-DMNN_BUILD_TOOLS=ON \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_SHARED_LIBS=OFF \
-DMNN_OPENCL=ON \
-DMNN_VULKAN=ON \
-DMNN_BUILD_TEST=ON\
-DMNN_BUILD_BENCHMARK=ON
-- Use Threadpool, forbid openmp
-- >>>>>>>>>>>>>
-- MNN BUILD INFO:
-- System: Linux
-- Processor: riscv64
-- Version: 2.9.3
-- Metal: OFF
-- OpenCL: ON
-- OpenGL: OFF
-- Vulkan: ON
-- ARM82: OFF
-- oneDNN: OFF
-- TensorRT: OFF
-- CoreML: OFF
-- NNAPI: OFF
-- CUDA: OFF
-- OpenMP: OFF
-- BF16: OFF
-- ThreadPool: ON
-- Hidden: TRUE
-- Build Path: /home/VisionFive/MNN-2.9.0/build
-- CUDA PROFILE: OFF
-- WIN_USE_ASM:
-- Configuring done (0.1s)
-- Generating done (0.2s)
- 编译
$ cmake --build build
将build
目录的*.out,传输到板子,运行验证
$ chmod +x run_test.out
$ sudo ./run_test.out
验证mnn推理性能
$ chmod +x benchmark.out
$ sudo ./benchmark.out ${MODEL_PATH} 10
4. 小结
本文对VisionFive2的OpenCV以及MNN的编译移植做了初步的介绍,在接下来的文章中,将开始介绍一些深度学习模型在VisionFive2的使用。
全部评论