diff --git a/docs/demo_guides/kunlunxin_xtcl.md b/docs/demo_guides/kunlunxin_xtcl.md index e65f606c805..f3cc0be622d 100644 --- a/docs/demo_guides/kunlunxin_xtcl.md +++ b/docs/demo_guides/kunlunxin_xtcl.md @@ -1,18 +1,19 @@ # 昆仑芯 XTCL 部署示例 -Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部署。 目前支持子图接入方式,其接入原理是在线分析 Paddle 模型,将 Paddle 算子先转为统一的 NNAdapter 标准算子,再通过 XTCL 组网 API 进行网络构建,在线生成并执行模型。 +Paddle Lite 已支持昆仑芯系列芯片及板卡 在 X86 和 ARM 服务器上进行预测部署。 目前支持子图接入方式,其接入原理是在线分析 Paddle 模型,将 Paddle 算子先转为统一的 NNAdapter 标准算子,再通过 XTCL 组网 API 进行网络构建,在线生成并执行模型。 +XPU Tensor Compilation Library (XTCL),即昆仑芯针对机器学习领域实践而提供的图编译引擎库,可提供基于昆仑芯硬件相关的图层分析框架和加速优化能力。 ## 支持现状 ### 已支持的芯片 -- 昆仑 818-100(推理芯片) -- 昆仑 818-300(训练芯片) +- 昆仑芯1代AI芯片CK10/CK20 +- 昆仑芯2代AI芯片CR20 -### 已支持的设备 +### 已支持的AI加速卡 -- K100/K200 昆仑 AI 加速卡 -- R200 昆仑 AI 加速卡 +- 昆仑芯 AI 加速卡 K100/K200 +- 昆仑芯 AI 加速卡 R200 ### 已验证支持的 Paddle 模型 @@ -72,6 +73,10 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 - [开源模型支持列表](../quick_start/support_model_list.md) +**Note: 以上全部模型目前只在R200上测试验证通过,部分模型支持K100/K200.** + + + #### 性能 性能仅供参考,以实际运行效果为准。 @@ -85,9 +90,9 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 | [Inception-v4](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/InceptionV4.tgz) | 151.721399 | 3.128800 | | [MobileNet-v1](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/MobileNetV1.tgz) | 23.442400 | 0.500800 | | [MobileNet-v2](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/MobileNetV2.tgz) | 19.889200 | 1.411200 | -| [ResNet-101](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/ResNet101.tgz) | 200.134998 | 1.392200 | | [ResNet-18](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/ResNet18.tgz) | 47.691199 | 0.429400 | | [ResNet-50](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/ResNet50.tgz) | 108.112999 | 0.815200 | +| [ResNet-101](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/ResNet101.tgz) | 200.134998 | 1.392200 | | [ResNeXt50](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/ResNeXt50_32x4d.tgz) | 110.684799 | 1.648600 | | [SqueezeNet-v1](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/SqueezeNet1_0.tgz) | 33.140800 | 0.902400 | | [VGG16](https://paddlelite-demo.bj.bcebos.com/NNAdapter/models/PaddleClas/VGG16.tgz) | 491.237994 | 1.542200 | @@ -116,15 +121,15 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 ## 参考示例演示 -### 测试设备( K100 昆仑 AI 加速卡) +### 测试设备( 昆仑芯AI加速卡R200) -![kunlunxin_xpu](https://paddlelite-demo.bj.bcebos.com/devices/baidu/baidu_xpu.jpg) +kunlunxin_xtcl ### 准备设备环境 -- K100/200 昆仑 AI 加速卡[规格说明书](https://paddlelite-demo.bj.bcebos.com/devices/baidu/K100_K200_spec.pdf); -- K100 为全长半高 PCI-E 卡,K200 为全长全高 PCI-E 卡,要求使用 PCI-E x16 插槽,且需要单独的 8 针供电线进行供电; -- 安装 K100/K200 驱动,目前支持 Ubuntu 和 CentOS 系统,由于驱动依赖 Linux kernel 版本,请正确安装对应版本的驱动安装包。 +- 昆仑芯AI加速卡R200[产品手册](https://baidu-kunlun-public.su.bcebos.com/paddle_lite/R200%20%E4%BA%A7%E5%93%81%E6%89%8B%E5%86%8C%E5%A4%96%E9%83%A8%E7%89%88_0923.pdf); +- R200 为全高全长 PCI-E 卡,要求使用 PCIe4.0 x16 插槽,且需要单独的 8 针供电线进行供电; +- 安装 [R200 XRE 驱动](https://baidu-kunlun-public.su.bcebos.com/paddle_lite/XRE%20%E5%AE%89%E8%A3%85%E6%89%8B%E5%86%8C_v1.0.pdf),目前支持 Ubuntu 和 CentOS 系统,由于驱动依赖 Linux kernel 版本,请正确安装对应版本的驱动安装包。 ### 准备本地编译环境 - 为了保证编译环境一致,建议根据机器的实际情况参考[ linux(x86) 编译](../source_compile/linux_x86_compile_linux_x86.rst)或[ linux(ARM) 编译](../source_compile/arm_linux_compile_arm_linux.rst)中的``准备编译环境``进行环境配置 @@ -189,11 +194,9 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 - ssd_detection_demo # 基于 ssd 的目标检测示例程序 ``` - - 进入 `PaddleLite-generic-demo/image_classification_demo/shell/`; - 执行以下命令比较 mobilenet_v1_fp32_224 模型的性能和结果; - ```shell 运行 mobilenet_v1_fp32_224 模型 @@ -233,10 +236,9 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 $ ./build.sh linux arm64 ``` -### 更新支持昆仑芯XTCL 的 Paddle Lite 库 +### 更新支持昆仑芯XTCL的Paddle Lite库 - 下载 Paddle Lite 源码 - ```shell $ git clone /~https://github.com/PaddlePaddle/Paddle-Lite.git $ cd Paddle-Lite @@ -244,18 +246,14 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 ``` - 编译并生成 PaddleLite+NNAdapter+kunlunxin_xtcl for amd64 and arm64 的部署库 - - - For amd64 - - - full_publish 编译 - + - For amd64 + - full_publish 编译 ```shell # 默认自动从云上下载kunlunxin_xtcl_sdk,如需指定,请使用参数--nnadapter_kunlunxin_xtcl_sdk_root $ ./lite/tools/build_linux.sh --arch=x86 --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON --nnadapter_with_kunlunxin_xtcl=ON full_publish ``` - - 替换头文件和库 - + - 替换头文件和库 ```shell # 清理原有 include 目录 $ rm -rf PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/include/ @@ -272,50 +270,46 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 ``` - For arm64 - - - full_publish 编译 - - ```shell - # arm 环境下需要设置环境变量 CC 和 CXX,分别指定 C 编译器和 C++ 编译器的路径 - # 默认自动从云上下载kunlunxin_xtcl_sdk,如需指定,请使用参数--nnadapter_kunlunxin_xtcl_sdk_root - $ export CC= - $ export CXX= - $ ./lite/tools/build_linux.sh --arch=armv8 --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON --nnadapter_with_kunlunxin_xtcl=ON full_publish - ``` - - - 替换头文件和库 - - ```shell - # 清理原有 include 目录 - $ rm -rf PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/include/ - # 替换 include 目录 - $ cp -rf build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/include/ PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/include/ - # 替换 NNAdapter 运行时库 - $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libnnadapter.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/kunlunxin_xtcl/ - # 替换 NNAdapter device HAL 库 - $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libkunlunxin_xtcl.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/kunlunxin_xtcl/ - # 替换 libpaddle_full_api_shared.so - $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libpaddle_full_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/ - # 替换 libpaddle_light_api_shared.so - $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libpaddle_light_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/ - ``` - -- 替换头文件后需要重新编译示例程序 + - full_publish 编译 + ```shell + # arm 环境下需要设置环境变量 CC 和 CXX,分别指定 C 编译器和 C++ 编译器的路径 + # 默认自动从云上下载kunlunxin_xtcl_sdk,如需指定,请使用参数--nnadapter_kunlunxin_xtcl_sdk_root + $ export CC= + $ export CXX= + $ ./lite/tools/build_linux.sh --arch=armv8 --with_extra=ON --with_log=ON --with_exception=ON --with_nnadapter=ON --nnadapter_with_kunlunxin_xtcl=ON full_publish + ``` + + - 替换头文件和库 + ```shell + # 清理原有 include 目录 + $ rm -rf PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/include/ + # 替换 include 目录 + $ cp -rf build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/include/ PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/include/ + # 替换 NNAdapter 运行时库 + $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libnnadapter.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/kunlunxin_xtcl/ + # 替换 NNAdapter device HAL 库 + $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libkunlunxin_xtcl.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/kunlunxin_xtcl/ + # 替换 libpaddle_full_api_shared.so + $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libpaddle_full_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/ + # 替换 libpaddle_light_api_shared.so + $ cp build.lite.linux.armv8.gcc/inference_lite_lib.armlinux.armv8.nnadapter/cxx/lib/libpaddle_light_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/arm64/lib/ + ``` ## 高级特性 +本节主要说明在不同的昆仑芯AI加速卡上如何设置不同的参数。以下列出了paddle lite下支持的两种高级参数。 - 高级参数 - KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS - - 指定昆仑芯 XPU 的 ID号,例如KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0,1,2,3或KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0。 + 指定昆仑芯产品的 ID号。例如KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0或KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0,1,2,3 - KUNLUNXIN_XTCL_DEVICE_TARGET + 指定昆仑芯的不同类型的AI加速卡。例如KUNLUNXIN_XTCL_DEVICE_TARGET=xpu -libs=xdnn -device-type=xpu1或者KUNLUNXIN_XTCL_DEVICE_TARGET=xpu -libs=xdnn -device-type=xpu2 + XPU 代指昆仑芯自主研发的芯片硬件架构,XPU1 用在昆仑芯 1 代系列产品,包括K100和K200;XPU2 用在昆仑芯 2 代系列产品,包括R200等。 - 指定昆仑芯 XPU 的不同类型的推理卡。例如KUNLUNXIN_XTCL_DEVICE_TARGET=xpu -libs=xdnn -device-type=xpu1或者KUNLUNXIN_XTCL_DEVICE_TARGET=xpu -libs=xdnn -device-type=xpu2 - **使用方式:** - c++代码示例 +- 使用方式 + - c++代码示例 ```c++ // Run inference by using light api with MobileConfig paddle::lite_api::MobileConfig mobile_config; @@ -323,13 +317,13 @@ Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器上进行预测部 std::string nnadapter_context_properties = "KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0;KUNLUNXIN_XTCL_DEVICE_TARGET=xpu -libs=xdnn -device-type=xpu1" mobile_config.set_nnadapter_context_properties(nnadapter_context_properties); ``` - shell脚本示例 + + - shell脚本示例 ```shell export KUNLUNXIN_XTCL_SELECTED_DEVICE_IDS=0 export KUNLUNXIN_XTCL_DEVICE_TARGET="xpu -libs=xdnn -device-type=xpu1" ``` - ## 其他说明 -- 昆仑芯的研发同学正在持续适配更多的 Paddle 算子,以便支持更多的 Paddle 模型。 +- 昆仑芯的研发团队正在持续适配更多的 Paddle 算子,以便支持更多的 Paddle 模型。