mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-25 01:20:43 +08:00
Support Python deployment on Huawei Ascend NPU
This commit is contained in:
@@ -66,6 +66,7 @@ option(ENABLE_TEXT "Whether to enable text models usage." OFF)
|
||||
option(ENABLE_FLYCV "Whether to enable flycv to boost image preprocess." OFF)
|
||||
option(ENABLE_TIMVX "Whether to compile for TIMVX deploy." OFF)
|
||||
option(WITH_CANN "Whether to compile for Huawei Ascend deploy with CANN." OFF)
|
||||
option(WITH_CANN_PY "Whether to compile for Huawei Ascend deploy with CANN using python." OFF)
|
||||
option(WITH_TESTING "Whether to compile with unittest." OFF)
|
||||
############################# Options for Android cross compiling #########################
|
||||
option(WITH_OPENCV_STATIC "Use OpenCV static lib for Android." OFF)
|
||||
@@ -143,7 +144,6 @@ if (ENABLE_TIMVX)
|
||||
include(${PROJECT_SOURCE_DIR}/cmake/timvx.cmake)
|
||||
endif()
|
||||
|
||||
|
||||
if (WITH_CANN)
|
||||
if(NOT ${ENABLE_LITE_BACKEND})
|
||||
message(WARNING "While compiling with -DWITH_CANN=ON, will force to set -DENABLE_LITE_BACKEND=ON")
|
||||
@@ -151,6 +151,22 @@ if (WITH_CANN)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (WITH_CANN_PY)
|
||||
message(WARNING "This is only for CANN python version")
|
||||
if(NOT ${ENABLE_LITE_BACKEND})
|
||||
set(ENABLE_LITE_BACKEND ON)
|
||||
endif()
|
||||
execute_process(COMMAND sh -c "ls *.so*" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/lib
|
||||
COMMAND sh -c "xargs ${PATCHELF_EXE} --set-rpath '$ORIGIN'" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/lib
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE curr_out
|
||||
ERROR_VARIABLE curr_out)
|
||||
if(ret EQUAL "1")
|
||||
message(FATAL_ERROR "Failed to patchelf tensorrt libraries.")
|
||||
endif()
|
||||
message(STATUS "result:${result} out:${curr_out}")
|
||||
endif()
|
||||
|
||||
|
||||
if(ANDROID OR IOS)
|
||||
if(ENABLE_ORT_BACKEND)
|
||||
|
||||
@@ -60,8 +60,11 @@ else() # Linux
|
||||
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
|
||||
if(WITH_CANN)
|
||||
set(PADDLELITE_URL "https://bj.bcebos.com/fastdeploy/test/lite-linux_arm64_huawei_ascend_npu_1121.tgz")
|
||||
elseif(WITH_CANN_PY)
|
||||
set(PADDLELITE_URL "https://bj.bcebos.com/fastdeploy/test/lite-linux_arm64_huawei_ascend_npu_python_1207.tgz")
|
||||
else()
|
||||
set(PADDLELITE_URL "${PADDLELITE_URL_PREFIX}/lite-linux-arm64-20220920.tgz")
|
||||
endif()
|
||||
else()
|
||||
if(ENABLE_TIMVX)
|
||||
set(PADDLELITE_URL "https://bj.bcebos.com/fastdeploy/test/lite-linux_armhf_1130.tgz")
|
||||
|
||||
@@ -37,6 +37,8 @@ function(fastdeploy_summary)
|
||||
message(STATUS " ENABLE_POROS_BACKEND : ${ENABLE_POROS_BACKEND}")
|
||||
message(STATUS " ENABLE_TRT_BACKEND : ${ENABLE_TRT_BACKEND}")
|
||||
message(STATUS " ENABLE_OPENVINO_BACKEND : ${ENABLE_OPENVINO_BACKEND}")
|
||||
message(STATUS " WITH_CANN : ${WITH_CANN}")
|
||||
message(STATUS " WITH_CANN_PY : ${WITH_CANN_PY}")
|
||||
if(ENABLE_ORT_BACKEND)
|
||||
message(STATUS " ONNXRuntime version : ${ONNXRUNTIME_VERSION}")
|
||||
endif()
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
| ENABLE_PADDLE_BACKEND | 默认OFF,是否编译集成Paddle Inference后端(CPU/GPU上推荐打开) |
|
||||
| ENABLE_LITE_BACKEND | 默认OFF,是否编译集成Paddle Lite后端(编译Android库时需要设置为ON) |
|
||||
| ENABLE_RKNPU2_BACKEND | 默认OFF,是否编译集成RKNPU2后端(RK3588/RK3568/RK3566上推荐打开) |
|
||||
| WITH_CANN | 默认OFF,当在华为昇腾NPU上部署时, 需要设置为ON |
|
||||
| ENABLE_TIMVX | 默认OFF,需要在RV1126/RV1109上部署时,需设置为ON |
|
||||
| ENABLE_TRT_BACKEND | 默认OFF,是否编译集成TensorRT后端(GPU上推荐打开) |
|
||||
| ENABLE_OPENVINO_BACKEND | 默认OFF,是否编译集成OpenVINO后端(CPU上推荐打开) |
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
FastDeploy基于 Paddle-Lite 后端支持在华为昇腾NPU上进行部署推理。
|
||||
更多详细的信息请参考:[PaddleLite部署示例](https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/docs/demo_guides/huawei_ascend_npu.md)。
|
||||
|
||||
本文档介绍如何在ARM Linux操作系统环境下, 编译基于 PaddleLite 的 C++ FastDeploy 源码, 生成目标硬件为华为昇腾NPU的预测库。
|
||||
本文档介绍如何在ARM Linux操作系统环境下, 编译基于 PaddleLite 的 C++ 与 Python 的FastDeploy源码, 生成目标硬件为华为昇腾NPU的预测库。
|
||||
|
||||
更多编译选项请参考[FastDeploy编译选项说明](./README.md)
|
||||
|
||||
@@ -60,7 +60,7 @@ $ npu-smi info
|
||||
- 如果用户在Docker内想使用其他的CANN版本,请自行更新 Dockerfile 文件内的 CANN 下载路径, 同时更新相应的驱动和固件. 当前Dockerfile内默认为[CANN 5.1.RC2](https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN%205.1.RC2/Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run).
|
||||
- 如果用户不想使用docker,可以参考由PaddleLite提供的[ARM Linux环境下的编译环境准备](https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/docs/source_compile/arm_linux_compile_arm_linux.rst)自行配置编译环境, 之后再自行下载并安装相应的CANN软件包来完成配置.
|
||||
|
||||
## 三.基于 PaddleLite 的 FastDeploy 库编译
|
||||
## 三.基于 PaddleLite 的 C++ FastDeploy 库编译
|
||||
搭建好编译环境之后,编译命令如下:
|
||||
```bash
|
||||
# Download the latest source code
|
||||
@@ -80,4 +80,20 @@ make install
|
||||
```
|
||||
编译完成之后,会在当前的build目录下生成 fastdeploy-cann 目录,表示基于 PadddleLite CANN 的 FastDeploy 库编译完成。
|
||||
|
||||
华为昇腾NPU 上部署 PaddleClas 分类模型请参考:[PaddleClas 华为升腾NPU C++ 部署示例](../../../examples/vision/classification/paddleclas/ascend/README.md)
|
||||
## 四.基于 PaddleLite 的 Python FastDeploy 库编译
|
||||
搭建好编译环境之后,编译命令如下:
|
||||
```bash
|
||||
# Download the latest source code
|
||||
git clone https://github.com/PaddlePaddle/FastDeploy.git
|
||||
cd FastDeploy/python
|
||||
export WITH_CANN_PY=ON
|
||||
export ENABLE_VISION=ON
|
||||
|
||||
python setup.py build
|
||||
python setup.py bdist_wheel
|
||||
|
||||
#编译完成后,请用户自行安装当前目录的dist文件夹内的whl包.
|
||||
```
|
||||
|
||||
华为昇腾NPU 上使用C++部署 PaddleClas 分类模型请参考:[PaddleClas 华为升腾NPU C++ 部署示例](../../../examples/vision/classification/paddleclas/ascend/cpp/README.md)
|
||||
华为昇腾NPU 上使用Python部署 PaddleClas 分类模型请参考:[PaddleClas 华为升腾NPU Python 部署示例](../../../examples/vision/classification/paddleclas/ascend/python/README.md)
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# PaddleClas 分类模型在华为昇腾NPU 上的部署
|
||||
目前 FastDeploy 已经支持在华为昇腾 NPU 上, 基于 PaddleLite 部署 PaddleClas 模型.
|
||||
|
||||
## 详细部署文档
|
||||
|
||||
在华为昇腾NPU 上支持 Python 和 C++ 的部署。
|
||||
|
||||
- [C++部署](./cpp)
|
||||
- [Python部署](./python)
|
||||
@@ -1,14 +1,14 @@
|
||||
# PaddleClas Ascend NPU C++ 部署示例
|
||||
# PaddleClas 华为昇腾 NPU C++ 部署示例
|
||||
本目录下提供的 `infer.cc`,可以帮助用户快速完成 PaddleClas 模型在华为昇腾NPU上的部署.
|
||||
本例在鲲鹏920+Atlas 300I Pro的硬件平台下完成测试.(目前暂不支持 X86 CPU的Linux系统部署)
|
||||
|
||||
## 部署准备
|
||||
### 华为昇腾NPU 部署环境编译准备
|
||||
- 1. 软硬件环境满足要求,以及华为昇腾NPU的部署编译环境的准备,请参考:[FastDeploy 华为昇腾NPU部署环境编译准备](../../../../../../docs/cn/build_and_install/ascend.md)
|
||||
- 1. 软硬件环境满足要求,以及华为昇腾NPU的部署编译环境的准备,请参考:[FastDeploy 华为昇腾NPU部署环境编译准备](../../../../../../docs/cn/build_and_install/huawei_ascend.md.md)
|
||||
|
||||
## 在 华为昇腾NPU 上部署ResNet50_Vd分类模型
|
||||
请按照以下步骤完成在 华为昇腾NPU 上部署 ResNet50_Vd 模型:
|
||||
1. 完成[华为昇腾NPU 部署环境编译准备](../../../../../../docs/cn/build_and_install/ascend.md)
|
||||
1. 完成[华为昇腾NPU 部署环境编译准备](../../../../../../docs/cn/build_and_install/huawei_ascend.md.md)
|
||||
|
||||
2. 编译当前demo, 并完成部署:
|
||||
```bash
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# PaddleClas 华为昇腾 NPU Python 部署示例
|
||||
本目录下提供的 `infer.py`,可以帮助用户快速完成 PaddleClas 模型在华为昇腾NPU上的部署.
|
||||
本例在鲲鹏920+Atlas 300I Pro的硬件平台下完成测试.(目前暂不支持 X86 CPU的Linux系统部署)
|
||||
|
||||
## 部署准备
|
||||
### 华为昇腾 NPU 部署环境编译准备
|
||||
- 1. 软硬件环境满足要求,以及华为昇腾NPU的部署编译环境的准备,请参考:[FastDeploy 华为昇腾NPU部署环境编译准备](../../../../../../docs/cn/build_and_install/huawei_ascend.md.md)
|
||||
|
||||
## 在 华为昇腾NPU 上部署ResNet50_Vd分类模型
|
||||
请按照以下步骤完成在 华为昇腾NPU 上部署 ResNet50_Vd 模型:
|
||||
1. 完成[华为昇腾NPU 部署环境编译准备](../../../../../../docs/cn/build_and_install/huawei_ascend.md.md)
|
||||
|
||||
2. 运行以下命令完成部署:
|
||||
```bash
|
||||
# 下载模型
|
||||
wget https://bj.bcebos.com/paddlehub/fastdeploy/ResNet50_vd_infer.tgz
|
||||
tar -xvf ResNet50_vd_infer.tgz
|
||||
# 下载图片
|
||||
wget https://gitee.com/paddlepaddle/PaddleClas/raw/release/2.4/deploy/images/ImageNet/ILSVRC2012_val_00000010.jpeg
|
||||
|
||||
# 运行程序
|
||||
python infer.py --model ResNet50_vd_infer --image ILSVRC2012_val_00000010.jpeg
|
||||
```
|
||||
|
||||
部署成功后输出结果如下:
|
||||
```bash
|
||||
ClassifyResult(
|
||||
label_ids: 153,
|
||||
scores: 0.685547,
|
||||
)
|
||||
#此结果出现后,前后还会出现一些华为昇腾自带的log信息,属正常现象.
|
||||
```
|
||||
@@ -0,0 +1,43 @@
|
||||
from pickletools import optimize
|
||||
import fastdeploy as fd
|
||||
import cv2
|
||||
import os
|
||||
|
||||
|
||||
def parse_arguments():
|
||||
import argparse
|
||||
import ast
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"--model", required=True, help="Path of PaddleClas model.")
|
||||
parser.add_argument(
|
||||
"--image", type=str, required=True, help="Path of test image file.")
|
||||
parser.add_argument(
|
||||
"--topk", type=int, default=1, help="Return topk results.")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def build_option():
|
||||
option = fd.RuntimeOption()
|
||||
|
||||
option.use_cann()
|
||||
option.set_lite_nnadapter_device_names(["huawei_ascend_npu"])
|
||||
|
||||
return option
|
||||
|
||||
|
||||
args = parse_arguments()
|
||||
|
||||
# 配置runtime,加载模型
|
||||
runtime_option = build_option()
|
||||
|
||||
model_file = os.path.join(args.model, "inference.pdmodel")
|
||||
params_file = os.path.join(args.model, "inference.pdiparams")
|
||||
config_file = os.path.join(args.model, "inference_cls.yaml")
|
||||
model = fd.vision.classification.PaddleClasModel(
|
||||
model_file, params_file, config_file, runtime_option=runtime_option)
|
||||
|
||||
# 预测图片分类结果
|
||||
im = cv2.imread(args.image)
|
||||
result = model.predict(im, args.topk)
|
||||
print(result)
|
||||
@@ -57,6 +57,7 @@ setup_configs = dict()
|
||||
setup_configs["ENABLE_RKNPU2_BACKEND"] = os.getenv("ENABLE_RKNPU2_BACKEND",
|
||||
"OFF")
|
||||
setup_configs["WITH_CANN"] = os.getenv("WITH_CANN", "OFF")
|
||||
setup_configs["WITH_CANN_PY"] = os.getenv("WITH_CANN_PY", "OFF")
|
||||
setup_configs["ENABLE_ORT_BACKEND"] = os.getenv("ENABLE_ORT_BACKEND", "OFF")
|
||||
setup_configs["ENABLE_OPENVINO_BACKEND"] = os.getenv("ENABLE_OPENVINO_BACKEND",
|
||||
"OFF")
|
||||
|
||||
Reference in New Issue
Block a user