- Notifications
You must be signed in to change notification settings - Fork 5.9k
Description
(此 ISSUE 为 PaddlePaddle Hackathon 第三期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第三期】任务总览)
为飞桨框架新增一系列 API,提交流程请参考 新增API 开发&提交流程,开发请参考 贡献指南,任务列表如下,其他说明事项在任务列表后:
No.1:为 Paddle 新增 finfo API
- 任务难度:基础
- 详细描述: finfo计算浮点数类型的数值限制,输入参数为 Paddle 浮点数类型(paddle.float16/paddle.float32/paddle.float64/paddle.complex64/paddle.complex128),返回包含下表属性对象。此任务目标是为 Paddle 新增 finfo API,调用路径为 paddle.finfo。要求通过 pybind 方式直接将 C++ 层实现绑定到 Python,无需开发 Paddle Kernel,可以参考 paddle/fluid/pybind/pybind.cc 中代码。更详细内容可以参考 numpy.finfo 。
| 属性 | 类型 | 描述 |
|---|---|---|
| bits | int | 该类型占用的 bit 数 |
| eps | float | 该类型所能表示的 epsilon 值,即满足1.0 + eps != 1.0的最小值,参考 numpy.finfo |
| min | float | 该类型能表示的最小值 |
| max | float | 该类型能表示最大值 |
| tiny | float | 该类型所能表示的最小正数 |
| resolution | float | 该类型十进制形式精度 10**-precision. 其中 precision 为 IEEE754 标准中该类型有效数字位数 |
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle 目录;
- C ++ 实现代码,在 Paddle repo 的 paddle/fluid/pybind 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟练掌握 C++ (如有 C++ 开发)、Python;
- 熟悉 C++ 标准库 std::numeric_limits。
No.2:为 Paddle 新增 iinfo API
- 任务难度:基础
- 详细描述: iinfo 计算整数类型的数值限制,输入参数为 Paddle 整数类型(paddle.int8/paddle.uint8/paddle.int16/paddle.int32/paddle.int64),返回包含下表中的属性对象,此任务目标是为 Paddle 新增 iinfo API,调用路径为 paddle.iinfo 。要求通过 pybind 方式直接将 C++ 层实现绑定到 Python,无需开发 Paddle Kernel, 可以参考 paddle/fluid/pybind/pybind.cc 中代码。
| 属性 | 类型 | 描述 |
|---|---|---|
| bits | int | 占用 bit 数 |
| max | int | 最大数 |
| min | int | 最小数 |
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle 目录;
- C ++ 实现代码,在 Paddle repo 的 paddle/phi/kernels 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟练掌握 C++ (如有 C++ 开发)、Python;
- 熟悉 C++ 标准库 std::numeric_limits。
No.3:为 Paddle 新增 cdist API
-
任务难度:基础
-
详细描述:cdist API 是 dist 的拓展。dist API 用于计算两个输入 Tensor 的 p 范数(p-norm),计算结果为形状为 [1] 的 Tensor,而 cdist API 则用于计算两个输入 Tensor 的所有行向量对的 p 范数(p-norm),输出结果的形状和两个 Tensor 乘积的形状一致。此任务的目标是在 Paddle 框架中,新增 cdist API,调用路径为:paddle.cdist。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/linalg.py 文件;
- C ++ /CUDA 实现代码,在 Paddle repo 的 paddle/phi/kernels 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 p 范数(p-norm)计算原理;
- 熟悉 Paddle 动静态图下数学计算过程;
- 熟练掌握 C++、CUDA、Python。
No.4:为 Paddle 新增 cummax API
-
任务难度:基础
-
详细描述:cummax API 是一个按轴寻找累计最大值和最大值所在位置的 API。此任务的目标是在 Paddle 框架中,新增 cummax API,调用路径为:paddle.cummax 和 paddle.Tensor.cummax。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;
- C ++ 实现代码,在 Paddle repo 放置。其中头文件在 Paddle repo 的 paddle/phi/kernels目录,cc文件在paddle/phi/kernels/cpu 目录 和 cu文件在paddle/phi/kernels/gpu 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 cummax 计算原理;
- 熟练掌握 C++、CUDA、Python。
No.5:为 Paddle 新增 bucketize API
-
任务难度:基础
-
详细描述:paddle.bucketize 为 paddle.searchsorted 的sorted_sequence 在1维情况下的特例。比如输入数据 x = paddle.to_tensor([[0, 8, 4, 16], [-1, 2, 8, 4]]),sorted_sequence=paddle.to_tensor([2, 4, 8, 16]),则 paddle.bucketize(x, sorted_sequence) 或 x.bucketize(sorted_sequence) 得到 [[0, 2, 1, 3], [0, 0, 2, 1]],paddle.bucketize(x, sorted_sequence, right=True) 或 x.bucketize(sorted_sequence, right=True) 得到 [[0, 3, 2, 4], [0, 1, 3, 2]] 。此API需支持的调用路径为:paddle.bucketize 和 Tensor.bucketize。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/search.py 目录,并在 python/paddle/tensor/__init__.py 中,添加 bucketize API,以支持 Tensor.bucketize 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 paddle.searchsorted 的计算逻辑;
- 熟练掌握 Python。
No.6:为 Paddle 新增 trapezoid API
-
任务难度:基础
-
详细描述:实现 trapezoid rule 的算法,支持输入N 维 Tensor,在指定的某一维实现 trapezoid rule 算法。比如输入数据 y = paddle.to_tensor([[2, 4, 8], [3, 5, 9]]),x = paddle.tensor([[1, 2, 3], [3, 4, 5]]),则 paddle.trapezoid(y, x, axis=-1)) 或 y.trapezoid(x, axis=-1) 得到 [9, 11],同时 paddle.trapezoid(y, x, axis=0)) 或 y.trapezoid(x, axis=0) 得到 [5, 9, 17] 。此 API 需支持的调用路径为:paddle.trapezoid 和 Tensor.trapezoid 。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 目录,并在 python/paddle/tensor/__init__.py 中,添加 trapezoid API,以支持 Tensor.trapezoid 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 trapezoid 算法逻辑;
- 熟练掌握 Python,及 Tensor 切片操作。
No.7:为 Paddle 新增 MultivariateNormal API
-
任务难度:基础
-
详细描述:MultivariateNormal 为表示多元正态分布的类,用于多元正态分布的概率统计与随机采样,至少包括如下方法:
mean计算均值;variance计算方差 ;sample随机采样;rsample重参数化采样;prob概率密度;log_prob对数概率密度;entropy熵计算;
上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。
此任务的目标是在 Paddle 框架中,基于现有概率分布方案进行扩展,新增 MultivariateNormal API,调用路径为:paddle.distribution.MultivariateNormal 。类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行设计。要求代码风格及设计思路与已有概率分布保持一致,参考 Paddle/python/paddle/distribution。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/distribution 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests/distribution 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle/distribution 目录,同时需要在 docs/api/paddle/distribution/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉概率分布基本原理;
- 熟练掌握 Python;
- 能通过阅读源码,了解 Paddle 现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布。
No.8:为 Paddle 新增 Gumbel API
-
任务难度:基础
-
详细描述:Gumbel 表示耿贝尔分布的类,用于耿贝尔分布的概率统计与随机采样,至少包括如下方法:
mean计算均值;variance计算方差 ;sample随机采样;rsample重参数化采样;prob概率密度;log_prob对数概率密度;entropy熵计算;
上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。
此任务的目标是在 Paddle 框架中,基于现有概率分布方案进行扩展,新增 Gumbel API,调用路径为:paddle.distribution.Gumbel 。类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行设计。要求代码风格及设计思路与已有概率分布保持一致,参考 Paddle/python/paddle/distribution。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/distribution 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests/distribution 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle/distribution 目录,同时需要在 docs/api/paddle/distribution/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉概率分布基本原理;
- 熟练掌握 Python;
- 能通过阅读源码,了解 Paddle 现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布。
No.9:为 Paddle 新增 Laplace API
-
任务难度:基础
-
详细描述:Laplace 用于 Laplace 分布的概率统计与随机采样,至少包括如下方法:
mean计算均值;variance计算方差 ;sample随机采样;rsample重参数化采样;prob概率密度;log_prob对数概率密度;entropy熵计算;
上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。
此任务的目标是在 Paddle 框架中,基于现有概率分布方案进行扩展,新增 Laplace API,调用路径为:paddle.distribution.Laplace 。类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行设计。要求代码风格及设计思路与已有概率分布保持一致,参考 Paddle/python/paddle/distribution。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/distribution 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests/distribution 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle/distribution 目录,同时需要在 docs/api/paddle/distribution/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉概率分布基本原理;
- 熟练掌握 Python;
- 能通过阅读源码,了解 Paddle 现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布。
No.10:为 Paddle 新增 LogNormal API
-
任务难度:基础
-
详细描述:LogNormal 用于 LogNormal 分布的概率统计与随机采样,至少包括如下方法:
mean计算均值;variance计算方差 ;sample随机采样;rsample重参数化采样;prob概率密度;log_prob对数概率密度;entropy熵计算;
上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。
此任务的目标是在 Paddle 框架中,基于现有概率分布方案进行扩展,新增 LogNormal API,调用路径为:paddle.distribution.LogNormal 。类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行设计。要求代码风格及设计思路与已有概率分布保持一致,参考 Paddle/python/paddle/distribution。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/distribution 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests/distribution 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle/distribution 目录,同时需要在 docs/api/paddle/distribution/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉概率分布基本原理;
- 熟练掌握 Python;
- 能通过阅读源码,了解 Paddle 现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布。
No.11:为 Paddle 新增 multi_margin_loss API
- 任务难度:基础
- 详细描述:multi_margin_loss 是用于多分类问题的 Hinge loss。给定一个 2D 的 Tensor input,形状为 (N, C), N 是 batch_size, C 是类别数,这可以视为对每个类别的评分。再给定一个 1D 的 int Tensor, target,形状为 (N,), 表示真实的类别标签(target 中每一个值都满足 0 <= target[i] < C)。
对于一个样本来说(这里不考虑 batch, 所以 input 是一个形状为 (C,) 的向量),target 就是一个整数。给定一个浮点数 margin,
x 中每一个类别的评分对应的 loss 为
对上述 loss 取平均值
其次,还可以为每一个类别赋予一个不同的权重。给定一个可选的一维 Tensor weight,(形状为 (C,), 公式中为 w。那么上述公式中的 loss 改为如下公式:
此外这个函数还需要支持 power 的功能,亦即对 loss 计算幂。亦即,对上述单个 loss 取 power.(公式中为 p) . 公式中的 loss 改为如下形式:
最后再对多个样本的 loss 进行 reduction. (可以 sum, mean 或者不 reduce)。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/nn/functional 目录,class 形式的在 python/paddle/nn 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文API文档,在 docs repo 的 docs/api/paddle/nn/functional 目录, class 形式的在 docs/api/paddle/nn 目录,同时需要在 docs/api/paddle/nn/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟练掌握 Python;
- 能通过阅读源码,了解其他主流框架的实现。
No.12:为 Paddle 新增 pairwise_distance API
- 任务难度:基础
- 详细描述:pairwise_distance 是用于计算两组向量两两之间的距离(使用 p-norm 计算, 参考 https://planetmath.org/vectorpnorm)的函数。
函数接口为
paddle.nn.functional.pairwise_distance( x: Tensor, y:Tensor, p: float=2.0, epsilon: float=1e-6, keepdim: bool=False, name: str=None) 按照如下的方式计算
p-norm( x - y + epsilon, p, last_dim, keepdim)
其中,p-norm 的计算函数是
x 的形状为 (N, D) 或者 (D,), 其中 N 是 batch size, D 是向量的 size. y 同 x。
输出一个 Tensor .
keepdim 为 False 时形状为 (N,) 或者 (),依据输入中是否有 batched vectors 为条件。
keepdim 为 True 时形状为 (N, 1) 或者 (1, ),依据输入中是否有 batched vectors 为条件。
注意事项:
- x 和 y 之间需要可以 broadcast 。
- p-norm 属于 reduce 类运算,所以 keepdim 的语义需要和其他 reduce 类 API 保持一致。
- paddle 目前对 0-d Tensor(形状为 () 的 Tensor 支持有缺陷,所以即使 keep_dim 为 False, 而且 x 和 y 都非 batched, 也返回形状为 (1, ) 的 Tensor 。这是一个权宜之计,其他 API 的行为也类似。
- x, y 需要支持浮点数类型。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/nn/functional 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle/nn/functional 目录,同时需要在 docs/api/paddle/nn/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟练掌握 Python;
- 能通过阅读源码,了解其他主流框架的实现,以及 paddle 中相关 API 和 C++ operator。参考 paddle.linalg.norm 和 paddle.dist。
No.13:为 Paddle 新增 triu_indices API
-
任务难度:基础
-
详细描述: triu_indices 能获取一个2维矩阵的上三角元素的索引,其输出 Tensor 的 shape 为[2, N],相当于有两行,第一行为 上三角元素的行索引,第二行为下三角元素的列索引。此任务的目标是在 Paddle 框架中,新增 triu_indices API,调用路径为:paddle.triu_indices。可以参考:paddle.tril_indices。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/creation.py 文件;
- C ++/CUDA 实现代码,头文件在 Paddle repo 的 paddle/phi/kernels目录,cc文件在paddle/phi/kernels/cpu 目录 和 cu文件在paddle/phi/kernels/gpu 目录;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录下添加 triu_indices_cn.rst 文档,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 triu_indices 计算上三角索引的算法原理和适用场景;
- 熟悉 Paddle 动静态图下数学计算过程;
- 熟悉 Paddle 的 C++/CUDA OP 编写、注册、调用方式;
- 熟练掌握 C++、Python、CUDA。
No.14:为 Paddle 新增 remainder_ API
-
任务难度:基础
-
详细描述:paddle.Tensor.remainder 的 inplace版本 。此任务的目标是在 Paddle 框架中,新增 remainder_ API,调用路径为:paddle.remainder_ 和 Tensor.remainder_。可参考:subtract_ API 的实现。
-
提交内容
- 参考paddle/fluid/operators/elementwise/elementwise_sub_op.cc,在paddle/fluid/operators/elementwise/elementwise_mod_op.cc中将 remainder op 同时注册为非 inplace 版本和 inplace 版本;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件,并在 python/paddle/tensor/__init__.py 中,添加 remainder_ API,以支持 Tensor.count_nonzero 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests/test_inplace.py中,添加remainder_ API的测试class;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录 和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 inplace 版本的 op 注册与自动代码生成机制;
- 熟练掌握 Python。
No.15:为 Paddle 新增 count_nonzero API
-
任务难度:基础
-
详细描述:计算输入中非零元素的个数。此任务的目标是在 Paddle 框架中,新增 count_nonzero API,调用路径为:paddle.count_nonzero 和 Tensor.count_nonzero。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/__init__.py 中,添加 count_nonzero API,以支持 Tensor.count_nonzero 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 count_nonzero 计算非零元素个数的算法原理和适用场景;
- 熟悉 Paddle 动静态图下数学计算过程;
- 熟练掌握 Python。
No.16:为 Paddle 新增 take API
-
任务难度:基础
-
详细描述:根据索引返回指定索引上的数据集合。此任务的目标是在 Paddle 框架中,新增 take API,调用路径为:paddle.take 和 Tensor.take。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/init.py 中,添加 take API,以支持 Tensor.take 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文API文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 take 算法原理和适用场景;
- 熟悉 Paddle 动静态图下数学计算过程;
- 熟练掌握 Python。
No.17:为 Paddle 新增 sgn API
-
任务难度:基础
-
详细描述:对于复数张量,此函数返回一个新的张量,其元素与
input元素的角度相同且绝对值为 1。对于非复数张量,此函数返回input元素的符号。此任务的目标是在 Paddle 框架中,新增 sgn API,调用路径为:paddle.sgn 和 Tensor.sgn。 -
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/__init__.py 中,添加 sgn API,以支持 Tensor.sgn 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 sgn 符合函数的算法原理和适用场景;
- 熟悉 Paddle 动静态图下数学计算和复数计算过程;
- 熟练掌握 Python。
No.18:为 Paddle 新增 frexp API
-
任务难度:基础
-
详细描述:将输入分解为尾数张量和指数张量。返回(尾数张量, 指数张量),其中 x = 尾数 * 2**指数。尾数位于开区间 (-1, 1) 中,而二进制指数是有符号整数。此任务的目标是在 Paddle 框架中,新增 frexp API,调用路径为:paddle.frexp 和 Tensor.frexp。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/__init__.py 中,添加 frexp API,以支持 Tensor.frexp 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 frexp 函数的算法原理和适用场景;
- 熟练掌握 Python。
No.19:为 Paddle 新增 nexafter API
-
任务难度:基础
-
详细描述:将输入后的下一个浮点值返回给其他元素,输入和其他 shape 必须是可广播的。此任务的目标是在 Paddle 框架中,新增 nextafter API,调用路径为:paddle.nextafter 和 Tensor.nextafter。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/__init__.py 中,添加 nextafter API,以支持 Tensor.nextafter 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 nextafter 函数的算法原理和适用场景;
- 熟练掌握 Python。
No.20:为 Paddle 新增 vsplit API
-
任务难度:基础
-
详细描述:根据 index 或者section 将输入(一个具有两个或多个维度的张量)垂直拆分为多个张量。每个拆分都是一个输入视图。此任务的目标是在 Paddle 框架中,新增 vsplit API,调用路径为:paddle.vsplit 和 Tensor.vsplit。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/tensor/math.py 文件;并在 python/paddle/tensor/__init__.py 中,添加 vsplit API,以支持 Tensor.vsplit 的调用方式;
- 单测代码,在 Paddle repo 的 python/paddle/fluid/tests/unittests 目录;
- 中文 API 文档,在 docs repo 的 docs/api/paddle 目录和 docs/api/paddle/Tensor_cn.rst 文件,同时需要在 docs/api/paddle/Overview_cn.rst 文件中添加 API 介绍。
-
技术要求
- 熟悉 vsplit 函数的算法原理和适用场景;
- 熟练掌握 Python。
No.21:为 Paddle 新增 paddle.incubate.sparse.transpose 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述: 针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 transpose 计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录,新建 transpose_kernel.h,cpu/transpose_kernel.cc、gpu/transpose_kernel.cu 文件;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_transpose_op.py 文件;
- yaml文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 transpose 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.22:为 Paddle 新增 paddle.incubate.sparse.reshape 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述: 针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR ,都需新增 reshape 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_reshape_op.py 文件;
- yaml文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 reshape 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.23:为 Paddle 新增 paddle.incubate.sparse.is_same_size 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述: 针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 is_same_size 的计算逻辑,一共需要实现 4种情况下的比较,即 coo 与 dense、csr 与 dense、coo 与 coo、csr 与 csr。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/binary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_is_same_size.py 文件。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 CSR/COO 存储格式,Paddle 的 SparseCsrTensor/SparseCooTensor 数据结构;
- 熟悉稀疏 Tensor 的 is_same_size 在 CSR/COO 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.24:为 Paddle 新增 paddle.incubate.sparse.nn.Softmax 稀疏 API 的 coo 格式计算逻辑
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:针对 Paddle 的稀疏 Tensor 格式 COO,需要新增 softmax 的计算逻辑,一共需要新增 1个 kernel 的前向与反向,其中参数 axis 可支持任意维度,注意只需新增 coo 格式的逻辑,csr 格式的已经实现,此次无需实现。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/nn/functional/activation.py 文件和 python/paddle/incubate/sparse/nn/layer/activation.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录的 softamx_kernel.h/cc/cu 三个文件中,分别补充 coo 的计算 kernel;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_softmax_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO 存储格式,Paddle 的 SparseCooTensor 数据结构;
- 熟悉稀疏 Tensor 的 softmax 在 COO 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.25:为 Paddle 新增 paddle.incubate.sparse.concat 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 concat 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 新建 python/paddle/incubate/sparse/multiary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_concat_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor的 concat 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.26:为 Paddle 新增 paddle.incubate.sparse.index_select 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:针对 Paddle 的两种稀疏 Tensor 存储格式 COO 与 CSR,都需新增 index_select 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/binary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_index_select_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 index_select 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.27:为 Paddle 新增 paddle.incubate.sparse.any 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:针对 Paddle 的两种稀疏 Tensor 存储格式 COO 与 CSR,需要新增 any 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_any_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor的 any 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.28:为 Paddle 新增 paddle.incubate.sparse.slice 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 slice 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 coo 格式的 axis 支持任意维度,csr 格式的 axis 可只支持-1(即按行读取)和 None。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录中;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_slice_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 slice 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
No.29:为 Paddle 新增 paddle.incubate.sparse.sum 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:进阶
-
详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,需新增 reduce sum 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 coo 格式的 axis 支持任意维度,csr 格式的 axis 可只支持-1,即按行读取。另外当 axis=None 时所有元素相加。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_sum_op.py 文件;
- yaml 文件,前反向分别添加到python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 reduce sum 在 COO/CSR 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA代码编写。
No.30:为 Paddle 新增 paddle.incubate.sparse.is_nan 稀疏 API
-
技术标签:深度学习框架,Python,C++,CUDA
-
任务难度:基础
-
详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,需新增 is_nan 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。
-
提交内容
- API 的设计文档,并提 PR 至 community repo 的 rfcs/APIs 目录;
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 python/paddle/incubate/sparse/unary.py 文件;
- C++ kernel 实现代码,在Paddle repo 的paddle/phi/kernels/sparse/ 目录;
- 单测代码,在 Paddle repo 新建 python/paddle/fluid/tests/unittests/test_sparse_is_nan.py 文件;
- yaml 文件,前反向分别添加到 python/paddle/utils/code_gen/sparse_api.yaml、python/paddle/utils/code_gen/sparse_bw_api.yaml 文件中。
- 中文 API 文档,在 docs repo 的 docs/api/paddle/incubate/sparse 目录。
-
技术要求
- 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
- 熟悉稀疏 Tensor 的 is_nan 在 CSR/COO 存储格式下的计算逻辑;
- 熟练掌握 Python、C++、CUDA 代码编写。
合入标准
- 按 API 设计规范 完成 API 设计文档;
- 按 API 验收标准 完成 API 功能实现、单测、API文档;
- 稀疏 API 任务需符合稀疏 OP 的特殊开发规范(如有):
- 【yaml规则】:写到同一个 yaml api,不要写多个,yaml 需支持调度
- 【kernel名规则】:[计算名] + 异构后缀,例如 matmul_csr_dense、softmax_csr、softmax_coo
- 【文件名规则】:sparse/xx_kernel.cc,sparse/xx_kernel.cu,以目录区分,文件名与dense保持一致
参考内容
答疑交流
- 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 下留言交流。
- 对于开发中的共性问题,在活动过程中,会定期组织答疑,请关注官网&QQ群的通知,及时参与。




