此文档展示 PaddlePaddle Hackathon 第五期活动——开源贡献个人挑战赛框架开发任务 详细介绍,更多详见 PaddlePaddle Hackathon 说明。
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
为了能自动化将其它深度学习代码转写成 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的使用,善于捕捉并分析细节差异
详细描述:
- 在Paddle支持了 stride 后,大多模型会大量执行ContiguousKernel、StridedCopyKernel,因此两个 kernel 的性能尤为关键。
- 目前两个 kernel 都是通过 numel index 计算数据偏移地址,需要一个 for 循环做计算,计算偏移地址效率低,导致 kernel 性能差。如果改成跟进 stride 计算下一个 element 的偏移地址,则性能会大幅提升。PR56866 提供了初步示例,仍需调试,可以参考。更好的办法是先优化CPU kernel,再优化GPU,因为CPU易调试。设计文档示例:op_optimization_example.md。优化方法参考:算子性能优化方法。
提交内容:
- 代码提交至 contiguous_kernel.cc,contiguous_kernel.cu,strided_copy_kernel.cc,strided_copy_kernel.cu
- 在代码 PR 中提交 OP 的性能数据变化表格,代码 PR 格式规范见示例。
- 测试case需要覆盖全部的计算分支,同时至少覆盖fp32,fp16两种数据类型。
技术要求:
- 了解stride原理
- 了解CUDA编程、kernel性能优化
详细描述:
- 在新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体系有一定了解
详细描述:
实现 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
- 了解分布式训练
详细描述:
实现 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
- 了解分布式训练
详细描述:
实现 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
- 了解分布式训练
详细描述:
将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:
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:
详细描述:
将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:
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:
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:
详细描述:
将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:
详细描述:
在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:
详细描述:
在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: