Skip to content

Commit f282c1e

Browse files
authored
【PaddlePaddle Hackathon 4 No.229】为TVM 添加dist、take_alone_axis、eye、index_select、thresholded_relu算子支持 (#404)
* support dist/take_alone_axis/eye/index_select/thresholded_relu op for paddle frontend * add tvm pr
1 parent da8471c commit f282c1e

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
# 在TVM中为paddle框架新增6个不支持的算子
3+
4+
|任务名称 | TVM项目4-为Paddle框架新增TVM算子 |
5+
|---|---|
6+
|提交作者 | 郑学贵 |
7+
|提交时间 | 2023-3-2 |
8+
|版本号 | V0.0 |
9+
|依赖飞桨版本 | v2.4.2 |
10+
|文件名 | add_tvm_op_for_paddle_frontend_1.md |
11+
12+
# 一、方案名称
13+
14+
tvm前端支持paddle算子
15+
16+
# 二、方案描述
17+
18+
tvm前端目前暂不支持paddle框架的`thresholded_relu``index_select``eye``linspace``take_alone_axis``dist`算子,需要在tvm前端中适配这些算子,以支撑更多的paddle模型通过tvm进行部署。
19+
20+
# 三、方案流程
21+
22+
## 流程设计
23+
24+
1. 调研paddle中`thresholded_relu``index_select``eye``linspace``take_alone_axis``dist`接口的实现,了解具体的计算逻辑和公式
25+
2. 调用并参考paddle2onnx的流程。
26+
3. 在tvm中新增相应的convert函数,对于不支持的算子通过Relay IR组合实现。
27+
4. 根据paddle框架中算子参数的可能情况,构建测试函数,覆盖所有使用场景。
28+
29+
## 算子实现
30+
31+
### 1.thresholded_relu
32+
33+
激活函数,可以通过Relay IR中`where``greater`等函数组合实现
34+
35+
### 2.convert_index_select
36+
37+
Relay中由功能更强的`take`函数,使用`warp`模式实现
38+
39+
### 3.eye
40+
41+
可以先构建一个全0的Tensor,再通过`scatter_nd`在对角线上再赋值1
42+
43+
### 4.linspace
44+
45+
需要实现在区间上均匀采用`num`个值,需要考虑两种情况:
46+
47+
- `num`为1,则输出为`start`
48+
- `num`大于1,可以计算出间隔步长,再通过组合`arrange`等函数进行实现
49+
50+
### 5.take_along_axis
51+
52+
可以通过`gather`函数实现
53+
54+
### 6. dist
55+
56+
计算`p-范数`,需要根据`p`的值进行讨论:
57+
58+
- `p == inf`:计算最大值
59+
- `p == -inf`:计算最小值
60+
- `p == 0`:计算非零元素数量
61+
- 其余情况:根据计算公式,组合Relay中相应的函数进行实现
62+
63+
# 四、方案运行效果
64+
65+
## 测试用例
66+
67+
根据API的参数所有可能的类型进行组合,输入通过随机以及手工构造边界样例生成不同`shape`的Tensor,覆盖所有使用场景。
68+
69+
## 运行结果
70+
71+
paddle框架中`thresholded_relu``index_select``eye``linspace``take_alone_axis``dist`算子能够导入tvm并执行,计算结果和paddle框架保持一致。
72+
73+
# 五、项目提交时间计划
74+
75+
3-2日已完成代码,通过单测并提交到tvm [pr地址](https://github.com/apache/tvm/pull/14172)

0 commit comments

Comments
 (0)