PaddleLite使用百度XPU预测部署

    • 昆仑818-100(推理芯片)

    • 昆仑818-300(训练芯片)

    已支持的设备

    • K100/K200昆仑AI加速卡

    已支持的Paddle模型

    测试设备(K100昆仑AI加速卡)

    准备设备环境

    • K100/200昆仑AI加速卡规格说明书,如需更详细的规格说明书或购买产品,请联系欧阳剑ouyangjian@baidu.com;

    • K100为全长半高PCI-E卡,K200为全长全高PCI-E卡,要求使用PCI-E x16插槽,且需要单独的8针供电线进行供电;

    • 安装K100/K200驱动,目前支持Ubuntu和CentOS系统,由于驱动依赖Linux kernel版本,请正确安装对应版本的驱动安装包。

    • 为了保证编译环境一致,建议参考中的Linux开发环境进行配置;

    • 由于编译示例程序需要依赖OpenCV和CMake 3.10.3,请执行如下命令进行安装;

    运行图像分类示例程序

      1. - image_classification_demo
      2. - assets
      3. - images
      4. - tabby_cat.raw # 经过convert_to_raw_image.py处理后的RGB Raw图像
      5. - labels
      6. - synset_words.txt # 1000分类label文件
      7. - models
      8. - resnet50_fp32_224_fluid # Paddle fluid non-combined格式的resnet50 float32模型
      9. - __model__ # Paddle fluid模型组网文件,可拖入https://lutzroeder.github.io/netron/进行可视化显示网络结构
      10. - bn2a_branch1_mean # Paddle fluid模型参数文件
      11. - bn2a_branch1_scale
      12. ...
      13. - shell
      14. - build
      15. - image_classification_demo # 已编译好的,适用于amd64的示例程序
      16. - image_classification_demo.cc # 示例程序源码
      17. - build.sh # 示例程序编译脚本
      18. - run.sh # 示例程序运行脚本
      19. - libs
      20. - PaddleLite
      21. - amd64
      22. - include # PaddleLite头文件
      23. - lib
      24. - libiomp5.so # Intel OpenMP库
      25. - libmklml_intel.so # Intel MKL库
      26. - libxpuapi.so # XPU API库,提供设备管理和算子实现。
      27. - llibxpurt.so # XPU runtime库
      28. - arm64
      29. - include # PaddleLite头文件
      30. - lib
      31. - llibxpurt.so # XPU runtime库
      32. - libpaddle_full_api_shared.so # 预编译PaddleLite full api库
    • 进入PaddleLite-linux-demo/image_classification_demo/shell,直接执行./run.sh amd64即可;

    • 如果需要更改测试图片,请将图片拷贝到PaddleLite-linux-demo/image_classification_demo/assets/images目录下,修改并执行convert_to_raw_image.py生成相应的RGB Raw图像,最后修改run.sh的IMAGE_NAME即可;

    • 如果需要重新编译示例程序,直接运行./build.sh amd64或./build.sh arm64即可。

      1. $ cd PaddleLite-linux-demo/image_classification_demo/shell
      2. $ ./build.sh amd64 # For amd64
      3. $ ./build.sh arm64 # For arm64(FT-2000+/64)

    更新模型

    • 通过Paddle Fluid训练,或X2Paddle转换得到ResNet50 float32模型resnet50_fp32_224_fluid

    • 由于XPU一般部署在Server端,因此将使用PaddleLite的full api加载原始的Paddle Fluid模型进行预测,即采用CXXConfig配置相关参数。

    • 下载PaddleLite源码;

    • 下载xpu_toolchain for amd64 or arm64(FT-2000+/64);

      1. $ # Compiling environment: x86_64, centos6.3, gcc8.2
      2. $ wget -O xpu_toolchain.tar.gz https://paddlelite-demo.bj.bcebos.com/devices/baidu/xpu_toolchain-centos6.3-x86_64-gcc8.2.0-latest.tar.gz
      3. $ # Compiling environment:arm64(phytium), ubuntu18.04.4, gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu
      4. $ # wget -O xpu_toolchain.tar.gz https://paddlelite-demo.bj.bcebos.com/devices/baidu/xpu_toolchain-ubuntu18.04.4-cross_compiling-aarch64-gcc5.4-latest.tar.gz
      5. $ tar -xvf xpu_toolchain.tar.gz
    • 编译full_publish for amd64 or arm64(FT-2000+/64);

    • 替换库文件和头文件 (for amd64)

      • 将编译生成的 build.lite.x86/inference_lite_lib/cxx/include 替换 PaddleLite-linux-demo/libs/PaddleLite/amd64/include目录 ;

      • 将 xpu_toolchain/XTDK/runtime/shlib/libxpurt.so 替换 PaddleLite-linux-demo/libs/PaddleLite/amd64/lib/libxpurt.so

      • 将 xpu_toolchain/XTDK/shlib/libxpuapi.so 替换 PaddleLite-linux-demo/libs/PaddleLite/amd64/lib/libxpuapi.so

    • 替换库文件和头文件 (for arm64)

      • 将编译生成的build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8.xpu/cxx/include替换PaddleLite-linux-demo/libs/PaddleLite/arm64/include目录;

      • 将编译生成的build.lite.armlinux.armv8.gcc/inference_lite_lib.armlinux.armv8.xpu/cxx/lib/libpaddle_full_api_shared.so替换PaddleLite-linux-demo/libs/PaddleLite/arm64/lib/libpaddle_full_api_shared.so文件。

      • 将 xpu_toolchain/XTDK/runtime/shlib/libxpurt.so 替换 PaddleLite-linux-demo/libs/PaddleLite/arm64/lib/libxpurt.so

      • 将 xpu_toolchain/XTDK/shlib/libxpuapi.so 替换 PaddleLite-linux-demo/libs/PaddleLite/arm64/lib/libxpuapi.so

      备注:替换头文件后需要重新编译示例程序

    • 如需更进一步的了解相关产品的信息,请联系欧阳剑ouyangjian@baidu.com;