🪄 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 测试通过
- 注意所需支持的函数签名,大多函数只需要支持部分签名即可
参考资料
- 关于 Builtin 函数 Dispatch 原理及设计理念,可以参考 Builtin Dispatcher 设计文档
- 可以参考的 PR
任务详情
序号 | 任务名 | 难度 | 认领人 | 提交 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 测试通过
参考资料
- #118
- Python
ceval.c
源码 sot/opcode_translator/executor/opcode_executor.py
中其他字节码的实现
任务详情
序号 | 任务名 | 难度 | 认领人 | 提交 PR |
---|---|---|---|---|
LOAD_NAME |
||||
2.2 | ✅ MAP_ADD (dictcomp) |
简单 | @AndPuQing | #319 |
2.3 | ✅ UNARY_NOT |
简单 | @2742195759 | #301 |
2.4 | ✅ UNPACK_EX (a, *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)