Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle-Lite
提交
1f1dfc72
P
Paddle-Lite
项目概览
PaddlePaddle
/
Paddle-Lite
通知
331
Star
4
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
271
列表
看板
标记
里程碑
合并请求
78
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle-Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
271
Issue
271
列表
看板
标记
里程碑
合并请求
78
合并请求
78
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
1f1dfc72
编写于
4月 27, 2020
作者:
H
hong19860320
提交者:
GitHub
4月 27, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Doc] Add RK NPU doc (#3508)
上级
878c395b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
143 addition
and
0 deletion
+143
-0
docs/demo_guides/rknpu.md
docs/demo_guides/rknpu.md
+142
-0
docs/index.rst
docs/index.rst
+1
-0
未找到文件。
docs/demo_guides/rknpu.md
0 → 100644
浏览文件 @
1f1dfc72
# PaddleLite使用RK NPU预测部署
Paddle Lite已支持RK NPU的预测部署。
其接入原理是与之前华为NPU类似,即加载并分析Paddle模型,将Paddle算子转成RK组网API进行网络构建,在线生成并执行模型。
## 支持现状
### 已支持的芯片
-
RK1808, RK1806
-
RK1126, RK1109
### 已支持的设备
-
RK1808 EVB,暂时不支持RK3399Pro。
### 已支持的Paddle模型
-
[
全量化MobileNetV1
](
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/mobilenet_v1_int8_224_fluid.tar.gz
)
### 已支持(或部分支持)的Paddle算子
-
relu
-
conv2d
-
depthwise_conv2d
-
pool2d
-
fc
-
softmax
-
batch_norm
-
concat
-
elementwise_add
-
elementwise_sub
-
elementwise_mul
-
elementwise_div
## 参考示例演示
### 测试设备
![
rk1808_evb_front
](
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/rk1808_evb_front.jpg
)
![
rk1808_evb_back
](
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/rk1808_evb_back.jpg
)
### 准备设备环境
-
需要依赖特定版本的firmware,请参照
[
rknpu_ddk
](
https://github.com/airockchip/rknpu_ddk
)
的说明对设备进行firmware的更新;
-
由于RK1808 EVB在刷firmware后,只是一个纯净的Linux系统,无法像Ubuntu那样使用apt-get命令方便的安装软件,因此,示例程序和PaddleLite库的编译均采用交叉编译方式;
-
将MicroUSB线插入到设备的MicroUSB OTG口,就可以使用Android的adb命令进行设备的交互,再也不用配置网络使用ssh或者通过串口的方式访问设备了,这个设计非常赞!
### 准备交叉编译环境
-
为了保证编译环境一致,建议参考
[
源码编译
](
../user_guides/source_compile
)
中的Docker开发环境进行配置。
### 运行图像分类示例程序
-
从
[
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/PaddleLite-armlinux-demo.tar.gz
](
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/PaddleLite-armlinux-demo.tar.gz
)
下载示例程序,解压后清单如下:
```
shell
- PaddleLite-armlinux-demo
- image_classification_demo
- images
- tabby_cat.jpg
# 测试图片
- tabby_cat.raw
# 已处理成raw数据的测试图片
- labels
- synset_words.txt
# 1000分类label文件
- models
- mobilenet_v1_int8_224_for_rknpu.nb
# 已通过opt转好的mobilenetv1全量化模型
- CMakeLists.txt
# 示例程序CMake脚本
- build
- image_classification_demo
# 已编译好的示例程序
- image_classification_demo.cc
# 示例程序源码
- convert_to_raw_image.py
# 将测试图片保存为raw数据的python脚本
- build.sh
# 示例程序编译脚本
- run.sh
# 示例程序运行脚本
- Paddle-Lite
- include
# PaddleLite头文件
- libs
- armv8
- libGAL.so
# RK DDK库
- libOpenVX.so
- libVSC.so
- librknpu_ddk.so
- libgomp.so.1
# gnuomp库
- libpaddle_light_api_shared.so
# 预编译PaddleLite库
```
-
进入PaddleLite-armlinux-demo/image_classification_demo,再定频后直接执行./run.sh即可,注意:run.sh的执行不能在docker环境,否则无法找到设备;
```
shell
$
cd
PaddleLite-armlinux-demo/image_classification_demo
$
adb shell
/
# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
/
# echo 1608000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
/
# echo userspace > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
/
# echo 1608000 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_setspeed
$
./run.sh
...
warmup: 5 repeat: 10, average: 6.486600 ms, max: 6.544000 ms, min: 6.450000 ms
results: 3
Top0 tabby, tabby
cat
- 0.438732
Top1 Egyptian
cat
- 0.438732
Top2 tiger
cat
- 0.116995
Preprocess
time
: 2.447000 ms
Prediction
time
: 6.486600 ms
Postprocess
time
: 0.101000 ms
```
-
如果需要更改测试图片,可通过convert_to_raw_image.py工具生成;
-
如果需要重新编译示例程序,直接运行./build.sh即可,注意:build.sh的执行必须在docker环境中,否则可能编译出错。
### 更新模型
-
通过Paddle Fluid训练,或X2Paddle转换得到MobileNetv1 foat32模型
[
mobilenet_v1_fp32_224_fluid
](
https://paddlelite-demo.bj.bcebos.com/models/mobilenet_v1_fp32_224_fluid.tar.gz
)
;
-
参考
[
模型量化-有校准数据训练后量化
](
../user_guides/post_quant_with_data
)
使用PaddleSlim对float32模型进行量化(注意:由于RK NPU只支持tensor-wise的全量化模型,在启动量化脚本时请注意相关参数的设置),最终得到全量化MobileNetV1模型
[
mobilenet_v1_int8_224_fluid
](
https://paddlelite-demo.bj.bcebos.com/devices/rockchip/mobilenet_v1_int8_224_fluid.tar.gz
)
;
-
参考
[
模型转化方法
](
../user_guides/model_optimize_tool
)
,利用opt工具转换生成RKNPU模型,仅需要将valid_targets设置为rknpu,arm即可。
```
shell
$
./opt
--model_dir
=
mobilenet_v1_int8_224_fluid
\
--optimize_out_type
=
naive_buffer
\
--optimize_out
=
mobilenet_v1_int8_224_for_rknpu
\
--valid_targets
=
rknpu,arm
```
-
注意:opt生成的模型只是标记了RKNPU支持的Paddle算子,并没有真正生成RK NPU模型,只有在执行时才会将标记的Paddle算子转成RK NPU组网API,最终生成并执行HiAI模型。
### 更新支持RK NPU的Paddle Lite库
-
下载PaddleLite源码和RK DDK;
```
shell
$
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
$
cd
Paddle-Lite
$
git checkout <release-version-tag>
$
git clone https://github.com/airockchip/rknpu_ddk.git
```
-
编译full_publish and tiny_publish for armv8(注意:RKNPU_DDK只支持armv8)
```
shell
$
./lite/tools/build.sh
--arm_os
=
armlinux
--arm_abi
=
armv8
--arm_lang
=
gcc
--build_extra
=
ON
--shutdown_log
=
OFF
--build_rknpu
=
ON
--rknpu_ddk_root
=
./rknpu_ddk full_publish
$
./lite/tools/build.sh
--arm_os
=
armlinux
--arm_abi
=
armv8
--arm_lang
=
gcc
--build_extra
=
ON
--shutdown_log
=
OFF
--build_rknpu
=
ON
--rknpu_ddk_root
=
./rknpu_ddk tiny_publish
```
-
将编译生成的build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8.rknpu/cxx/include替换PaddleLite-armlinux-demo/Paddle-Lite/include目录;
-
将编译生成的build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8.rknpu/cxx/lib/libpaddle_light_api_shared.so替换PaddleLite-armlinux-demo/Paddle-Lite/libs/armv8/libpaddle_light_api_shared.so文件。
## 其它说明
-
RK研发同学正在持续增加用于适配Paddle算子bridge/converter,以便适配更多Paddle模型。
docs/index.rst
浏览文件 @
1f1dfc72
...
...
@@ -54,6 +54,7 @@ Welcome to Paddle-Lite's documentation!
demo_guides/opencl
demo_guides/fpga
demo_guides/npu
demo_guides/rknpu
.. toctree::
:maxdepth: 1
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录