This repository has been archived by the owner on Jun 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
67685af
commit 75f66b7
Showing
1 changed file
with
37 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,40 @@ | ||
# DIOPI | ||
# DIOPI PROTO | ||
|
||
## 简介 | ||
设备无关算子接口(Device Independent Operator Interface, DIOPI)旨在训练框架和人工智能芯片之间定义一套良好的计算交互,对两者之间的工程实施和技术依赖进行有效的解耦,有利于两者共同构建训练生态。 | ||
<div align=center><img src='image/diopi.png' width='70%'></img></div> | ||
## **什么是DIOPI-PROTO?** | ||
DIOPI-PROTO是标准算子接口的原型声明,是芯片厂商实现与框架算子调用的中间层。通过规定标准的运行时函数与算子接口的声明,对框架来说,统一了算子接口,无需考虑芯片厂商具体的算子实现;对厂商来说,可以只聚焦于算子实现与优化,无需考虑框架适配。DIOPI-PROTO作为DIOPI中具体算子声明的环节,起到了承上(框架)启下(芯片厂商)的作用。 | ||
|
||
DIOPI 提供了一套 C-API [算子函数声明](include/diopi/functions.h)。对于训练框架来说,接入 DIOPI 算子;对于芯片来说,实现 DIOPI 的函数声明,接入芯片算子库,完成算子的调用逻辑。DIOPI 在框架和芯片计算库之间定义了统一的**标准接口**,使得两者可以独立开发,且计算库可以无缝移植到其他支持 DIOPI 的训练框架。 | ||
DIOPI_PROTO有如下核心功能: | ||
1. **实现Runtime标准接口定义**。 | ||
声明了在实现标准算子函数时可以使用的工具函数以及相关数据结构。其中,工具函数用于对Context和Tensor两类对象进行操作。 | ||
2. **实现标准算子的接口定义**。 | ||
声明了标准算子的函数,每一个函数完成一个特定的、需要计算设备参与执行的功能。 | ||
|
||
为实现以上所述,[一致性测试套件](https://github.com/ParrotsDL/ConformanceTest-DIOPI)提供了一套完整的测试框架和算子测例集合,方便芯片厂商在没有框架的情况下实现 DIOPI 算子函数,并对正确性进行验证。 | ||
|
||
DIOPI-PROTO的主要组成部分包括 _运行时函数(diopirt)_ 和 _算子声明(functions)_。运行时函数主要为芯片厂商提供实现算子函数时需要框架提供的工具函数,主要包括一些公共类型的声明以及分配与管理张量数据等;算子声明包含了用于人工智能计算的大量函数声明,为各个算子接口的具体参数及其类型提供了标准化的定义;C-API文档生成为算子声明生成API说明文档,供算子开发与使用者查阅 | ||
|
||
### 运行时函数(diopirt) | ||
芯片厂商实现的算子函数时,计算过程中可能需要使用设备内存管理、流管理等runtime功能,这些都对设备资源的管理操作需要框架提供相关的函数实现。在DIOPI-PROTO中声明标准的运行时函数抽象,在算子函数运算需要分配内存或要在指定Stream上运行时,即可调用相关函数。 | ||
声明的内容主要包括以下部分: | ||
- 错误码```diopiError_t```、数据类型 ```diopiDtype_t```、```diopiSize_t``` 以及不透明数据结构 ```diopiContextHandle_t``` 和 ```diopiTensorHandle_t```; | ||
- 用于对 Tensor 对象进行操作的函数, 包括获取Tensor对象的内存、形状、类型等 | ||
- 用于对设备运行上下文Context进行操作的函数,包括获取Stream,构造Tensor对象等 | ||
- 其他函数:包括获取当前标准算子接口的版本 | ||
|
||
### 算子声明(functions) | ||
目前已实现了约120+个算子的接口声明,涵盖了卷积、归一化、池化、损失函数、基本代数运算、矩阵操作、数学运算等算子类型。 | ||
|
||
### C-API文档生成(doc) | ||
使用标准算子接口进行训练框架和AI芯片的适配时,需要对算子函数的功能、参数及数据类型有详细的说明,以保证功能适配上的一致性。基于此需求,通过doxygen文档生成工具,生成对应C-API说明文档,作为算子开发与适配参考文档。 | ||
|
||
#### 依赖环境 | ||
生成文档依赖doxygen环境,安装命令如下: | ||
```bash | ||
yum install doxygen | ||
``` | ||
|
||
#### **文档生成流程** | ||
``` | ||
运行命令后可以在 docs 目录下看到生成的latex文档和html文档 | ||
```bash | ||
cd docs && doxygen Doxyfile | ||
``` |