diff --git a/docs/lite/api/source_zh_cn/api_cpp/mindspore.md b/docs/lite/api/source_zh_cn/api_cpp/mindspore.md index 052683aa06dfcc2317ca5332faeeabeede7e4481..92fb78250c0aa012ceec23037d03533637101333 100644 --- a/docs/lite/api/source_zh_cn/api_cpp/mindspore.md +++ b/docs/lite/api/source_zh_cn/api_cpp/mindspore.md @@ -19,6 +19,7 @@ | [Context](#context) | 保存执行中的环境变量。 | √ | √ | | [DeviceInfoContext](#deviceinfocontext) | 不同硬件设备的环境信息。 | √ | √ | | [CPUDeviceInfo](#cpudeviceinfo) | 模型运行在CPU上的配置。 | √ | √ | +| [DSPDeviceInfo](#dspdeviceinfo) | 模型运行在DSP上的配置。支持ft04和ft78设备。 | ✕ | √ | | [GPUDeviceInfo](#gpudeviceinfo) | 模型运行在GPU上的配置。 | √ | √ | | [KirinNPUDeviceInfo](#kirinnpudeviceinfo) | 模型运行在NPU上的配置。 | ✕ | √ | | [AscendDeviceInfo](#ascenddeviceinfo) | 模型运行在Atlas 200/300/500推理产品、Atlas推理系列产品上的配置。 | √ | √ | @@ -1187,6 +1188,52 @@ inline std::string GetBufferOptimizeMode() const 已配置的缓存优化模式。 +## DSPDeviceInfo + +\#include <[context.h](https://gitee.com/mindspore/mindspore-lite/blob/master/include/cxx_api/context.h)> + +派生自[DeviceInfoContext](#deviceinfocontext),模型运行在DSP上的配置。 + +### 公有成员函数 + +| 函数 | 云侧推理是否支持 | 端侧推理是否支持 | +| ------------ | ---------|---------| +| [enum DeviceType GetDeviceType() const override](#getdevicetype-5) | x | √ | +| [void SetDeviceID(uint32_t device_id)](#setdeviceid-2) | x | √ | +| [uint32_t GetDeviceID() const](#getdeviceid-2) | x | √ | + +#### GetDeviceType + +```cpp +enum DeviceType GetDeviceType() const override +``` + +- 返回值 + + DeviceType::kDSP + +#### SetDeviceID + +```cpp +void SetDeviceID(uint32_t device_id) +``` + +用于指定设备ID。 + +- 参数 + + - `device_id`: 设备ID。 + +#### GetDeviceID + +```cpp +uint32_t GetDeviceID() const +``` + +- 返回值 + + 已配置的设备ID。 + ## Key ```cpp diff --git a/docs/lite/docs/source_zh_cn/advanced/third_party/asic.rst b/docs/lite/docs/source_zh_cn/advanced/third_party/asic.rst index ee1e47cb43084f82827e6648a057b3d40b89b9e9..a52807ddb7e44d482cdefeb872fd0f43102d7d61 100644 --- a/docs/lite/docs/source_zh_cn/advanced/third_party/asic.rst +++ b/docs/lite/docs/source_zh_cn/advanced/third_party/asic.rst @@ -7,7 +7,8 @@ .. toctree:: :maxdepth: 1 - + + dsp_info npu_info tensorrt_info ascend_info diff --git a/docs/lite/docs/source_zh_cn/advanced/third_party/dsp_info.md b/docs/lite/docs/source_zh_cn/advanced/third_party/dsp_info.md new file mode 100644 index 0000000000000000000000000000000000000000..1afe59216d5a519721a4bbcbe8d3f1f0d0ae19df --- /dev/null +++ b/docs/lite/docs/source_zh_cn/advanced/third_party/dsp_info.md @@ -0,0 +1,54 @@ +# 集成DSP使用说明 + +[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/master/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/master/docs/lite/docs/source_zh_cn/advanced/third_party/dsp_info.md) + +## 使用步骤 + +### 环境准备 + +在基本的[环境准备](https://www.mindspore.cn/lite/docs/zh-CN/master/build/build.html)之外,使用DSP需要集成dsp_sdk。dsp_sdk包含了使用DSP的异构编程接口,以及封装成静态库的接口实现(名为libhthread_host.a)。将dsp_sdk目录设置为环境变量`${DSP_SDK_PATH}`,构建脚本将使用这个环境变量寻找dsp_sdk。此外还需要交叉编译工具,安装命令如下: + +```bash +sudo apt-get update && apt-get install -y --no-install-recommends \ + g++-arm-linux-gnueabihf gcc-arm-linux-gnueabihf +``` + +### 编译构建 + +在Linux环境,执行MindSpore Lite[源代码](https://gitee.com/mindspore/mindspore-lite)根目录下的build.sh脚本,将在MindSpore Lite源代码根目录下的output文件夹构建出集成DSP的MindSpore Lite包,其中包含libmindspore-lite动态库以及测试工具Benchmark。命令如下: + +```bash +export MSLITE_REGISTRY_DEVICE=ft78 +export DSP_SDK_PATH=${your path}/dsp_sdk +export MSLITE_ENABLE_TESTCASES=ON +export MSLITE_ENABLE_TOOLS=ON +bash build.sh -I arm32 -j8 +``` + +其中,`${your path}/dsp_sdk`为dsp_sdk的路径。`MSLITE_REGISTRY_DEVICE`有两个选项:`ft78`和`ft04`,分别对应不同的DSP芯片。有关编译详情见[Linux环境编译](https://www.mindspore.cn/lite/docs/zh-CN/master/build/build.html#linux环境编译)。 + +### 集成使用 + +- 集成说明 + + 开发者集成DSP功能时,需要在代码中[配置DSP后端](https://www.mindspore.cn/lite/docs/zh-CN/master/infer/runtime_cpp.html#配置使用dsp后端),相关使用方法可以参考[使用Runtime执行推理(C++)](https://www.mindspore.cn/lite/docs/zh-CN/master/infer/runtime_cpp.html)。 + +- Benchmark测试DSP推理 + + 用户可以使用MindSpore Lite的Benchmark工具测试DSP推理性能。将Benchmark工具拷贝到`ft78`或者`ft04`设备上,执行如下命令: + + ```bash + ./benchmark --device=DSP --modelFile=./models/test_benchmark.ms --timeProfiling=true + ``` + +有关Benchmark使用详情,见[Benchmark使用](https://www.mindspore.cn/lite/docs/zh-CN/master/tools/benchmark_tool.html)。 + +有关环境变量设置,将libmindspore-lite.so拷贝到`ft78`或`ft04`设备的/usr/lib目录即可。 + +## 芯片支持 + +支持`ft04`和`ft78`两种设备类型。 + +## 算子支持 + +DSP算子支持见[Lite 算子支持](https://www.mindspore.cn/lite/docs/zh-CN/master/reference/operator_list_lite.html)。 diff --git a/docs/lite/docs/source_zh_cn/build/build.md b/docs/lite/docs/source_zh_cn/build/build.md index 556c3b624b59e533a0b9b397d6febf3d394d83d1..bd6b61002cff947c4e3a17393cb01964ce031a29 100644 --- a/docs/lite/docs/source_zh_cn/build/build.md +++ b/docs/lite/docs/source_zh_cn/build/build.md @@ -93,7 +93,7 @@ MindSpore Lite根目录下的`build.sh`脚本可用于MindSpore Lite的编译。 | MSLITE_ENABLE_MODEL_PRE_INFERENCE | 是否启用模型编译时预推理 | on、off | off | | MSLITE_ENABLE_GITEE_MIRROR | 是否使能三方库从码云镜像下载 | on、off | off | - > - TensorRT 和 Kirin NPU 的编译环境配置,参考[专用芯片集成说明](https://www.mindspore.cn/lite/docs/zh-CN/master/advanced/third_party/asic.html)。 + > - TensorRT、Kirin NPU 和 DSP 的编译环境配置,参考[专用芯片集成说明](https://www.mindspore.cn/lite/docs/zh-CN/master/advanced/third_party/asic.html)。 > - 启用AVX指令集时,需要运行环境的CPU同时支持avx特性和fma特性。 > - 模型转换工具的编译时间较长,若非必要,建议通过`MSLITE_ENABLE_CONVERTER`关闭转换工具编译,以加快编译速度。 > - 解密所需的OpenSSL加密库crypto支持的版本为1.1.1k,需要用户自行下载编译,相关方法可参考:。此外,还需要将libcrypto.so.1.1文件的路径加入到LD_LIBRARY_PATH中。 diff --git a/docs/lite/docs/source_zh_cn/infer/runtime_cpp.md b/docs/lite/docs/source_zh_cn/infer/runtime_cpp.md index 90fab213f4ccbb1387513e039bdd20b1dd265d87..c4e5bfd209e4c84292ee55c3d26c31edde0f2605 100644 --- a/docs/lite/docs/source_zh_cn/infer/runtime_cpp.md +++ b/docs/lite/docs/source_zh_cn/infer/runtime_cpp.md @@ -60,7 +60,7 @@ cpu_device_info->SetEnableFP16(true); device_list.push_back(cpu_device_info); ``` -> `MutableDeviceInfo`中支持用户设置设备信息,包括[CPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#cpudeviceinfo)、[GPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#gpudeviceinfo)、[KirinNPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#kirinnpudeviceinfo)、[AscendDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#ascenddeviceinfo)。设置的设备个数不能超过3个,推理过程按照用户设置的先后顺序选择后端设备进行部署推理。 +> `MutableDeviceInfo`中支持用户设置设备信息,包括[CPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#cpudeviceinfo)、[GPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#gpudeviceinfo)、[KirinNPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#kirinnpudeviceinfo)、[AscendDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#ascenddeviceinfo)、[DSPDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#dspdeviceinfo)。设置的设备个数不能超过3个,推理过程按照用户设置的先后顺序选择后端设备进行部署推理。 > > float16需要CPU为ARM v8.2架构的机型才能生效,其他不支持的机型和x86平台会自动回退到float32执行。 > @@ -246,6 +246,36 @@ context->SetDelegate(coreml_delegate); > 当前CoreML后端暂时只支持操作系统版本不低于iOS 11的设备。 +### 配置使用DSP后端 + +当需要执行的后端为DSP(目前支持`ft04`和`ft78`推理产品)时,需要设置[DSPDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#dspdeviceinfo)为首选推理后端。建议设置[CPUDeviceInfo](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#cpudeviceinfo)为次选后端,排在DSP后,以保证泛化模型的推理。 + +下面示例代码演示了如何创建CPU与DSP异构推理后端: + +```cpp +auto context = std::make_shared(); +if (context == nullptr) { + std::cerr << "New context failed." << std::endl; +} +auto &device_list = context->MutableDeviceInfo(); + +// Set ft04/ft78 inference product device first, make ft04/ft78 inference product preferred backend. +auto dsp_device_info = std::make_shared(); +if (dsp_device_info == nullptr) { + std::cerr << "New DSPDeviceInfo failed." << std::endl; +} +// The ft04/ft78 inference product device context needs to be push_back into device_list to work. +device_list.push_back(dsp_device_info); + +// Set CPU device after ft04/ft78 inference product as second choice. +auto cpu_device_info = std::make_shared(); +if (cpu_device_info == nullptr) { + std::cerr << "New CPUDeviceInfo failed." << std::endl; +} + +device_list.push_back(cpu_device_info); +``` + ## 模型创建加载与编译 使用MindSpore Lite执行推理时,[Model](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#model)是推理的主入口,通过Model可以实现模型加载、模型编译和模型执行。采用上一步创建得到的[Context](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#context),调用Model的复合[Build](https://www.mindspore.cn/lite/api/zh-CN/master/api_cpp/mindspore.html#build)接口来实现模型加载与模型编译。 diff --git a/docs/lite/docs/source_zh_cn/tools/benchmark_tool.md b/docs/lite/docs/source_zh_cn/tools/benchmark_tool.md index 6de680a75e78f0991e26c0836e828e28e4baeced..ee989a41a4ce9880b80099ae18a8df7d492cb2d3 100644 --- a/docs/lite/docs/source_zh_cn/tools/benchmark_tool.md +++ b/docs/lite/docs/source_zh_cn/tools/benchmark_tool.md @@ -80,7 +80,7 @@ | `--benchmarkDataFile=` | 可选 | 指定标杆数据的文件路径。标杆数据作为该测试模型的对比输出,是该测试模型使用相同输入并由其他深度学习框架前向推理而来。 | String | null | - | | `--benchmarkDataType=` | 可选 | 指定标杆数据类型。 | String | FLOAT | FLOAT、INT32、INT8、UINT8 | | `--cpuBindMode=` | 可选 | 指定模型推理程序运行时绑定的CPU核类型。 | Integer | 1 | 2:表示中核
1:表示大核
0:表示不绑定 | -| `--device=` | 可选 | 指定模型推理程序运行的设备类型。 | String | CPU | CPU、GPU、Kirin NPU、Ascend | +| `--device=` | 可选 | 指定模型推理程序运行的设备类型。 | String | CPU | CPU、GPU、Kirin NPU、Ascend、DSP | | `--help` | 可选 | 显示`benchmark`命令的帮助信息。 | - | - | - | | `--inDataFile=` | 可选 | 指定测试模型输入数据的文件路径,多个输入数据文件用‘,’隔开。如果未设置,则使用随机输入。 | String | null | - | | `--loopCount=` | 可选 | 指定Benchmark工具进行基准测试时,测试模型的前向推理运行次数,其值为正整数。 | Integer | 10 | - |