-
Notifications
You must be signed in to change notification settings - Fork 5.6k
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】API 开发任务合集 #44073
Labels
Comments
This comment was marked as outdated.
This comment was marked as outdated.
This was referenced Sep 23, 2022
Closed
Since you haven't replied for more than a year, we have closed this issue/pr. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
(此 ISSUE 为 PaddlePaddle Hackathon 第三期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第三期】任务总览)
为飞桨框架新增一系列 API,提交流程请参考 新增API 开发&提交流程,开发请参考 贡献指南,任务列表如下,其他说明事项在任务列表后:
No.1:为 Paddle 新增 finfo API
10**-precision
. 其中 precision 为 IEEE754 标准中该类型有效数字位数提交内容
技术要求
No.2:为 Paddle 新增 iinfo API
提交内容
技术要求
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。
提交内容
技术要求
No.4:为 Paddle 新增 cummax API
任务难度:基础
详细描述:cummax API 是一个按轴寻找累计最大值和最大值所在位置的 API。此任务的目标是在 Paddle 框架中,新增 cummax API,调用路径为:paddle.cummax 和 paddle.Tensor.cummax。
提交内容
技术要求
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。
提交内容
技术要求
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 。
提交内容
技术要求
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。提交内容
技术要求
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。提交内容
技术要求
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。提交内容
技术要求
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。提交内容
技术要求
No.11:为 Paddle 新增 multi_margin_loss API
对于一个样本来说(这里不考虑 batch, 所以 input 是一个形状为 (C,) 的向量),target 就是一个整数。给定一个浮点数 margin,
x 中每一个类别的评分对应的 loss 为
对上述 loss 取平均值
其次,还可以为每一个类别赋予一个不同的权重。给定一个可选的一维 Tensor weight,(形状为 (C,), 公式中为 w。那么上述公式中的 loss 改为如下公式:
此外这个函数还需要支持 power 的功能,亦即对 loss 计算幂。亦即,对上述单个 loss 取 power.(公式中为 p) . 公式中的 loss 改为如下形式:
最后再对多个样本的 loss 进行 reduction. (可以 sum, mean 或者不 reduce)。
提交内容
技术要求
No.12:为 Paddle 新增 pairwise_distance API
函数接口为
按照如下的方式计算
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 为条件。
注意事项:
提交内容
技术要求
No.13:为 Paddle 新增 triu_indices API
任务难度:基础
详细描述: triu_indices 能获取一个2维矩阵的上三角元素的索引,其输出 Tensor 的 shape 为[2, N],相当于有两行,第一行为 上三角元素的行索引,第二行为下三角元素的列索引。此任务的目标是在 Paddle 框架中,新增 triu_indices API,调用路径为:paddle.triu_indices。可以参考:paddle.tril_indices。
提交内容
技术要求
No.14:为 Paddle 新增 remainder_ API
任务难度:基础
详细描述:paddle.Tensor.remainder 的 inplace版本 。此任务的目标是在 Paddle 框架中,新增 remainder_ API,调用路径为:paddle.remainder_ 和 Tensor.remainder_。可参考:subtract_ API 的实现。
提交内容
技术要求
No.15:为 Paddle 新增 count_nonzero API
任务难度:基础
详细描述:计算输入中非零元素的个数。此任务的目标是在 Paddle 框架中,新增 count_nonzero API,调用路径为:paddle.count_nonzero 和 Tensor.count_nonzero。
提交内容
技术要求
No.16:为 Paddle 新增 take API
任务难度:基础
详细描述:根据索引返回指定索引上的数据集合。此任务的目标是在 Paddle 框架中,新增 take API,调用路径为:paddle.take 和 Tensor.take。
提交内容
技术要求
No.17:为 Paddle 新增 sgn API
任务难度:基础
详细描述:对于复数张量,此函数返回一个新的张量,其元素与
input
元素的角度相同且绝对值为 1。对于非复数张量,此函数返回input
元素的符号。此任务的目标是在 Paddle 框架中,新增 sgn API,调用路径为:paddle.sgn 和 Tensor.sgn。提交内容
技术要求
No.18:为 Paddle 新增 frexp API
任务难度:基础
详细描述:将输入分解为尾数张量和指数张量。返回(尾数张量, 指数张量),其中 x = 尾数 * 2**指数。尾数位于开区间 (-1, 1) 中,而二进制指数是有符号整数。此任务的目标是在 Paddle 框架中,新增 frexp API,调用路径为:paddle.frexp 和 Tensor.frexp。
提交内容
技术要求
No.19:为 Paddle 新增 nexafter API
任务难度:基础
详细描述:将输入后的下一个浮点值返回给其他元素,输入和其他 shape 必须是可广播的。此任务的目标是在 Paddle 框架中,新增 nextafter API,调用路径为:paddle.nextafter 和 Tensor.nextafter。
提交内容
技术要求
No.20:为 Paddle 新增 vsplit API
任务难度:基础
详细描述:根据 index 或者section 将输入(一个具有两个或多个维度的张量)垂直拆分为多个张量。每个拆分都是一个输入视图。此任务的目标是在 Paddle 框架中,新增 vsplit API,调用路径为:paddle.vsplit 和 Tensor.vsplit。
提交内容
技术要求
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。
提交内容
技术要求
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。
提交内容
技术要求
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。
提交内容
技术要求
No.24:为 Paddle 新增 paddle.incubate.sparse.nn.Softmax 稀疏 API 的 coo 格式计算逻辑
技术标签:深度学习框架,Python,C++,CUDA
任务难度:进阶
详细描述:针对 Paddle 的稀疏 Tensor 格式 COO,需要新增 softmax 的计算逻辑,一共需要新增 1个 kernel 的前向与反向,其中参数 axis 可支持任意维度,注意只需新增 coo 格式的逻辑,csr 格式的已经实现,此次无需实现。
提交内容
技术要求
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。
提交内容
技术要求
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。
提交内容
技术要求
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。
提交内容
技术要求
No.28:为 Paddle 新增 paddle.incubate.sparse.slice 稀疏 API
技术标签:深度学习框架,Python,C++,CUDA
任务难度:进阶
详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 slice 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 coo 格式的 axis 支持任意维度,csr 格式的 axis 可只支持-1(即按行读取)和 None。
提交内容
技术要求
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 时所有元素相加。
提交内容
技术要求
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。
提交内容
技术要求
合入标准
参考内容
答疑交流
The text was updated successfully, but these errors were encountered: