Skip to content

Latest commit

 

History

History
408 lines (242 loc) · 25.8 KB

【PaddlePaddle Hackathon 5th】开源贡献个人挑战赛框架开发任务合集.md

File metadata and controls

408 lines (242 loc) · 25.8 KB

此文档展示 PaddlePaddle Hackathon 第五期活动——开源贡献个人挑战赛框架开发任务 详细介绍,更多详见 PaddlePaddle Hackathon 说明

【开源贡献个人挑战赛-框架开发任务(除API开发)】任务详情

No.42:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第1组(编号为1 ~ 20) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.43:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第2组(编号为21 ~ 41) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.44:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第3组(编号为42 ~ 61) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.45:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第4组(编号为62 ~ 83) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.46:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第5组(编号为84 ~ 102) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.47:为Paddle代码转换工具新增API转换规则

详细描述:

为了能自动化将其它深度学习代码转写成 Paddle 代码,从而提升模型代码迁移的效率,我们建设了 代码自动转换工具: PaddlePaddle Code Convert Toolkits。此次需要你完成 API转换名单 中第6组(编号为103 ~ 124) 的API转换规则开发。

提交内容:

  • API映射关系文档:具体文档模板及要求请参考 《API映射关系-格式规范》 。PR提交到 PaddlePaddle/docs 下,需要为每个 API 新增对应的 md 文件并放入docs/guides/model_convert/convert_from_pytorch/api_difference 对应目录下,文件名为PyTorch API名。如果已存在该API的映射关系,则无需新增 md 文件,只需要检查并校正之前的文档正确性
  • API转换规则:请Fork代码仓库 PaConvert 来提交代码,具体开发步骤,参考 《PaConvert:如何贡献代码》步骤
  • 单测代码:提交到 PaConvert 中,参考 《PaConvert:如何贡献代码》中步骤5,注意单测规范与要求。
  • :如果发现由于对应Paddle API的 功能缺失、功能Bug、功能diff 等问题,导致无法实现转换,请在API映射关系文档中说明,同时需开发屏蔽版本的测试case(参考已有代码)。

技术要求:

  • 熟练掌握Python
  • 熟悉Pytorch、Paddle两者API的使用,善于捕捉并分析细节差异

No.48:ContiguousKernel、StridedCopyKernel算子CPU、GPU性能优化

详细描述:

  • 在Paddle支持了 stride 后,大多模型会大量执行ContiguousKernel、StridedCopyKernel,因此两个 kernel 的性能尤为关键。
  • 目前两个 kernel 都是通过 numel index 计算数据偏移地址,需要一个 for 循环做计算,计算偏移地址效率低,导致 kernel 性能差。如果改成跟进 stride 计算下一个 element 的偏移地址,则性能会大幅提升。PR56866 提供了初步示例,仍需调试,可以参考。更好的办法是先优化CPU kernel,再优化GPU,因为CPU易调试。设计文档示例:op_optimization_example.md。优化方法参考:算子性能优化方法

提交内容:

技术要求:

  • 了解stride原理
  • 了解CUDA编程、kernel性能优化

No.49:python端补齐OpResult的patch方法

详细描述:

  • 在新IR升级项目中,python端的Variable会被替换为OpResult。原来通过Variable.xx()方式调用的方法在新IR下也需要通过OpResult.xx()的方式进行调用,所以需要补齐这些方法
  • 详细描述:
    • 补齐类似__add__等加、减、乘、除等操作符方法
    • 补齐类似OpResult.reshape()这这类调用paddle api的方法
    • 具体的实现方法可以参考: python/paddle/base/layers/math_op_patch.py

提交内容:

  • 参考python/paddle/base/layers/math_op_patch.py实现OpResult的patch逻辑
  • 参考test/legacy_test/test_math_op_patch.py添加单测进行验证

技术要求:

  • 熟练掌握Python
  • 对新老IR体系有一定了解

No.50:为 Paddle 新增 slice 的 spmd 切分推导规则

详细描述:

实现 slice 的切分推导规则,包括正向推导和逆向推导:

  • 正向推导,根据输入的切分状态推导输出的切分状态
  • 逆向推导,根据输出的切分状态推导输入的切分状态
  • 可参考 切分推导规则参考文档,paddle 中现有的切分推导规则 (Paddle/paddle/phi/infermeta/spmd_rules,可参考 split),tensorflow (tensorflow/tensorflow/dtensor/mlir/expansions/slice_spmd_expander.cc) 和 pytorch 中的实现逻辑 (pytorch/torch/distributed/_tensor/ops/tensor_ops.py)

提交内容:

  • 推导规则实现代码(C++),放在Paddle/paddle/phi/infermeta/spmd_rules 目录
  • 单测代码(Python),放在 Paddle/test/auto_parallel/spmd_rules 目录

技术要求:

  • 熟练掌握 C++,Python
  • 了解分布式训练

No.51:为 Paddle 新增 flatten 的 spmd 切分推导规则

详细描述:

实现 flatten 的切分推导规则,包括正向推导和逆向推导:

  • 正向推导,根据输入的切分状态推导输出的切分状态
  • 逆向推导,根据输出的切分状态推导输入的切分状态
  • 可参考 切分推导规则参考文档,paddle 中现有的切分推导规则 (Paddle/paddle/phi/infermeta/spmd_rules),tensorflow (tensorflow/tensorflow/dtensor/mlir/expansions) 和 pytorch 中相关的实现逻辑 (pytorch/torch/distributed/_tensor/ops)

提交内容:

  • 推导规则实现代码(C++),放在Paddle/paddle/phi/infermeta/spmd_rules 目录
  • 单测代码(Python),放在 Paddle/test/auto_parallel/spmd_rules 目录

技术要求:

  • 熟练掌握 C++,Python
  • 了解分布式训练

No.52:为 Paddle 新增 squeeze 和 unsqueeze 的 spmd 切分推导规则

详细描述:

实现 squeeze 和 unsqueeze 的切分推导规则,包括正向推导和逆向推导:

  • 正向推导,根据输入的切分状态推导输出的切分状态
  • 逆向推导,根据输出的切分状态推导输入的切分状态
  • 可参考 切分推导规则参考文档,paddle 中现有的切分推导规则 (Paddle/paddle/phi/infermeta/spmd_rules),tensorflow (tensorflow/tensorflow/dtensor/mlir/expansions/squeeze_spmd_expander.cc) 和 pytorch 中的实现逻辑 (pytorch/torch/distributed/_tensor/ops/tensor_ops.py)

提交内容:

  • 推导规则实现代码(C++),放在Paddle/paddle/phi/infermeta/spmd_rules 目录
  • 单测代码(Python),放在 Paddle/test/auto_parallel/spmd_rules 目录

技术要求:

  • 熟练掌握 C++,Python
  • 了解分布式训练

No.101:将paddle内部的fused_multi_transformer/fused_multi_transformer_int8算子及其kernel实现从fluid下迁移到phi下

详细描述:

将paddle内部的fused_multi_transformer/fused_multi_transformer_int8算子及其kernel从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置fused_ops.yaml自定生成op定义
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测test_fused_multi_transformer_op.py/test_fused_multi_transformer_int8_op.py运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

提交内容:

  • kernel迁移到 paddle/phi/kernels/fusion目录下
  • 算子定义在fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.102:将paddle内部的fused_embedding_eltwise_layernorm、fusion_transpose_flatten_concat和fused_fc_elementwise_layernorm算子及其kernel实现从fluid下迁移到phi下

详细描述:

将paddle内部的fused_embedding_eltwise_layernorm/fusion_transpose_flatten_concat/fused_fc_elementwise_layernorm算子及其kernel从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置fused_ops.yaml自定生成op定义
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测test_emb_eltwise_layernorm_fuse_pass.py/test_ir_embedding_eltwise_layernorm_fuse_pass.py/test_transpose_flatten_concat_fuse_pass.py/test_fused_fc_elementwise_layernorm_op.py运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

提交内容:

  • kernel迁移到 paddle/phi/kernels/fusion目录下
  • 算子定义在fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.103:将paddle内部的skip_layernorm、fc和fused_bias_dropout_residual_layer_norm算子及其kernel实现从fluid下迁移到phi下

详细描述:

将paddle内部的skip_layernorm/fc/fused_bias_dropout_residual_layer_norm算子及其kernel从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置fused_ops.yaml自定生成op定义
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测test_trt_skip_layernorm_fuse_pass.py/test_fc_op.py/test_fused_bias_dropout_residual_layer_norm_op.py运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

提交内容:

  • kernel迁移到 paddle/phi/kernels/fusion目录下
  • 算子定义在fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.104:将paddle内部的self_dp_attention和fusion_repeated_fc_relu/fusion_squared_mat_sub算子及其kernel实现从fluid下迁移到phi下

详细描述:

将paddle内部的self_dp_attention/fusion_repeated_fc_relu/fusion_squared_mat_sub算子及其kernel从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置fused_ops.yaml自定生成op定义
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测test_fused_vit_attention.py/test_fusion_repeated_fc_relu_op.py/test_fusion_squared_mat_sub_op.py运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

提交内容:

  • kernel迁移到 paddle/phi/kernels/fusion目录下
  • 算子定义在fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.105:将paddle内部的fusion_gru、fusion_seqconv_eltadd_relu和fusion_seqexpand_concat_fc算子及其kernel实现从fluid下迁移到phi下

详细描述:

将paddle内部的fusion_gru/fusion_seqconv_eltadd_relu/fusion_seqexpand_concat_fc算子及其kernel从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置fused_ops.yaml自定生成op定义
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测test_fusion_gru_op.py/test_fusion_seqconv_eltadd_relu_op.py/test_fusion_seqexpand_concat_fc_op.py运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

提交内容:

  • kernel迁移到 paddle/phi/kernels/fusion目录下
  • 算子定义在fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.112:将paddle内部的read_file、fused_gemm_epilogue算子及其kernel实现从fluid下迁移到phi下;添加identity_loss的yaml配置

详细描述:

将paddle内部的read_file、fused_gemm_epilogue算子及其kernel实现从fluid下迁移到phi下,包括如下工作:

  • 将fluid下的手写op定义删除,配置yaml文件生成op定义。read_file配置在ops.yaml文件内,fused_gemm_epilogue配置在fused_ops.yaml内。
  • 将对应的kernel迁移到phi下
  • 迁移前后保证单测 test_read_file.py 和 test_fused_gemm_epilogue_op.py 运行成功
  • 开启FLAGS_enable_new_ir_in_executor=1,单测也可以运行成功

添加identity_loss的yaml配置,包括如下工作:

  • 将fluid下的手写op定义删除,配置ops.yaml自定生成op定义

提交内容:

  • read_file迁移到paddle/phi/kernels目录下,fused_gemm_epilogue迁移到paddle/phi/kernels/fusion目录下
  • 算子定义在ops.yaml和fused_ops.yaml下配置

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#56846

No.123:结合paddle现有的动半架构,新增缺少的跨mesh下的reshard转换函数

详细描述:

在paddle的动半架构下,设计开发reshard模块,当输入输出的分布式状态不匹配时,插入合适的通信操作进行转换,包括以下工作:

  • 为了支持流水并行场景,新增跨mesh下的replicated状态到partial状态的转换。
  • 为了支持流水并行场景,新增对应的跨mesh下的partial状态到replicated状态的转换。
  • 以上功能,需要加对应单测保证功能正确性。

提交内容:

  • 在paddle/phi/core/distributed/auto_parallel/reshard目录下,新增RToPCrossMeshReshardFunction
  • 在paddle/phi/core/distributed/auto_parallel/reshard目录下,新增PToRCrossMeshReshardFunction
  • 对应单测写在test/auto_parallel目录下

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#58550

No.124:结合paddle现有的动半架构,新增缺少的跨mesh下多对一和一对多的reshard转换函数

详细描述:

在paddle的动半架构下,设计开发reshard模块,当输入输出的分布式状态不匹配时,插入合适的通信操作进行转换,包括以下工作:

  • 为了支持流水并行场景下,在一个进程上打印全量数据,新增任意状态到replicated状态的转换
  • 为了支持流水并行场景下,在一个进程上打印全量数据,新增replicated状态到任意状态的转换
  • 以上功能,需要加对应单测保证功能正确性。

提交内容:

  • 在paddle/phi/core/distributed/auto_parallel/reshard目录下,新增XToRReshardFunction
  • 在paddle/phi/core/distributed/auto_parallel/reshard目录下,新增RToXReshardFunction
  • 对应单测写在test/auto_parallel目录下

技术要求:

  • 熟练掌握 C++,Python

参考PR:

PaddlePaddle/Paddle#57432