Skip to content

Commit

Permalink
fix xpu docs/shell (#8091)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhupengyang authored Jan 4, 2022
1 parent 43c913b commit 3b04cc6
Show file tree
Hide file tree
Showing 20 changed files with 191 additions and 146 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Paddle Lite 提供了 C++、Java、Python 三种 API,并且提供了相应 API
- [百度 EdgeBoard FPGA 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/fpga.html)
- [华为麒麟 NPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/huawei_kirin_npu.html)
- [华为昇腾 NPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/huawei_ascend_npu.html)
- [百度昆仑 XPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/baidu_xpu.html)
- [昆仑芯 XPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/kunlunxin_xpu.html)
- [瑞芯微 NPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/rockchip_npu.html)
- [联发科 APU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/mediatek_apu.html)
- [比特大陆 NPU 示例](https://paddle-lite.readthedocs.io/zh/develop/demo_guides/bitmain.html)
Expand All @@ -76,7 +76,7 @@ Paddle Lite 提供了 C++、Java、Python 三种 API,并且提供了相应 API
| 百度 EdgeBoard FPGA | - | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
| 华为麒麟 NPU | - | - | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - |
| 华为昇腾 NPU | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
| 百度昆仑 XPU | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
| 昆仑芯 XPU | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
| 瑞芯微 NPU | - | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
| 联发科 APU | - | - | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - |
| 比特大陆 NPU | - | ![Build Status](https://img.shields.io/badge/build-passing-brightgreen.svg) | - | - |
Expand Down
63 changes: 48 additions & 15 deletions docs/demo_guides/baidu_xpu.md → docs/demo_guides/kunlunxin_xpu.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 百度昆仑 XPU 部署示例
# 昆仑芯 XPU 部署示例

Paddle Lite 已支持百度 XPU 在 X86 和 ARM 服务器(例如飞腾 FT-2000+/64)上进行预测部署。
目前支持 Kernel 和子图两种接入方式,其中子图接入方式与之前华为 Kirin NPU 类似,即加载并分析 Paddle 模型,将 Paddle 算子转成 XTCL 组网 API 进行网络构建,在线生成并执行模型。
Paddle Lite 已支持昆仑芯 XPU 在 X86 和 ARM 服务器(例如飞腾 FT-2000+/64)上进行预测部署。
目前支持 Kernel 和子图两种接入方式。其中子图接入方式原理是,在线分析 Paddle 模型,将 Paddle 算子先转为统一的 NNAdapter 标准算子,再通过 XTCL 组网 API 进行网络构建,在线生成并执行模型。

## 支持现状

Expand All @@ -28,7 +28,7 @@ Paddle Lite 已支持百度 XPU 在 X86 和 ARM 服务器(例如飞腾 FT-2000

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

![baidu_xpu](https://paddlelite-demo.bj.bcebos.com/devices/baidu/baidu_xpu.jpg)
![kunlunxin_xpu](https://paddlelite-demo.bj.bcebos.com/devices/baidu/baidu_xpu.jpg)

### 准备设备环境

Expand Down Expand Up @@ -137,7 +137,7 @@ Paddle Lite 已支持百度 XPU 在 X86 和 ARM 服务器(例如飞腾 FT-2000
- 通过 Paddle 训练,或 X2Paddle 转换得到 ResNet50 float32 模型[ resnet50_fp32_224_fluid ](https://paddlelite-demo.bj.bcebos.com/models/resnet50_fp32_224_fluid.tar.gz)
- 由于 XPU 一般部署在 Server 端,因此将使用 Paddle Lite 的 `full api` 加载原始的 Paddle 模型进行预测,即采用 `CxxConfig` 配置相关参数。

### 更新支持百度 XPU 的 Paddle Lite 库
### 更新支持昆仑芯 XPU 的 Paddle Lite 库

- 下载 Paddle Lite 源码;

Expand All @@ -151,44 +151,77 @@ Paddle Lite 已支持百度 XPU 在 X86 和 ARM 服务器(例如飞腾 FT-2000

```shell
$ # For amd64,如果报找不到 cxx11:: 符号的编译错误,请将 gcc 切换到 4.8 版本。
$ ./lite/tools/build_linux.sh --arch=x86 --with_baidu_xpu=ON
$ ./lite/tools/build_linux.sh --arch=x86 --with_kunlunxin_xpu=ON

$ # For arm64(FT-2000+/64), arm 环境下需要设置环境变量 CC 和 CXX,分别指定 C 编译器和 C++ 编译器的路径
$ export CC=<path_to_your_c_compiler>
$ export CXX=<path_to_your_c++_compiler>
$ ./lite/tools/build_linux.sh --arch=armv8 --with_baidu_xpu=ON
$ ./lite/tools/build_linux.sh --arch=armv8 --with_kunlunxin_xpu=ON
```

- 替换库文件和头文件

```shell
cd PaddleLite-linux-demo/image_classification_demo/shell
./update_libs.sh <lite_inference_dir> <demo_libs_dir>
# For amd64,lite_inference_dir 一般为编译生成的 build.lite.linux.x86.gcc.baidu_xpu/inference_lite_lib,demo_libs_dir 为 PaddleLite-linux-demo/libs/PaddleLite/amd64
# For arm64,lite_inference_dir一般为编译生成的 build.lite.linux.armv8.gcc.baidu_xpu/inference_lite_lib.armlinux.armv8.xpu,demo_libs_dir 为 PaddleLite-linux-demo/libs/PaddleLite/amd64
# For amd64,lite_inference_dir 一般为编译生成的 build.lite.linux.x86.gcc.kunlunxin_xpu/inference_lite_lib,demo_libs_dir 为 PaddleLite-linux-demo/libs/PaddleLite/amd64
# For arm64,lite_inference_dir一般为编译生成的 build.lite.linux.armv8.gcc.kunlunxin_xpu/inference_lite_lib.armlinux.armv8.xpu,demo_libs_dir 为 PaddleLite-linux-demo/libs/PaddleLite/amd64
```

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

- windows 版本的编译适配
## 子图方式接入

1) Paddle Lite 使用 XPU kernel 的方案
### 运行图像分类示例程序

### 更新模型

### 更新支持昆仑芯 XPU XTCL 方式的 Paddle Lite 库

- 下载 Paddle Lite 源码;

```shell
$ git clone https://github.com/PaddlePaddle/Paddle-Lite.git
$ cd Paddle-Lite
$ lite\\tools\\build_windows.bat with_extra without_python use_vs2017 with_dynamic_crt with_baidu_xpu baidu_xpu_sdk_root D:\\xpu_toolchain_windows\\output
$ git checkout <release-version-tag>
```

- 编译 publish so for amd64 or arm64(FT-2000+/64);

```shell
$ # For amd64
$ ./lite/tools/build_linux.sh \
$ --arch=x86 \
$ --with_nnadapter=ON \
$ --nnadapter_with_kunlunxin_xtcl=ON \
$ --nnadapter_kunlunxin_xtcl_sdk_root=<path-to-kunlunxin-xtcl-sdk-root>

$ # For arm64(FT-2000+/64), arm 环境下需要设置环境变量 CC 和 CXX,分别指定 C 编译器和 C++ 编译器的路径
$ export CC=<path_to_your_c_compiler>
$ export CXX=<path_to_your_c++_compiler>
$ ./lite/tools/build_linux.sh \
$ --arch=armv8 \
$ --with_nnadapter=ON \
$ --nnadapter_with_kunlunxin_xtcl=ON \
$ --nnadapter_kunlunxin_xtcl_sdk_root=<path-to-kunlunxin-xtcl-sdk-root>
```

2) Paddle Lite 使用 XPU XTCL 子图方案
- 替换库文件和头文件

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

## windows 版本的编译适配

1) Paddle Lite 使用 XPU kernel 的方案

```shell
$ cd Paddle-Lite
$ lite\\tools\\build_windows.bat with_extra without_python use_vs2017 with_dynamic_crt with_baidu_xpu with_baidu_xpu_xtcl baidu_xpu_sdk_root D:\\xpu_toolchain_windows\\output
$ lite\\tools\\build_windows.bat with_extra without_python use_vs2017 with_dynamic_crt with_kunlunxin_xpu kunlunxin_xpu_sdk_root D:\\xpu_toolchain_windows\\output
```

编译脚本 `build_windows.bat` 使用可参考[源码编译( Windows )](../source_compile/windows_compile_windows)进行环境配置和查找相应编译参数

## 其它说明

- 如需更进一步的了解相关产品的信息,请联系欧阳剑 ouyangjian@baidu.com
- 百度昆仑的研发同学正在持续适配更多的 Paddle 算子,以便支持更多的 Paddle 模型。
- 昆仑芯的研发同学正在持续适配更多的 Paddle 算子,以便支持更多的 Paddle 模型。
8 changes: 4 additions & 4 deletions docs/develop_guides/add_hardware.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# 新增硬件

## 背景
- 深度学习技术在安防、交通、医疗、工业制造等行业获得了较广泛的应用,为了满足实际需求,越来越多算力更高、功耗更低的专用硬件被研发出来投向市场,涌现了诸如华为昇腾/麒麟 SoC 的达芬奇架构 NPU 、瑞芯微 RK/RV 系列 SoC 的 NPU 、寒武纪 MLU 、谷歌 TPU 和百度 XPU 等不同形态的硬件,以明显优于传统 CPU 、 GPU 的性能和功耗的特点,逐步获得市场的认可,被广泛用于服务器端、边缘端和移动端。
- 深度学习技术在安防、交通、医疗、工业制造等行业获得了较广泛的应用,为了满足实际需求,越来越多算力更高、功耗更低的专用硬件被研发出来投向市场,涌现了诸如华为昇腾/麒麟 SoC 的达芬奇架构 NPU 、瑞芯微 RK/RV 系列 SoC 的 NPU 、寒武纪 MLU 、谷歌 TPU 和昆仑芯 XPU 等不同形态的硬件,以明显优于传统 CPU 、 GPU 的性能和功耗的特点,逐步获得市场的认可,被广泛用于服务器端、边缘端和移动端。

## 意义
- 良好的软件生态是硬件获得成功的关键,硬件驱动的兼容性、成熟的编译工具链、完善的 SDK 、 API 和文档、更多第三方深度学习框架的支持,都是影响硬件能否积攒用户、建立完善的软件生态的重要因素。特别的,在实际的项目部署过程中,推理引擎对硬件的支持尤为关键,它能屏蔽底层硬件细节,提供统一的接口,实现同一个模型在多种硬件间无缝迁移和异构计算,帮助应用提供方降低迁移成本并获得更高的性能;
- Paddle Lite 是一款支持服务器端、边缘端和移动端场景的推理引擎,在设计之初就考虑了如何友好的支持不同形态的硬件(例如 CPU 、 GPU 、 DSP 、 FPGA 和 ASIC 等),主要表现在推理框架与硬件解耦合,提出了统一的图优化 Pass 层、算子层和 Kernel 层接口,在实现灵活配置多硬件间异构执行的同时,最大限度地减少适配过程中对框架的修改,真正做到硬件细节对用户透明;
- Paddle Lite 支持的硬件目前已多达十余种,这其中不乏像华为 NPU 、瑞芯微 NPU 、联发科 APU 、颖脉( Imagination ) NNA、百度 XPU 和寒武纪 MLU 等一线芯片(或 IP )厂商研发的 ASIC 芯片,我们也希望更多的硬件(或 IP )厂商与我们合作,共建 Paddle Lite 和 PaddlePaddle 的硬件生态。
- Paddle Lite 支持的硬件目前已多达十余种,这其中不乏像华为 NPU 、瑞芯微 NPU 、联发科 APU 、颖脉( Imagination ) NNA、昆仑芯 XPU 和寒武纪 MLU 等一线芯片(或 IP )厂商研发的 ASIC 芯片,我们也希望更多的硬件(或 IP )厂商与我们合作,共建 Paddle Lite 和 PaddlePaddle 的硬件生态。
- 在阐述硬件接入的具体步骤前,我们将简单介绍下 Paddle Lite 的工作原理,即从读入模型文件到硬件执行过程中都经历了哪些步骤?

## Paddle Lite 是如何工作的?
Expand Down Expand Up @@ -59,7 +59,7 @@
优点是灵活,但缺点也显而易见,性能的好坏取决于负责接入框架的研发同学的能力和经验,更依赖对硬件的熟悉程度;

- **中间表示层( Intermediate Representation , IR )接口( High Level )**
- 组网 IR 和运行时 API :例如 NVIDIA 的 TensorRT 、 Intel 的 nGraph 、华为 HiAI IR 和百度昆仑的 XTCL 接口。
- 组网 IR 和运行时 API :例如 NVIDIA 的 TensorRT 、 Intel 的 nGraph 、华为 HiAI IR 和昆仑芯的 XTCL 接口。

优点是屏蔽硬件细节,模型的优化、生成和执行由运行时库完成,对负责接入框架的研发同学要求较低,性能取决于硬件厂商(或 IP 提供商)的研发能力,相对可控;

Expand Down Expand Up @@ -256,7 +256,7 @@
To https://github.com/UserName/Paddle-Lite.git
* [new branch] hongming/print_ssa_graph -> hongming/print_ssa_graph
```
- 发起 Pull Request :登录 github ,在自己账户下找到并进入 UserName/Paddle-Lite 仓库,这时会自动提示创建 Pull Request ,点击 Create Pull Request 按钮,一般来说会自动选择比较更改的仓库和分支,如果需要手动设置,可将 base repository 选择为 PaddlePaddle/Paddle-Lite , base 分支为 develop ,然后将 head repository 选择为 UserName/Paddle-Lite ,compare分支为 hongming/print_ssa_graph 。 PR(Pull Request) 的标题必须用英文概括本次提交的修改内容,例如修复了什么问题,增加了什么功能。同时,为了便于其他人快速得知该PR影响了哪些模块,应该在标题前添加中括号 + 模块名称进行标识,例如 "[HuaweiKirinNPU][BaiduXPU] Temporarily toggle printing ssa graph, test=develop" 。 PR 的描述必须详细描述本次修改的原因/背景、解决方法、对其它模块会产生何种影响(例如生成库的大小增量是多少),性能优化的 PR 需要有性能对比数据等。
- 发起 Pull Request :登录 github ,在自己账户下找到并进入 UserName/Paddle-Lite 仓库,这时会自动提示创建 Pull Request ,点击 Create Pull Request 按钮,一般来说会自动选择比较更改的仓库和分支,如果需要手动设置,可将 base repository 选择为 PaddlePaddle/Paddle-Lite , base 分支为 develop ,然后将 head repository 选择为 UserName/Paddle-Lite ,compare分支为 hongming/print_ssa_graph 。 PR(Pull Request) 的标题必须用英文概括本次提交的修改内容,例如修复了什么问题,增加了什么功能。同时,为了便于其他人快速得知该PR影响了哪些模块,应该在标题前添加中括号 + 模块名称进行标识,例如 "[HuaweiKirinNPU][KunlunxinXPU] Temporarily toggle printing ssa graph, test=develop" 。 PR 的描述必须详细描述本次修改的原因/背景、解决方法、对其它模块会产生何种影响(例如生成库的大小增量是多少),性能优化的 PR 需要有性能对比数据等。
- 签署 CLA 协议:在首次向 Paddle Lite 提交 Pull Request 时,您需要您签署一次 CLA(Contributor License Agreement) 协议,以保证您的代码可以被合入。
- 等待 CI 测试完成:您在 Pull Request 中每提交一次新的 commit 后,都会触发一系列 CI 流水线(根据场景/硬件的不同,一般会有多个流水线),它将会在几个小时内完成,只需保证带有 Required 的流水线通过即可。例如下图所示,每项流水线测试通过后,都会在前面打勾,否则打叉,可点击 Details 查看日志定位错误原因:
![](https://user-images.githubusercontent.com/9973393/113404216-631e0f00-93da-11eb-8dad-fb47c8f512de.png)
Expand Down
2 changes: 1 addition & 1 deletion docs/guide/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Paddle Lite 是一组工具,可帮助开发者在移动设备、嵌入式设
- 嵌入式 Linux:请浏览 [Linux(ARM) 工程示例](../demo_guides/linux_arm_demo)
- windows、macOS、Linux 等 x86 架构的 CPU 主机: 请浏览 [Paddle Lite 使用 X86 预测部署](../demo_guides/x86)
- FPGA:对于百度自研的 [EdgeBoard 开发板](https://ai.baidu.com/tech/hardware/deepkit)请浏览 [使用 EdgeBoard FPGA 预测部署](../demo_guides/fpga),对于英特尔 FPGA 平台请浏览 [Paddle Lite 使用英特尔 FPGA 预测部署](../demo_guides/intel_fpga)
- 百度 XPU(昆仑 AI 加速芯片):请浏览 [Paddle Lite 使用百度 XPU 预测部署](../demo_guides/baidu_xpu)
- 昆仑芯 XPU(昆仑 AI 加速芯片):请浏览 [Paddle Lite 使用昆仑芯 XPU 预测部署](../demo_guides/kunlunxin_xpu)
- AI 加速芯片: 对于 华为麒麟 NPU 请浏览 [Paddle Lite 使用华为麒麟 NPU 预测部署](../demo_guides/huawei_kirin_npu), 对于瑞芯微 NPU 请浏览 [Paddle Lite 使用瑞芯微 NPU 预测部署](../demo_guides/rockchip_npu),对于联发科 APU 请浏览 [Paddle Lite 使用联发科 APU 预测部署](../demo_guides/mediatek_apu),对于颖脉 NNA 请浏览 [Paddle Lite 使用颖脉 NNA 预测部署](../demo_guides/imagination_nna),对于比特大陆的算丰(SOPHON)AI 芯片 请浏览 [Paddle Lite 使用 Bitmain Sophon BM1682/BM1684 预测部署](../demo_guides/bitmain)

## 技术路线
Expand Down
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Welcome to Paddle Lite's documentation!
demo_guides/fpga
demo_guides/huawei_kirin_npu
demo_guides/huawei_ascend_npu
demo_guides/baidu_xpu
demo_guides/kunlunxin_xpu
demo_guides/rockchip_npu
demo_guides/amlogic_npu
demo_guides/mediatek_apu
Expand Down
2 changes: 1 addition & 1 deletion docs/quick_start/release_lib.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
|armv8 |[v2.10](https://github.com/PaddlePaddle/Paddle-Lite/releases/download/v2.10/inference_lite_lib.armv8.clang.with_exception.with_extra.with_cv.opencl.tar.gz) |


## 百度昆仑 XPU
## 昆仑芯 XPU

|Arch |下载链接 |适用的操作系统 |
|:-----:|:-----:|:-----:|
Expand Down
12 changes: 6 additions & 6 deletions docs/quick_start/support_hardware.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,15 @@ Paddle Lite 支持 **英特尔 (Intel) FPGA**,支持列表如下:
- 英特尔 (Intel) FPGA: [Paddle Lite 使用英特尔 FPGA 预测部署](../demo_guides/intel_fpga)


## 百度 (Baidu) XPU
## 昆仑芯 (kunlunxin) XPU

Paddle Lite 支持百度 XPU,支持列表如下:
- 百度昆仑 818-100 芯片
- 百度昆仑 818-300 芯片
Paddle Lite 支持昆仑芯 XPU,支持列表如下:
- 昆仑芯 818-100 芯片
- 昆仑芯 818-300 芯片

### 百度 (Baidu) XPU 环境准备及示例程序
### 昆仑芯 (kunlunxin) XPU 环境准备及示例程序

- [Paddle Lite 使用百度 XPU 预测部署](../demo_guides/baidu_xpu)
- [Paddle Lite 使用昆仑芯 XPU 预测部署](../demo_guides/kunlunxin_xpu)

## 华为 (Huawei) 麒麟 NPU

Expand Down
Loading

0 comments on commit 3b04cc6

Please sign in to comment.