登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
Gitee 2025 年度开源项目评选中
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
39
Star
48
Fork
67
MindSpore
/
mindspore-lite
代码
Issues
28
Pull Requests
27
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
[Feature]: 新增飞腾DSP硬件支持
WIP
#ID2FRB
yhwang-ftdsp
创建于
2025-10-17 17:46
### 🚀 背景描述 随着AI浪潮以及软硬全国产化的趋势,硬件厂商要拓展AI应用能力都离不开一个高性能的推理框架,但是目前MindSpore Lite支持的硬件较少,主要以CPU、GPU、昇腾NPU为主,缺少对DSP芯片的支持,为了进一步拓展MindSpore Lite的硬件生态,提供一个国产化DSP端到端解决方案。 ### 设计思路 # MindSpore Lite DSP后端设计文档 ## 概述 ### 硬件架构背景 飞腾系列DSP硬件采用异构计算架构,具体配置如下: - **处理器配置**:Arm CPU + FT DSP + NPU(FT78型号) - **内存层次**:DDR(主存)、SMC(共享内存)、L2(DSP核内缓存) ### 接入方案选择 经过对MindSpore Lite现有硬件支持架构的深入调研,发现当前框架暂不支持Plugin插件方式接入第三方硬件。因此,本次开发采用内置集成(built-in)方式,将DSP后端直接集成到MindSpore Lite核心框架中,确保与现有架构的完美兼容。 ### 整体设计思路 飞腾系列DSP硬件SDK采用统一的接口规范,因此DSP后端runtime架构也采用统一设计,不会随着硬件型号的不同而改变,后续新增其他的型号也更加方便接入。目前两款DSP硬件型号(FT04和FT78)在硬件指令部分存在差异,在算子支持的类型上也会有所不同,具体如下: - FT04支持的数据类型: `kNumberTypeFloat32`,`kNumberTypeFloat16`,`kNumberTypeComplex64`,`kNumberTypeInt16`,`kNumberTypeInt32`。 - FT78支持的数据类型:`kNumberTypeFloat32`,`kNumberTypeFloat64`,`kNumberTypeComplex64`,`kNumberTypeComplex128`,`kNumberTypeFloat16`,`kNumberTypeInt8`,`kNumberTypeInt16`,`kNumberTypeInt32`。 以及仅有FT78带有NPU,所以后续新增delegate模式支持也只是针对FT78。为了适配这两款硬件,在编译构建的时候新增了宏定义`ENABLE_DSP`用来区分DSP与其他框架自带的后端以及`SUPPORT_FT78`和`SUPPORT_FT04`用来区分两款不同的DSP硬件型号。 整体分为两个步骤进行: 1. **完成aarch32-linux编译的支持**:https://gitee.com/mindspore/mindspore-lite/pulls/351 2. **DSP后端集成**:https://gitee.com/mindspore/mindspore-lite/pulls/367 ## 设计细节 ### 1. DSP设备类型支持 #### 1.1 设备类型定义 - 在`mindspore-lite/include/lite_types.h`中添加了`DT_DSP`设备类型,支持DSP设备作为独立的计算后端 #### 1.2 上下文支持 - 在`include/cxx_api/context.h`中添加了DSP设备上下文支持DSP设备的配置 #### 1.3 kernel arch支持 - 在`mindspore-lite/src/executor/kernel_exec.h`中添加了DSP设备,支持DSP kernel的注册 ### 2. DSP运行时架构 飞腾系列DSP的异构计算的实现依赖`Hthread`(异构编程框架,类似OpenCL的接口设计),可以直接参考框架中opencl后端的runtime架构进行设计,新增`mindspore-lite/src/litert/kernel/dsp`目录,主要内容包括dsp runtime和dsp kernel。 #### 2.1 核心组件 - **DSPRuntime**: DSP运行时核心类,负责DSP设备的初始化、资源释放和内核执行 - **DSPRuntimeInnerWrapper**: DSP运行时包装器,管理运行时实例的生命周期 - **DSPAllocator**: DSP内存分配器,负责DSP设备内存管理,支持内存的分配、释放和复用,物理地址映射等 - **DSPKernel**: DSPkernel基类,继承自`LiteKernel`,对`Prepare`,`PreProcess`,`Run`等方法进行了重写 #### 2.2 运行时特性 - 单例模式管理DSP运行时实例 - 支持多种内存分配和释放以及内存复用机制 - cpu算子和dsp算子混合计算时无需进行内存拷贝 - 底层DSP算子库`dsp_lib`提前封装成`dsp_lib.dat`内置在DSP板卡`/usr/lib`中,运行时通过`Hthread`接口调用DSP算子库,底层算子库更改,上层框架也可以进行兼容。 #### 2.3 算子适配 - 计划支持Lite原生的所有算子,参考`mindspore-lite/schema/ops.fbs`文件,其中子图操作算子和反向计算算子暂不考虑支持。 - 后续借助框架自定义算子的支持能力扩展更多的算子。 ### 3. 调度器集成 #### 3.1 内核选择 - 在`scheduler.cc`中添加了`FindDspKernel`方法 - 支持DSP内核的自动发现和选择 - 实现DSP与CPU的优先级调度 #### 3.2 设备优先级 - DSP设备优先级高于CPU - 支持设备类型优先级比较 - 自动回退到CPU当DSP不可用时 ### 4. 测试支持 UT:新增`mindspore-lite/test/ut/src/runtime/kernel/dsp`目录,用于测试DSP kernel。 ST:输入模型(mindir、onnx),执行convert生成ms,执行精度符合预期。 #### 4.1 单元测试 - 覆盖所有支持的算子和数据类型,使用宏定义区分不同型号的测试case - 提供DSP测试基类`DSPCommonTest` #### 4.2 系统测试 - 编写完整流程测试脚本,搭建线上门禁系统(后续实现) ## 使用方式 ### 1. 环境配置 ```bash export DSP_SDK_PATH=/path/to/dsp/sdk export MSLITE_REGISTRY_DEVICE=ft78 # 或 ft04 ``` ### 2. 构建 ```bash bash build.sh -I arm32 -j8 ``` ### 3. 代码使用 ```cpp // 创建DSP上下文 auto context = std::make_shared<mindspore::Context>(); if (context == nullptr) { delete[](model_buf); std::cerr << "New context failed." << std::endl; return -1; } auto device_info = std::make_shared<mindspore::DSPDeviceInfo>(); if (device_info == nullptr) { delete[](model_buf); std::cerr << "New DSPDeviceInfo failed." << std::endl; return -1; } device_list.push_back(device_info); ``` ## 兼容性 - 支持FT04和FT78两种DSP设备 - 与现有CPU和GPU后端完全兼容 - 支持动态设备选择和回退机制 - 保持与现有API的完全兼容 ## 未来扩展 1. **更多算子支持**: 可以继续添加更多DSP算子实现 2. **Delegate支持**: 支持FT78的NPU算子 3. **工具支持**: 在benchmark中增加DSP设备支持 4. **设备支持**: 支持更多DSP设备类型 ### 与其他模块的相关性描述 ### 其他信息(测试验证设计等)
### 🚀 背景描述 随着AI浪潮以及软硬全国产化的趋势,硬件厂商要拓展AI应用能力都离不开一个高性能的推理框架,但是目前MindSpore Lite支持的硬件较少,主要以CPU、GPU、昇腾NPU为主,缺少对DSP芯片的支持,为了进一步拓展MindSpore Lite的硬件生态,提供一个国产化DSP端到端解决方案。 ### 设计思路 # MindSpore Lite DSP后端设计文档 ## 概述 ### 硬件架构背景 飞腾系列DSP硬件采用异构计算架构,具体配置如下: - **处理器配置**:Arm CPU + FT DSP + NPU(FT78型号) - **内存层次**:DDR(主存)、SMC(共享内存)、L2(DSP核内缓存) ### 接入方案选择 经过对MindSpore Lite现有硬件支持架构的深入调研,发现当前框架暂不支持Plugin插件方式接入第三方硬件。因此,本次开发采用内置集成(built-in)方式,将DSP后端直接集成到MindSpore Lite核心框架中,确保与现有架构的完美兼容。 ### 整体设计思路 飞腾系列DSP硬件SDK采用统一的接口规范,因此DSP后端runtime架构也采用统一设计,不会随着硬件型号的不同而改变,后续新增其他的型号也更加方便接入。目前两款DSP硬件型号(FT04和FT78)在硬件指令部分存在差异,在算子支持的类型上也会有所不同,具体如下: - FT04支持的数据类型: `kNumberTypeFloat32`,`kNumberTypeFloat16`,`kNumberTypeComplex64`,`kNumberTypeInt16`,`kNumberTypeInt32`。 - FT78支持的数据类型:`kNumberTypeFloat32`,`kNumberTypeFloat64`,`kNumberTypeComplex64`,`kNumberTypeComplex128`,`kNumberTypeFloat16`,`kNumberTypeInt8`,`kNumberTypeInt16`,`kNumberTypeInt32`。 以及仅有FT78带有NPU,所以后续新增delegate模式支持也只是针对FT78。为了适配这两款硬件,在编译构建的时候新增了宏定义`ENABLE_DSP`用来区分DSP与其他框架自带的后端以及`SUPPORT_FT78`和`SUPPORT_FT04`用来区分两款不同的DSP硬件型号。 整体分为两个步骤进行: 1. **完成aarch32-linux编译的支持**:https://gitee.com/mindspore/mindspore-lite/pulls/351 2. **DSP后端集成**:https://gitee.com/mindspore/mindspore-lite/pulls/367 ## 设计细节 ### 1. DSP设备类型支持 #### 1.1 设备类型定义 - 在`mindspore-lite/include/lite_types.h`中添加了`DT_DSP`设备类型,支持DSP设备作为独立的计算后端 #### 1.2 上下文支持 - 在`include/cxx_api/context.h`中添加了DSP设备上下文支持DSP设备的配置 #### 1.3 kernel arch支持 - 在`mindspore-lite/src/executor/kernel_exec.h`中添加了DSP设备,支持DSP kernel的注册 ### 2. DSP运行时架构 飞腾系列DSP的异构计算的实现依赖`Hthread`(异构编程框架,类似OpenCL的接口设计),可以直接参考框架中opencl后端的runtime架构进行设计,新增`mindspore-lite/src/litert/kernel/dsp`目录,主要内容包括dsp runtime和dsp kernel。 #### 2.1 核心组件 - **DSPRuntime**: DSP运行时核心类,负责DSP设备的初始化、资源释放和内核执行 - **DSPRuntimeInnerWrapper**: DSP运行时包装器,管理运行时实例的生命周期 - **DSPAllocator**: DSP内存分配器,负责DSP设备内存管理,支持内存的分配、释放和复用,物理地址映射等 - **DSPKernel**: DSPkernel基类,继承自`LiteKernel`,对`Prepare`,`PreProcess`,`Run`等方法进行了重写 #### 2.2 运行时特性 - 单例模式管理DSP运行时实例 - 支持多种内存分配和释放以及内存复用机制 - cpu算子和dsp算子混合计算时无需进行内存拷贝 - 底层DSP算子库`dsp_lib`提前封装成`dsp_lib.dat`内置在DSP板卡`/usr/lib`中,运行时通过`Hthread`接口调用DSP算子库,底层算子库更改,上层框架也可以进行兼容。 #### 2.3 算子适配 - 计划支持Lite原生的所有算子,参考`mindspore-lite/schema/ops.fbs`文件,其中子图操作算子和反向计算算子暂不考虑支持。 - 后续借助框架自定义算子的支持能力扩展更多的算子。 ### 3. 调度器集成 #### 3.1 内核选择 - 在`scheduler.cc`中添加了`FindDspKernel`方法 - 支持DSP内核的自动发现和选择 - 实现DSP与CPU的优先级调度 #### 3.2 设备优先级 - DSP设备优先级高于CPU - 支持设备类型优先级比较 - 自动回退到CPU当DSP不可用时 ### 4. 测试支持 UT:新增`mindspore-lite/test/ut/src/runtime/kernel/dsp`目录,用于测试DSP kernel。 ST:输入模型(mindir、onnx),执行convert生成ms,执行精度符合预期。 #### 4.1 单元测试 - 覆盖所有支持的算子和数据类型,使用宏定义区分不同型号的测试case - 提供DSP测试基类`DSPCommonTest` #### 4.2 系统测试 - 编写完整流程测试脚本,搭建线上门禁系统(后续实现) ## 使用方式 ### 1. 环境配置 ```bash export DSP_SDK_PATH=/path/to/dsp/sdk export MSLITE_REGISTRY_DEVICE=ft78 # 或 ft04 ``` ### 2. 构建 ```bash bash build.sh -I arm32 -j8 ``` ### 3. 代码使用 ```cpp // 创建DSP上下文 auto context = std::make_shared<mindspore::Context>(); if (context == nullptr) { delete[](model_buf); std::cerr << "New context failed." << std::endl; return -1; } auto device_info = std::make_shared<mindspore::DSPDeviceInfo>(); if (device_info == nullptr) { delete[](model_buf); std::cerr << "New DSPDeviceInfo failed." << std::endl; return -1; } device_list.push_back(device_info); ``` ## 兼容性 - 支持FT04和FT78两种DSP设备 - 与现有CPU和GPU后端完全兼容 - 支持动态设备选择和回退机制 - 保持与现有API的完全兼容 ## 未来扩展 1. **更多算子支持**: 可以继续添加更多DSP算子实现 2. **Delegate支持**: 支持FT78的NPU算子 3. **工具支持**: 在benchmark中增加DSP设备支持 4. **设备支持**: 支持更多DSP设备类型 ### 与其他模块的相关性描述 ### 其他信息(测试验证设计等)
评论 (
1
)
登录
后才可以发表评论
状态
WIP
TODO
ACCEPTED
WIP
VALIDATION
DONE
CLOSED
REJECTED
负责人
未设置
yefeng
YeFeng_24
负责人
协作者
+负责人
+协作者
标签
feature
未设置
项目
未立项任务
未立项任务
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (4)
标签 (1)
master
r2.7.2
r2.7.1
r2.7
v2.7.0
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
预计工期
(小时)
参与者(1)
1
https://gitee.com/mindspore/mindspore-lite.git
git@gitee.com:mindspore/mindspore-lite.git
mindspore
mindspore-lite
mindspore-lite
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册