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 4】核心框架开源贡献 API 开发任务合集 #50630

Closed
cloud2009 opened this issue Feb 18, 2023 · 3 comments
Closed
Assignees

Comments

@cloud2009
Copy link

cloud2009 commented Feb 18, 2023

【PaddlePaddle Hackathon 4】核心框架开源贡献 API 开发任务合集

(此 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 。API 设计文档可参考 api_design_for_finfo.md
  • 提交内容:
  • 技术要求:
    • 熟练掌握 C++ (如有 C++ 开发)、Python;
    • 熟悉 C++ 标准库 std::numeric_limits。

No.2:为 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_design_for_cdist.md
  • 提交内容
  • 技术要求
    • 熟悉 p 范数(p-norm)计算原理;
    • 熟悉 Paddle 动静态图下数学计算过程;
    • 熟练掌握 C++、CUDA、Python。

No.3:为 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,设计文档可参考 community#pull/173
  • 提交内容
  • 技术要求
    • 熟悉 trapezoid 算法逻辑;
    • 熟练掌握 Python,及 Tensor 切片操作。

No.4:为 Paddle 新增 cumulative_trapezoid API

  • 任务难度:基础
  • 详细描述:在输入N 维 Tensor 指定的某一维计算 累积的 trapezoid rule 结果。和trapezoid的区别是:trapezoid 在计算加和时使用sum,而 cumulative_trapezoid 计算加和时使用 cumsum 。比如输入数据 y = paddle.to_tensor([[2, 4, 8], [3, 5, 9]]),x = paddle.tensor([[1, 2, 3], [3, 4, 5]]),则 paddle.cumulative_trapezoid(y, x, axis=-1)) 或 y.cumulative_trapezoid(x, axis=-1) 得到 [[3, 9], [4, 11]],同时 paddle.cumulative_trapezoid(y, x, axis=0)) 或 y.cumulative_trapezoid(x, axis=0) 得到 [[5, 9, 17]],注意这个结果的shape=(1, 3) 。此 API 需支持的调用路径为:paddle.cumulative_trapezoid 和 Tensor.cumulative_trapezoid
  • 提交内容
  • 技术要求
    • 熟悉 trapezoid 算法逻辑,熟悉 cumsum 的逻辑;
    • 熟练掌握 Python,及 Tensor 切片操作。

No.5:为 Paddle 新增 nextafter API

No.6:为 Paddle 新增 ldexp API

  • 任务难度:基础
  • 详细描述:通过将输入中的尾数与从另一个输入中的指数创建的2的整数幂相乘来构造浮点数。此任务的目标是在 Paddle 框架中,新增 ldexp API,调用路径为:paddle.ldexp 和 Tensor.ldexp。
  • 提交内容
  • 技术要求
    • 熟悉 ldexp 函数的算法原理和适用场景;
    • 熟练掌握 Python。

No.7:为 Paddle 新增 Unflatten API

  • 任务难度:基础
  • 详细描述:将输入Tensor的某一个维度,扩展成多个维度。此任务的目标是在 Paddle 框架中,添加以下调用方式:

​ paddle.unflatten 、Tensor.unflatten以及paddle.nn.Unflatten

No.8:为 Paddle 新增 xlogy API

No.9:为 Paddle 新增 pca_lowrank API

  • 任务难度:基础
  • 详细描述:对低秩矩阵、批次低秩矩阵或稀疏矩阵进行线性主成分分析 (PCA)。此任务的目标是在 Paddle 框架中,新增 pca_lowrank API,调用路径为:paddle.pca_lowrank 和 paddle.Tensor.pca_lowrank 。
  • 提交内容
  • 技术要求
    • 熟悉 PCA 原理和适用场景;
    • 熟练掌握 Python、C++。

No.10:为 Paddle 新增 copysign API

  • 任务难度:基础
  • 详细描述:根据两个输入逐元素地计算结果张量,其结果由第一个输入的绝对值大小及第二个输入的符号组成。此任务的目标是在 Paddle 框架中,新增 copysign API,调用路径为:paddle.copysign 和 Tensor.copysign。
  • 提交内容
  • 技术要求
    • 熟悉 copysign 函数的计算原理和适用场景;
    • 熟练掌握 Python。

No.11:为 Paddle 新增 Geometric API

  • 任务难度:基础

    详细描述:新增 paddle.distribution.Geometric,用于 Geometric 分布的概率统计与随机采样,至少包括如下方法:

    • mean计算均值;
    • variance计算方差 ;
    • sample随机采样;
    • rsample 重参数化采样;
    • prob 概率密度;
    • log_prob对数概率密度;
    • entropy 熵计算;
    • kl散度计算(python/paddle/distribution/kl.py)

    上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。

    类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行决策。要求代码风格及设计思路与已有概率分布保持一致,参考 python/paddle/distribution/beta.py

    【提交内容】

    【技术要求】

    • 熟悉概率分布基本原理;
    • 熟练掌握Python;
    • 能通过阅读源码,了解Paddle现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布,参考 python/paddle/distribution

