PaddlePaddle/PaddleSOT

🪄 PaddleSOT 喵喵大入侵计划 💥

SigureMo opened this issue · 3 comments

🌌 前情提要

喵!距快乐喵喵开源任务 #133 发布已经过去两个月了,在各位大佬的帮助下,PaddleSOT 目前在「功能性」上已经基本打磨完备,我们下一阶段将会冲击「性能」优化,以及进行下 Python 3.11 版本的支持,以推动 Paddle 启用 SOT 动转静的能力,为之后的发(ru)布(qin)做准备~

⚡️ 性能优化项 1 —— Builtin 函数调用支持

任务描述

对于 Python 一些 C 语言中定义的原生函数,我们在模拟执行阶段是需要针对每一个函数进行特殊处理的,而对于没有支持的函数,我们会进行 Break Graph 处理,使该函数运行在动态图下,以保证 SOT 的正确性。

这种方式的好处是我们可以较为容易地实现 100% 的转静成功率,但在初期会有较为多的子图打断出现,因此我们需要对一些常用的函数进行支持,以减少子图打断,增大子图,提高性能。

这里统计了一些较为常用但却没有支持的 Builtin 函数,欢迎大家尝试支持一下~

任务要求

  • 为不支持的 builtin 函数添加 dispatch(即 Dispatcher.register),并实现相应的模拟执行逻辑
  • 增加相应单测到 tests/ 下(如果可以复用已有文件的话最好不要新建文件)
  • 提交 PR,CI 测试通过
  • 注意所需支持的函数签名,大多函数只需要支持部分签名即可

参考资料

任务详情

序号 任务名 难度 认领人 提交 PR
1.1 str.format 支持 中等 @zrr1999 #310
1.2 hasattr 支持

💡

简单 @enkilee #327
1.3 zip 支持

💡

中等 @GreatV
1.4 list 无参数调用(list())支持

💡

简单 @jjyaoao #326
1.5 dict 无参数调用(dict())支持

💡

简单 @jjyaoao #326
1.6 str.lower 无参数调用支持 简单 @zrr1999 #310
1.7 sum List[Const] 和 Tensor 支持

💡

中等 @gouzil #321
1.8 pow 支持

💡

简单 @gouzil #321
1.9 reversed List 支持

💡

中等 @GreatV #318
1.10 math.ceil Const 支持 简单 @AndPuQing #311
1.11 math.floor Const 支持 简单 @AndPuQing #311
1.12 chr Const 支持

💡

简单 @gouzil #321
1.13 ord Const 支持

💡

简单 @gouzil #321
1.14 max List 支持

💡

中等 @gouzil #321
1.15 min List 支持

💡

中等 @gouzil #321
1.16 math.sqrt Const 支持

💡

简单 @gouzil #341
1.17 map 支持

💡

中等 @ranchongzhi

⚙️ 性能优化项 2 —— 字节码支持

任务描述

对于用户传入的函数,我们会取出其 CodeObject,对其中每一条字节码进行模拟执行,当然我们并不可能一开始就支持所有字节码,因此我们的策略是当遇到不支持的字节码时,整个函数 Fallback 回动态图执行,以保证 SOT 的正确性和转静的成功率。

当然,为了保证 SOT 的性能,我们需要尽可能地支持更多的字节码,以减少 Fallback 的次数(毕竟全 Fallback 就没意义了嘛),这里整理了一些常用但却没有支持的字节码,欢迎大家尝试实现一下~

任务要求

  • 为不支持的字节码实现模拟执行逻辑,即在 sot/opcode_translator/executor/opcode_executor.py 中的 OpcodeExecutor 类中实现相应的函数
  • 增加相应单测到 tests/ 下(如果可以复用已有文件的话最好不要新建文件)
  • 提交 PR,CI 测试通过

参考资料

任务详情

序号 任务名 难度 认领人 提交 PR
2.1 LOAD_NAME 中等
2.2 MAP_ADD(dictcomp) 简单 @AndPuQing #319
2.3 UNARY_NOT 简单 @2742195759 #301
2.4 UNPACK_EXa, *b = c 中等 @zrr1999 #320
2.5 IMPORT_NAME 中等

✨ 性能优化项 3 —— 其他

序号 任务名 难度 issue 链接 认领人 提交 PR
3.1 TensorVariable unpack 支持 中等 #308 @gouzil #312
3.2 ObjectVariable setattr side effect 支持 困难 #307 @gouzil #393

Note

任务描述在哪里呢?详情见具体 issue 啦

🔥 Python 3.11 支持

**软件开源创新大赛:飞桨框架任务挑战赛 赛题十:为 PaddleSOT 项目添加 Python3.11 版本支持,tracking issue 见 #360

💥 合入 Paddle

本 repo 只是用于孵化项目,快速迭代的临时 repo,PaddleSOT 将会在近期合入 Paddle,完成「入侵」~

🥷 刺探军情

欢迎各位喵喵参与其他任务包括 Paddle 之艾尔登(IR Dialect)快乐勇士挑战赛在飞桨框架中引入 clang-tidy[xdoctest] 分批次修改已有代码的示例(啊不对这是自家的,不需要刺探)等等,成为全能型喵喵~

Note

不太了解的小伙伴们,可以先学习一下 PaddleSOT 孵化项目介绍部分机制设计文档,以及我们的贡献指南,里面有详细的示例哦~

另外,可以尝试鼠标悬浮在 💡 上哦~

认领1.4、1.5

认领1.17

PaddleSOT 目前已于 PaddlePaddle/Paddle#57824 合入 Paddle,喵喵大入侵计划大成功!感谢各位为 PaddleSOT 做过贡献的喵喵们~

如下是本任务的全部贡献者:

按任务序号顺序,排名不分先后: @zrr1999 (3) @enkilee (1) @GreatV (1) @jjyaoao (2) @gouzil (9) @AndPuQing (3)

如下是所有为 PaddleSOT 的贡献者:

@2742195759 @feifei-111 @0x45f @gouzil @zrr1999 @Aurelius84 @GreatV @NotHaozi @RedContritio @sanbuphy @Difers @enkilee @jjyaoao @AndPuQing @ranchongzhi @ccsuzzh

欢迎继续参与快乐开源的其他任务,也欢迎在 Paddle 主 repo 继续为 SOT 做贡献(迁移后的主体代码见 python/paddle/jit/sot