Paddle-Lite 目前支持在Docker环境编译bm预测库。
1. 编译
1.1 下载代码
git clone https://github.com/AnBaolei1984/Paddle-Lite.git
需要checkout到baolei/bitmain分支
1.2 启动Docker
a) 准备Docker镜像
参考paddlelite文档的准备Docker镜像部分,推荐方式二,本地源码Docker镜像
https://paddle-lite.readthedocs.io/zh/latest/source_compile/compile_env.html#docker
b) 在Paddle-Lite的上一级目录执行下面的命令。注意要允许docker container访问bm设备(–device=/dev/bm-sophon0:/dev/bm-sophon0等)。
下面是sc5+三芯卡的docker启动命令:
docker run -it \
--name paddlelite_docker \
-v $PWD/Paddle-Lite:/Paddle-Lite \
--device=/dev/bm-sophon0:/dev/bm-sophon0 \
--device=/dev/bm-sophon1:/dev/bm-sophon1 \
--device=/dev/bm-sophon2:/dev/bm-sophon2 \
--device=/dev/bmdev-ctl:/dev/bmdev-ctl \
--net=host \
paddlepaddle/paddle-lite /bin/bash
如果只是编译转换模型的库,可以不用映射–device。
1.3 源码编译
1)cd /Paddle-Lite
2)设置编译线程数目
export LITE_BUILD_THRLITE_BUILD_THREADSEADS=4
3)编译
编译选项
a) target_name (默认BM1682)
如果使用的是比特大陆BM1682系列的硬件(SC3/SE3),那么target_name设为BM1682
如果使用的是比特大陆BM1684系列的硬件(SC5/SE5/SM5),那么target_name设为BM1684
b) save_bmodel (默认OFF)
如果在盒子(SE3/SE5)或模组(SM5)上开发,保存转换后的bmodel。需设成ON。
c) dynamic (默认OFF)
选择动态编译(batch可变,但性能会比静态编译差)或静态编译
d) save_umodel (默认OFF)
如果在BM1684系列芯片上做int8量化,保存转换的umodel。需设成ON。
编译命令示例:
./lite/tools/build_bm.sh --target_name=BM1684 --test=ON --save_bmodel=ON
2. SC5/SC5+直接在线推理预测
我们提供运行分类网络的示例(/PaddleLite/lite/api/test_classify_lite_bm.cc)。
cd build.lite.bm/lite/api
运行命令:
./test_classify_lite_bm --model_dir /Paddle-Lite/models/resnet50 --input_img_txt_path /Paddle-Lite/img.txt --warmup 1 --repeats 10 --im_width 224 --im_height 224
3. 转换bmodel或umodel
请参考 https://github.com/AnBaolei1984/Paddle2BMmodel
Paddle2BMmodel中使用的inference_lite_lib是通过编译Paddle-Lite得到的。编译后生成在Paddle-Lite/build.lite.bm/inference_lite_lib目录。
4. 注意事项
paddle的模型有__model__和model+params两种形式。
a) 如果是__model__,lite/api/test_classify_lite_bm.cc 第40行写为
predictor.Build(FLAGS_model_dir, "", "", valid_places, passes);
b) 如果是model+params,写为
predictor.Build(FLAGS_model_dir, FLAGS_model_dir+"/model", FLAGS_model_dir+"/params", valid_places, passes);