No.12:为 Paddle 新增 Cauchy API

  • 任务难度:基础

    详细描述:新增 paddle.distribution.Cauchy,用于 Cauchy 分布的概率统计与随机采样,至少包括如下方法:

    • mean计算均值;
    • variance计算方差 ;
    • sample随机采样;
    • rsample 重参数化采样;
    • prob 概率密度;
    • log_prob对数概率密度;
    • entropy 熵计算;
    • kl散度计算 (python/paddle/distribution/kl.py)

    上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。

    类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行决策。要求代码风格及设计思路与已有概率分布保持一致,参考 python/paddle/distribution/beta.py

    【提交内容】

    【技术要求】

    • 熟悉概率分布基本原理;
    • 熟练掌握Python;
    • 能通过阅读源码,了解Paddle现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布,参考 python/paddle/distribution

No.13:为 Paddle 新增 Bernoulli API

  • 任务难度:基础

    详细描述:新增 paddle.distribution.Bernoulli,用于 Bernoulli 分布的概率统计与随机采样,至少包括如下方法:

    • mean计算均值;
    • variance计算方差 ;
    • sample随机采样;
    • rsample 重参数化采样;
    • prob 概率密度;
    • log_prob对数概率密度;
    • entropy 熵计算;
    • kl散度计算 (python/paddle/distribution/kl.py)

    上述方法可能无法全部支持,需要设计中说明不支持原因,抛出NotImplementedError异常即可。

    类签名及各个方法签名,请通过调研 Paddle 及业界实现惯例进行决策。要求代码风格及设计思路与已有概率分布保持一致,参考 python/paddle/distribution/beta.py

    【提交内容】

    【技术要求】

    • 熟悉概率分布基本原理;
    • 熟练掌握Python;
    • 能通过阅读源码,了解Paddle现有概率分布设计与实现原理,并基于已有设计,扩展新的概率分布,参考 python/paddle/distribution

No.14:为 Paddle 新增 polar API

No.15:为 Paddle 新增 GaussianNLLLoss API

  • 任务难度:基础
  • 详细描述:GaussianNLLLoss是指真实标签服从高斯分布的负对数似然损失,神经网络的输出作为高斯分布的均值和方差。此任务的目标是在 Paddle 框架中,新增 GaussianNLLLoss API,调用路径为:paddle.nn.GaussianNLLLoss 和 paddle.nn.functional.gaussian_nll_loss
  • 提交内容
  • 技术要求
    • 熟悉 GaussianNLLLoss 原理和使用场景;
    • 熟练掌握 Python 以及 Tensor操作;

No.16:为 Paddle 新增 PoissonNLLLoss API

  • 任务难度:基础
  • 详细描述:PoissonNLLLoss是指真实标签服从泊松分布的负对数似然损失,神经网络的输出作为泊松分布的参数λ。此任务的目标是在 Paddle 框架中,新增 PoissonNLLLoss API,调用路径为:paddle.nn.PoissonNLLLoss 和 paddle.nn.functional.poisson_nll_loss
  • 提交内容
  • 技术要求
    • 熟悉 PoissonNLLLoss 原理和使用场景;
    • 熟练掌握 Python 以及 Tensor操作;

No.17:为 Paddle 新增 cummax / cummin API

No.18:为 Paddle 新增 matrix_exp API

  • 任务难度:进阶
  • 详细描述:方阵的指数函数,类似 exp 函数(注意与 elementwise 的 exp 函数的区别)。设Xn×n实数复数矩阵X的指数,用eX或exp(X)来表示,是由以下幂级数所给出的n×n矩阵:

image

No.19:为 Paddle 新增 polygamma API

  • 任务难度:进阶
  • 详细描述:对于输入张量,其 digamma 函数的 n 阶导,称为多伽马函数(polygamma)。此任务的目标是在 Paddle 框架中,新增 polygamma API,调用路径为:paddle.polygamma 和 paddle.Tensor.polygamma。
  • 提交内容
  • 技术要求
    • 熟悉polygamma函数计算原理;
    • 熟练掌握 C++、Python。

No.20:为 Paddle 新增 i0 / i0e API

No.21:为 Paddle 新增 i1/ i1e API

No.22:为 Paddle 新增 lu_solve API

  • 任务难度:进阶

  • 详细描述:使用 LU分解 来求解线性方程组 AX=B,A为方阵,B为矩阵,A和B已知,通过LU分解方阵A来求解X。即 LU, pivots =paddle.linalg.lu(A); X = paddle.linalg.lu_solve(LU, pivots, B) 与 使用 X=paddle.linalg.lu_solve(A, B) 直接求解线性方程组的结果一样。此任务的目标是在 Paddle 框架中,新增 lu_solve API,调用路径为:paddle.linalg.lu_solve 和 Tensor.lu_solve

  • 提交内容

  • 技术要求

    • 熟悉矩阵 LU 分解原理,了解当前 paddle.linalg.lu 的逻辑;
    • 熟悉 lapack/cublas 库;
    • 熟练掌握 Python。

