赞
踩
目录
开始环境配置之前,小编要和伙伴们啰嗦一下,热热身。小编一直秉承:学习知识既要见大树,也要见森林!
深度学习发展至今,边缘计算是其非常重要的一部分。那什么是边缘计算?小编的理解简化为大白话即是:让深度网络在终端设备上跑起来,满足精度、稳定性、实时性、成本等需求。稳定性是前提,其他需求相互制衡。就目前而言,边缘计算的发力点主要是三个方面,一是探索、研究并训练合适的网络模型,二是裁剪网络模型,包括减少参数、量化计算等,三是在边缘设备上加速。
深度学习的软件平台主流的有tensorflow pytorch caffe等云端平台,tensorflow_lite、ncnn、MXNN等边缘推理框架。图像分类、目标检测网络主要有lenet vgg googlenet resnet mobile_net yolo ssd等等。这是小编大概了解的。
边缘计算的硬件及API而言,ARM、英伟达、Intel、APPLE和国内的一些芯片/集成电路厂商都在布局,既有统一的标准,又有结合自家硬件API。ARM-A-CPU-NEON ARM-M-CPU-NEON、 DSP-C/C++、FPGA-Verilog、AMD-GPU-OPENCL、NVIDIA-GPU-OPENCL、ARM-MaliGPU-OPENCL、Intel-CPU-SSE、CPU-多核-OPENMP.....伙伴们自行了解了解。关于openCL,可以参照这篇博客https://blog.csdn.net/leonwei/article/details/8880012。ARM官网https://developer.arm.com/documentation/100614/0314/Introduction/About-Arm-Mali-GPUs?lang=en
ARMNN是什么?引用ARM官网的描述:Arm NN SDK 是一套开源 Linux 软件和工具,支持在高能效的设备上运行机器学习工作负载。它桥接了现有神经网络框架与高能效的 Arm Cortex CPUs、Arm Mali GPU 或 Arm 机器学习处理器。即和腾讯开源的NCNN,阿里开源的MXNN等一致,相信国内将来也会开发出深度结合自家硬件的AI边缘计算框架。我参照的链接这里:https://community.arm.com/cn/b/blog/posts/arm-nn-development-kit
伙伴们应该知道,ARM的产品覆盖了很多终端设备(手机、智能手环、人脸识别、车辆检测等各类智能电子设备),包括很多芯片大厂也使用ARM的架构。ARMNN旨在结合ARM相关的硬件,加速AI边缘计算。一起来看一张图,了解得全面一些。框图从上到下一共有4层:
ARMNN的未来布局是怎样的?这里同样来看一张框图,一句话概括即:基于ARM自家硬件及其软件API,融合主流神经网络框架,为用户提供高效的AI应用平台。小编不是要打广告哈!!!
ARMNN的编译资料比较少,基本都是英文的,但是ARM官网也有一片很好的资料,为了方便参考,伙伴们可以Download下来------
指南链接: Configure the Arm NN SDK build environment.pdf 密码: r243,百度网盘。
rk3399的友善开发板,配置ARM-CPU-A72@2+A53@4,ARM-GPU-MaliT860,系统ubuntu20.04,设备直接联网,ssh远程访问编译,对于rk3399属于本地编译,交叉编译的需要自己下载好交叉编译工具Toolchain。
Toolchain-- 百度网盘链接: https://pan.baidu.com/s/1n2I0vr_bTAbSzUv0Xpn-_w 密码: u9k1
1. 编译环境准备,参考Configure the Arm NN SDK build environment.pdf 中的Before you begin,需要安装git/cmake/scons.
2. 下载源码库,参考Configure the Arm NN SDK build environment.pdf 中的Download libraries,源码建议放在统一目录下,$BASEDIR为统一目录变量,这里参考文档基本没问题
3. Build the Arm Compute Library,这里要注意安装scons编译器,这个编译器比cmake用起来简单,小编也不熟悉,好在按照教程没有出错,建议同时打开NEON和OPENCL。生成的库中包含静态库和动态库,报错处理:
小编在编译过程中报错,关于noexcept的错误,参照这里解决https://review.mlplatform.org/c/ml/ComputeLibrary/+/5281
小编编译这部分也走了点弯路,还是官网指导靠谱点,就是要看懂英文。
ComputeLibrary编译过程中参照了博客https://blog.csdn.net/houge101/article/details/80867194。"在 640M 内存的 vps 做编译的时候出现了上述错误。
----小编几经搜索, 才发可能是系统没有交换分区, 编译过程中内存耗尽, 导致了编译中断 …解决方式也很简单, 就是增加一个交换分区:">>>其实不用交换区,只需要把-j8,改成j2或j4即可,减小并行编译的线程数量。
4. Build the Boost library,这个库主要在单元测试中用到,如果不编译,那么需要在后面cmake ..中设备BUILD_UNIT_TESTS=OFF,参考文档,编译问题不大,小编编译生成的是静态库。
5. Build the Google Protocol Bufferslibrary,这个protobuf是关键,如果只想支持tensorflow_lite可以不编译,跳过。参考文档,编译问题不大。注意make -j2/4,编译线程不要开太大。注意这个目录:<path>/google/aarch64_pb_install
6. Generate the build dependencies for TensorFlow Lite,这一步没有编译,主要是配置文件,生成lite 格式的解析文件。注意这个目录:$BASEDIR/tensorflow/tensorflow/lite/schema
7. Generate the build dependencies for ONNX,这一步也没有编译,也是生成onnx格式的解析文件,注意这里的protobuf-host是5步中的aarch64_pb_install。
如果是要添加TF_PARSER的格式解析文件,则执行如下命令:
pi@FriendlyELEC:~/ARM-NN-CL/onnx$ cd ../tensorflow
pi@FriendlyELEC:~/ARM-NN-CL/tensorflow$ $BASEDIR/aarch64_pb_install/bin/protoc tensorflow/core/protobuf/saved_model.proto --proto_path=. --proto_path=$BASEDIR/aarch64_pb_install/include --cpp_out $BASEDIR/tensorflow
8. Build Arm NN,这一步的配置是关键,稳定给出的指令仅供参考,建议伙伴们下载这里的更改过的ARMNN包,3步中的Bug也修改了,加了控制动态和静态库的编译选择。
百度网盘链接: https://pan.baidu.com/s/1R17xanZ_c--MAmLuxGhlRQ 密码: 8grd
小编的编译目录是:$BASEDIR=/home/pi/ARM-NN-CL,注意将GlobalConfig.cmake的140行修改如下:
find_package(Boost 1.64 REQUIRED COMPONENTS unit_test_framework) //版本需要对应
编译指令如下:
- cmake .. -DARMCOMPUTE_ROOT=/home/pi/ARM-NN-CL/ComputeLibrary \
- -DARMCOMPUTE_BUILD_DIR=/home/pi/ARM-NN-CL/ComputeLibrary/build \
- -DBUILD_SHARED_LIBS=OFF \
- -DBUILD_GATORD_MOCK=ON \
- -DBUILD_UNIT_TESTS=ON \
- -DBUILD_ARMNN_SERIALIZER=ON \
- -DBUILD_ARMNN_QUANTIZER=ON \
- -DBOOST_ROOT=/home/pi/ARM-NN-CL/boost \
- -DBUILD_TF_LITE_PARSER=1 \
- -DTF_LITE_GENERATED_PATH=/home/pi/ARM-NN-CL/tensorflow/tensorflow/lite/schema \
- -DFLATBUFFERS_ROOT=/home/pi/ARM-NN-CL/flatbuffers \
- -DFLATC_DIR=/home/pi/ARM-NN-CL/flatbuffers-1.12.0/build \
- -DARMCOMPUTECL=1 \
- -DARMCOMPUTENEON=1 \
- -DARMNNREF=1 \
- -DONNX_GENERATED_SOURCES=/home/pi/ARM-NN-CL/onnx \
- -DTF_GENERATED_SOURCES=/home/pi/ARM-NN-CL/tensorflow/tensorflow/core/protobuf \
- -DPROTOBUF_ROOT=/home/pi/ARM-NN-CL/aarch64_pb_install \
- -DBUILD_ONNX_PARSER=1 \
- -DBUILD_CAFFE_PARSER=OFF \
- -DBUILD_TF_PARSER=1 \
- -DCMAKE_INSTALL_PREFIX=/home/pi/ARM-NN-CL/armnn/build/install
9. Test your build,编译测试,基本没啥问题,可以make install了。
然后参考sample目录下的列子,开始AI之旅咯!
如果平台和我的一致,可以直接用我编译好的静态库,小编编译了两天多,小编全程是静态编译,生成的是静态库。编译的过程比较艰辛,需要慢慢摸索,最好比较熟悉掌握cmake工具,后期caffe的接口也是和ONNX的配置方式一样,其他解析器要参考ARMNN的CMakeLists.txt和cmake文件夹下的.cmake文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。