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】核心框架开源贡献数据类型扩展任务合集 #50658

Closed
cloud2009 opened this issue Feb 20, 2023 · 1 comment
Assignees

Comments

@cloud2009
Copy link

cloud2009 commented Feb 20, 2023

【PaddlePaddle Hackathon 4】核心框架开源贡献数据类型扩展任务合集

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

注:为飞桨框架一系列算子增加支持的数据类型,提交流程请参考 算子数据类型扩展&提交流程 & 低精度算子开发贡献指南,开发请参考 贡献指南, 任务列表如下:

算子 FP16/BF16算子及单测完善,建议2-3个算子提交一个PR,便于快速review&merge。

No.45:为 Paddle logical 算子实现 float16 数据类型支持

  • 技术标签:深度学习框架,C++
  • 任务难度:基础
  • 详细描述:logical 类的算子未支持 float16 类型,因此该功能要求为这类算子注册 float16 类型,使得 float16 下精度与期望结果的误差不超过 1e-3,并且性能不差于使用 float32 类型计算。本任务共包含 4 个具体算子:logical_and,logical_or,logical_xor,logical_not
  • 任务提交:

No.46:为 Paddle gumbel_softmax 算子实现 float16 数据类型支持

No.47:为 Paddle cross 算子实现 float16 数据类型支持

No.48:为 Paddle assign_value、meshgrid、kthvalue、determinant 算子实现 float16 数据类型支持

No.49:为 Paddle bce_loss 算子实现 float16 数据类型支持

No.50:为 Paddle lerp 算子实现 float16 数据类型支持

No.51:为 Paddle maxout 算子实现 float16 数据类型支持

No.52:为 Paddle dist 算子实现 float16 数据类型支持

No.53:为 Paddle label_smooth 算子实现 float16 数据类型支持

No.54:为 Paddle allclose、isclose 算子实现 float16 数据类型支持

No.55:channel_shuffle 等算子FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 argsort、channel_shuffle、pixel_unshuffle、pixel_shuffle、fmax、fmin、erf、erfinv 算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.56:set_value 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 fill、fill_diagonal_tensor、diag、diagonal、bernoulli、poisson、trunc、searchsorted 算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.57:gaussian 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 gaussian、cross、dot、conv3d、conv3d_transpose、max_pool2d_with_index、max_pool3d_with_index 、flip算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.58:linear_interp 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 logcumsumexp、logsumexp、empty、empty_like、kthvalue、exponential 、atan2、set_value、pad算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.59:addmm 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 addmm、bmm、angle、put_along_axis、take_along_axis、index_sample、index_add、hardtanh 算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.60:angle 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 prelu、multinomial、multi_dot、overlap_add、clip_by_norm、randperm、sign、split、split_with_num 算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.61:unfold 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 unfold、min、mode、logsigmoid、uniform_inplace、segment_pool、update_loss_scaling、remainder 算子的FP16算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.62:masked_select 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 masked_select、dirichlet、lgamma、dropout_nd、digamma、margin_cross_entropy、broadcast_tensors 、pool3d、transfer_layout算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.63:complex 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 complex、eye、lerp、frame、embedding、nanmedian、temporal_shift、conj 算子的 FP16 算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.64:trace 等算子 FP16/BF16算子及单测完善

  • 任务难度:基础
  • 详细描述:
    • 参照 FP16 算子开发文档和 FP16 单测开发文档对 trace、elementwise_heaviside、huber_loss、logspace、full_batch_size_like、unbind、einsum、matmul_with_flatten、trace 算子的FP16算子实现和单测的修改。
    • 各算子的对应单测文件及需要完成的任务在任务表单中给出
    • 保证算子正确性和单测正确性,提交代码至 Paddle 代码仓库
  • 文档参考:

No.65:为 Paddle matmul_with_flatten/matmul 前向算子实现 int8 数据类型支持

  • 技术标签:深度学习框架,C++,CUDA, 量化
  • 任务难度:基础
  • 详细描述:为了更好的支持量化训练和原生量化推理,需要对 matmul 和matmul_with_flatten 算子添加 int8 数据类型的支持。推荐使用框架内接口调用 cublasLt 作为 int8 矩阵乘的计算后端并根据实际情况适配,也可使用其他方式实现。要求精度无误,算子性能在常见 case 下快于 FP16。
  • 提交内容:
    • 修改前向算子注册: paddle/phi/kernels/gpu/matmul_kernel.cu
    • 修改前向算子GPU kernel:paddle/phi/kernels/impl/matmul_kernel_impl.h
    • 修改 cublasLt int8 计算后端:paddle/fluid/operators/fused/cublaslt.h
    • 单元测试脚本中增加测试样例:
      • python/paddle/fluid/tests/unittests/test_mul_op.py
      • python/paddle/fluid/tests/unittests/test_matmul_op.py
      • python/paddle/fluid/tests/unittests/test_matmul_v2_op.py
    • 提交PR,在PR描述中说明做法并附上FP16/32的性能对比
  • 技术要求:
    • 熟练掌握 Python、C++、CUDA 代码编写
    • 了解量化原理和量化推理执行流程

No.66:为Paddle FC 前向算子实现量化计算

  • 技术标签:深度学习框架,C++,CUDA, 量化
  • 任务难度:基础
  • 详细描述:为了更好的支持原生量化推理,需要对FC算子添加量化支持。算子的 Input/Bias/Out 类型保持不变,要求W支持int8输入;需要额外添加量化kernel,反量化 kernel,和 int8 类型的矩阵乘运算;要求为OP添加量化开关作为算子属性,同时添加属性 max_bound/min_bound, round_type;算子已有quant_in_scale 属性,可以直接使用该属性作为量化输入的参数(layer_wise),添加 weight_scale(channel_wise) 作为输入Tensor用于计算输出的反量化参数。INT8矩阵乘推荐使用框架内接口调用 cublasLt 作为int8矩阵乘的计算后端并根据实际情况适配,也可使用其他方式实现。要求精度无误,算子性能在常见 case 下快于 FP16。
  • 提交内容:
    • 修改前向算子声明: paddle/fluid/operators/fc_op.cc
    • 修改前向算子GPU kernel:paddle/fluid/operators/fc_op.h
    • 修改cublasLt int8计算后端:paddle/fluid/operators/fused/cublaslt.h
    • 单元测试脚本中增加测试样例:python/paddle/fluid/tests/unittests/test_fc_op.py
    • 提交PR,在PR描述中说明做法并附上 FP16/32 的性能对比
  • 技术要求:
    • 熟练掌握 Python、C++、CUDA 代码编写
    • 熟悉量化原理和量化推理执行流程
    • 了解 Paddle 算子体系

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

合入标准

  • float16 数据类型支持
    • 精度:依据各任务描述为算子扩展数据类型,通过算子的单元测试;
    • 性能:OP Benchmark 对应 OP 的全部配置 case 性能不出现下降问题,使用 float16 类型的算子性能不差于使用 float32 类型。
  • FP16/BF16算子及单测完善
    • 精度:依据单测添加规范,设置或修改FP16单测的精度误差阈值,使之尽可能精确且通过算子的所有单元测试
    • 测例数量:FP16的测例数量不少于FP32的测例
  • int8 数据类型支持
    • 精度:在单元测试中添加模拟量化过程,使算子通过单元测试
    • 性能:在常见case下性能高于FP16

技术要求

  • 熟练掌握 Python、C++、CUDA 代码编写;
  • 掌握 OP Benchmark 使用方法;
  • 熟悉量化原理和量化推理执行流程

答疑交流

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

paddle-bot bot commented Feb 20, 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!

@paddle-bot paddle-bot bot added type/others 其他问题 hackathon labels Feb 20, 2023
@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 子任务合集6(2023-02-20公布) 【PaddlePaddle Hackathon 4】 核心框架开源贡献数据类型扩展任务合集 Feb 20, 2023
@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 核心框架开源贡献数据类型扩展任务合集 【PaddlePaddle Hackathon 4】核心框架开源贡献数据类型扩展任务合集 Feb 20, 2023
@luotao1 luotao1 assigned luotao1 and unassigned LemonNoel Feb 20, 2023
@luotao1 luotao1 closed this as completed May 31, 2023
@paddle-bot paddle-bot bot added the status/close 已关闭 label May 31, 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

4 participants