No.23:为 Paddle 新增 vander API

No.24:为 Paddle 新增 paddle.sparse.is_nan 稀疏 API

  • 技术标签:深度学习框架,Python,C++,CUDA

  • 任务难度:基础

  • 详细描述:针对 Paddle 的稀疏 Tensor 格式 COO,需要新增 is_nan 的计算逻辑,一共需要新增 1个 kernel 的前向与反向,其中参数 axis 可支持任意维度,注意只需新增 coo 格式的逻辑,csr 格式的已经实现,此次无需实现。

  • 提交内容

  • 技术要求

    • 熟悉稀疏 COO 存储格式,Paddle 的 SparseCooTensor 数据结构;
    • 熟悉稀疏 Tensor 的 is_nan 在 COO 存储格式下的计算逻辑;
    • 熟练掌握 Python、C++、CUDA 代码编写。

No.25:为 Paddle 新增 paddle.sparse.any 稀疏 API

  • 任务难度:基础
  • 详细描述:针对 Paddle 的两种稀疏 Tensor 存储格式 COO 与 CSR,需要新增 any 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor,动静态图都需要支持。
  • 提交内容
  • 技术要求
    • 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
    • 熟悉稀疏 Tensor的 any 计算逻辑;
    • 熟练掌握 Python、C++、CUDA 代码编写。

No.26:为 Paddle 新增 paddle.sparse.nn.Softmax 稀疏 API 的 coo 格式计算逻辑

No.27:为 Paddle 新增 paddle.sparse.concat 稀疏 API

  • 任务难度:进阶
  • 详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,都需新增 concat 的计算逻辑,一共需要新增 2个 kernel 的前向与反向,其中 CSR 的 kernel 需支持 2D/3D Tensor,COO 的 kernel 需支持任意维度的 Tensor。动静态图都需要支持。动静态图都需要支持。
  • 提交内容
  • 技术要求
    • 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
    • 熟悉稀疏 Tensor的 concat 计算逻辑;
    • 熟练掌握 Python、C++、CUDA 代码编写。

No.28:为 Paddle 新增 paddle.sparse.index_select 稀疏 API

No.29:为 Paddle 新增 paddle.sparse.slice 稀疏 API

No.30:为 Paddle 新增 paddle.sparse.sum 稀疏 API

  • 任务难度:进阶
  • 详细描述:针对 Paddle 的两种稀疏 Tensor 格式 COO 与 CSR,需新增 sum 的计算逻辑,sum为一种指定维度上累加求和操作。一共需要新增 2个 kernel 的前向与反向,其中 coo 格式的 axis 支持任意维度,csr 格式的 axis 可只支持-1,即按行读取。另外当 axis=None 时所有元素相加。动静态图都需要支持。
  • 提交内容
  • 技术要求
    • 熟悉稀疏 COO/CSR 存储格式,Paddle 的 SparseCooTensor/SparseCsrTensor 数据结构;
    • 熟悉稀疏 Tensor 的 sum 计算逻辑;
    • 熟练掌握 Python、C++、CUDA代码编写。

No.31:部分API发生除0、空指针、堆栈溢出等问题的修复

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

合入标准

  • 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 和 Discussion下留言交流。
  • 对于开发中的共性问题,在活动过程中,会定期组织答疑,请关注官网&微信群的通知,及时参与。
@paddle-bot
Copy link

paddle-bot bot commented Feb 18, 2023

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 核心框架开源贡献任务合集(2023-02-20公布) 【PaddlePaddle Hackathon 4】 子任务合集1(2023-02-20公布) Feb 18, 2023
@paddle-bot paddle-bot bot added type/others 其他问题 hackathon status/reopen 重新打开 labels Feb 20, 2023
@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 子任务合集1(2023-02-20公布) 【PaddlePaddle Hackathon 4】 核心框架开源贡献 API 开发任务合集 Feb 20, 2023
@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 核心框架开源贡献 API 开发任务合集 【PaddlePaddle Hackathon 4】核心框架开源贡献 API 开发任务合集 Feb 20, 2023
@thunder95
Copy link
Contributor

请问任务24描述里是softmax, 但是标题是is_nan, 这里任务描述里提交内容貌似不太对 @luotao1

@luotao1
Copy link
Contributor

luotao1 commented Mar 3, 2023

请问任务24描述里是softmax, 但是标题是is_nan, 这里任务描述里提交内容貌似不太对

@thunder95 感谢提醒,已经修正

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

4 participants