Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【PaddlePaddle Hackathon 3】CINN算子开发任务合集 #44069

Closed
Ligoml opened this issue Jul 4, 2022 · 6 comments
Closed

【PaddlePaddle Hackathon 3】CINN算子开发任务合集 #44069

Ligoml opened this issue Jul 4, 2022 · 6 comments

Comments

@Ligoml
Copy link
Contributor

Ligoml commented Jul 4, 2022

(此 ISSUE 为 PaddlePaddle Hackathon 第三期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第三期】任务总览

为神经网络编译器 CINN 增加一系列基础算子,提交流程请参考 CINN算子开发&提交流程(coming soon),开发请参考 贡献指南,任务列表如下:

No.67:为神经网络编译器 CINN 增加 arange 算子

  • 算子功能:返回一个tensor,它的值是一个范围内的数字

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.68:为神经网络编译器 CINN 增加 argmin 和 argmax 算子

  • 算子功能:返回最大/最小值的索引

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.69:为神经网络编译器 CINN 增加 cast 算子

  • 算子功能:转化输入的数据类型

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.70:为神经网络编译器 CINN 增加 clip 算子

  • 算子功能:将输入限制在范围内,给定范围min,max,在范围内的输入则原值返回,超过max则返回max,小于min则返回min

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.71:为神经网络编译器 CINN 增加 flip 算子

  • 算子功能:将一个算子的某些维度数据反转过来,如[1, 2, 3] 变成 [3, 2, 1]

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.72:为神经网络编译器 CINN 增加 layout_transform 算子

  • 算子功能:更改输入的layout

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.73:为神经网络编译器 CINN 增加 one_hot 算子

  • 算子功能:根据输入的索引,返回一个Tensor,该Tensor将索引的位置标注为用户指定的一个值,非索引的位置标注为另一个值。最常见的是1/0标值

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.74:为神经网络编译器 CINN 增加 repeat 算子

  • 算子功能:把一个Tensor沿某些维度重复几遍

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.75:为神经网络编译器 CINN 增加 sort 算子

  • 算子功能:对输入根据某些维度,进行排序

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.76:为神经网络编译器 CINN 增加 split 算子

  • 算子功能:将输入根据某些维度和索引划分,分开成几个不同Tensor输出

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.77:为神经网络编译器 CINN 增加 squeeze 算子

  • 算子功能:删除只有1个元素的维度,减少输入Tensor的维度

  • 技术标签:深度学习框架,编译器

  • 任务难度:基础

No.78:为神经网络编译器 CINN 增加 gather、gather_nd、scatter、scatter_nd 算子

  • 算子功能:对输入分别进行gather、scatter相关功能

  • 技术标签:深度学习框架,编译器

  • 任务难度:进阶

详细描述

使用神经网络编译器 CINN IR 编写算子,大致步骤为在 CINN 底层使用 CINN IR 实现相关计算的描述,如果有优化需求再实现相关 strategy,之后打通上层的 net_builder 和 load_paddle_model,并进行相关单测。

提交内容

  1. 包含算子的设计文档,以及必要的代码讲解和背景知识。 提交至 PaddlePaddle/community repo 的 rfcs/CINN/APIs 目录;
  2. Github fork PaddlePaddle/CINN repo 为自己 repo 后,提交 PR 到 PaddlePaddle/CINN 公开 repo,提交 PR 的链接:
    a. PR 代码中,使用 CINN IR 编写的算子,相应的 strategy,根据具体算子在 CINN 情况提交至相关路径;
    b. 上层 net_builder 调用提交到 cinn/frontend/net_builder.h 和 .cc 文件下;
    c. 上层 load_paddle_model 调用提交到 cinn/frontend/paddle_model_to_program.h 和 .cc 文件下。

技术要求

  • 熟悉神经网络编译器,如 TVM 或 CINN;
  • 熟悉神经网络框架,如 TensorFlow 或 Pytorch 或者 PaddlePaddle;
  • 熟练掌握 C++ 、Python。

答疑交流

  • 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流;
  • 对于开发中的共性问题,在活动过程中,会定期组织答疑,请大家关注官网&QQ群的通知,及时参与。
@gsq7474741
Copy link
Contributor

@Ligoml cinn的编译错误可以帮push一下嘛 PaddlePaddle/CINN#840

@Ligoml
Copy link
Contributor Author

Ligoml commented Jul 7, 2022

cinn的编译错误可以帮push一下嘛 PaddlePaddle/CINN#840

--
@zhhsplendid 请关注

@zhhsplendid
Copy link
Member

zhhsplendid commented Jul 22, 2022

PaddlePaddle/CINN#840

@gsq7474741 我们这边正在查看中,对于您快速解决,可否先注释掉 cinn/auto_schedule/cost_model/CMakeLists.txt 中的

cc_test(test_cost_model SRCS cost_model_test.cc cost_model.cc DEPS pybind gtest_main)

target_link_libraries(test_cost_model ${PYTHON_LIBRARIES})

@SigureMo
Copy link
Member

SigureMo commented Aug 1, 2022

@zhhsplendid

请问任务 74(为神经网络编译器 CINN 增加 repeat 算子)要实现的功能是与 numpy.tile(整个 Tensor 进行重复) 类似还是与 numpy.repeat(对元素进行重复)类似呢?根据描述(把一个 Tensor 沿某些维度重复几遍)感觉与 numpy.tile 类似,而根据调研,TVMXLA 中实现该功能的算子命名均为 tile,那这个任务还要继续使用 repeat 作为算子/API 名称吗?

以及任务 71(为神经网络编译器 CINN 增加 flip 算子)与 CINN 中已经实现的 reverse 有什么区别呢?经过调研,已有的 reverse 实现和我所设想的 flip 实现以及 API 设计都是一样的

@zhhsplendid
Copy link
Member

zhhsplendid commented Aug 11, 2022

@zhhsplendid

请问任务 74(为神经网络编译器 CINN 增加 repeat 算子)要实现的功能是与 numpy.tile(整个 Tensor 进行重复) 类似还是与 numpy.repeat(对元素进行重复)类似呢?根据描述(把一个 Tensor 沿某些维度重复几遍)感觉与 numpy.tile 类似,而根据调研,TVMXLA 中实现该功能的算子命名均为 tile,那这个任务还要继续使用 repeat 作为算子/API 名称吗?

以及任务 71(为神经网络编译器 CINN 增加 flip 算子)与 CINN 中已经实现的 reverse 有什么区别呢?经过调研,已有的 reverse 实现和我所设想的 flip 实现以及 API 设计都是一样的

嗨, @SigureMo

  1. 我们有对repeat的大致描述,但应该没有强要求repeat的功能。在我们工作经验来看,常常出现各个不同框架,同一个API函数名称代表的具体数学运算不同。因此设计文档也要求描述清楚自己要实现的功能,竞品对比是怎样,我们在审核过程和贡献者一起商量是否实现该功能。
    你遇到的具体情况,描述了numpy、tvm、xla的tile功能,不知道能否对照一下numpy、tvm、xla的repeat功能?如果他们都比较类似,那么应该用repeat为参数名实现repeat的功能,而不是考虑tile的功能。我们题目中描述的大致功能是可以根据具体设计、其他框架比较、进行更改的。

  2. 如果发现CINN已有现存的工具、函数代码,鼓励用现存代码。因为软件工程往往也强调工具代码的泛用性和复用性。如果发现reverse部分代码实现可以使用到flip,可以通过调用来实现flip。

@SigureMo
Copy link
Member

我们有对repeat的大致描述,但应该没有强要求repeat的功能。在我们工作经验来看,常常出现各个不同框架,同一个API函数名称代表的具体数学运算不同。因此设计文档也要求描述清楚自己要实现的功能,竞品对比是怎样,我们在审核过程和贡献者一起商量是否实现该功能。
你遇到的具体情况,描述了numpy、tvm、xla的tile功能,不知道能否对照一下numpy、tvm、xla的repeat功能?如果他们都比较类似,那么应该用repeat为参数名实现repeat的功能,而不是考虑tile的功能。我们题目中描述的大致功能是可以根据具体设计、其他框架比较、进行更改的。

好的明白,我这里优先考虑了描述而没有优先考虑命名。

如果发现CINN已有现存的工具、函数代码,鼓励用现存代码。因为软件工程往往也强调工具代码的泛用性和复用性。如果发现reverse部分代码实现可以使用到flip,可以通过调用来实现flip。

好的好的,感谢解答。

@luotao1 luotao1 closed this as completed Jan 13, 2023
@paddle-bot paddle-bot bot added the status/close 已关闭 label Jan 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants