Skip to content

【快乐开源】将 PyLayer 机制迁移至 PIR 体系下 #60688

@MarioLulab

Description

@MarioLulab

This project will be mentored by @MarioLulab

1. 背景

飞桨的动态图 PyLayer 向用户提供了一种「高度灵活且便利」的自定义网络层前、反向计算的机制,比如存在一些用户自定义的计算逻辑,无法通过飞桨 现有的某个 API 或某些 API 组合实现,故可以借助 PyLayer 来实现用户的「idea」。在之前的工作中,飞桨的动态图中的 PyLayer 机制能够与飞桨的动转静@to_staitc 互通,支持模型中 PyLayer 的自定义层能够被 @to_static 感知并正确地生成静态图 Program,支撑转静训练导出推理

PyLayer 支持 @to_static 的思路是使用 Paddle 基于 AST 的动转静转写工具,获取动态图 PyLayer 的正反向逻辑,分别创建前向 block 和反向 block,并创建静态图 PyLayer Op。这工作的基础便是设计并实现了静态图 PyLayer Op,其功能是能够运行用户创建的前向 block 和反向 block。

目前静态图 PyLayer Op 仍是基于旧 IR,但从 Paddle 2.6 版本开始,Paddle 团队引入 PIR 作为静态图 IR。随着 PIR 底层机制的日益完善,我们可以把 PyLayer 机制迁移至 PIR 体系下,进一步支持动转静等相关工作,保证 Paddle 的完备性和高效性。

2.1 个人收益

学习 PyLayer 旧 IR 体系代码和 PIR 体系核心机制代码,掌握开源套件开发基本知识
熟悉 Paddle 中控制流算子相关知识
熟悉 Paddle 中自动微分机制
熟悉 Paddle 中动转静原理和工具的相关知识

2.2 Paddle 主框架收益

完善动转静机制
完善控制流算子正反向机制

3. 开发流程

3.1 阅读「PyLayer 支持 @to_static」的设计文档

文档路径:https://github.com/MarioLulab/GLCC2023-Paddle-Record/tree/main

3.2 PyLayer 机制迁移至 PIR 体系代码开发

  • 完成 PyLayer Op 的「前向」PIR 适配
  • 完成 PyLayer Op 的「反向」PIR 适配
  • PIR 体系下的 PyLayer Op 能支持动转静训练
  • PIR 体系下的 PyLayer Op 能支持导出推理

3.3 整理代码并提交PR

参考 Paddle文档-贡献指南-整理代码并提交

4. 参考资料

https://github.com/MarioLulab/GLCC2023-Paddle-Record/tree/main
https://github.com/PaddlePaddle/community/blob/master/pfcc/paddle-code-reading/IR_Dialect/control_flow.md


奖励:2000

Metadata

Metadata

Labels

HappyOpenSource快乐开源活动issue与PRPFCCPaddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfccstatus/close已关闭

Type

No type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions