-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
【PIR】PIR下的分布式算子注册 #60436
Labels
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
status/close
已关闭
Comments
Closed
【报名】:6、7、16 |
【报名】:1、3 |
【报名】:24、25 |
paddle-bot
bot
added
the
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
label
Dec 28, 2023
【报名】:13、14、15 |
This was referenced Jan 15, 2024
Open
This was referenced Mar 5, 2024
【报名】12、17、26 |
【报名】4、5、8、10、11 |
Closed
This was referenced Mar 14, 2024
【报名】:20 |
【报名】:19 |
【报名】:22 |
【PIR】PIR下的分布式算子注册 已全部完成,感谢参与的小伙伴们!
欢迎继续参与快乐开源的其他任务! |
github-project-automation
bot
moved this from In Progress
to Done
in Call for Contributions
May 11, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
PFCC
Paddle Framework Contributor Club,https://github.com/PaddlePaddle/community/tree/master/pfcc
status/close
已关闭
一、需求背景
飞桨正在构建一套新的IR体系.在新IR下飞桨基于动态图的更规范的算子定义(ops.yaml、legacy_ops.yaml)生成了新IR体系下的算子.在新的IR体系下仍然需要保证旧IR的兼容性.为此飞桨提供了
ProgramTranslator
(相关代码位于paddle/fluid/ir_adaptor/translator/
),它可以将旧IR表示下的计算图翻译为新IR下的计算图.目前,ProgramTranslator
的核心工作是完成单个OP
的翻译.也就是将旧IR下定义的OP
(一般定义在paddle/fluid/operators
文件夹下)翻译为新IR下定义的算子.现在有一部分分布式算子在新IR下是没有定义的.我们需要在新IR下为它们补充定义并保证
ProgramTranslator
可以成功完成翻译.需要注册的分布式算子如下:
@enkilee #62369
@enkilee #62270
@xiaoyewww #64203
@enkilee #62505
@enkilee #62416
@enkilee #62982
@xingmingyyj #63867
PR提交模板
【PIR Dist Op Reg No.1】 reg c_reduce_min
认领方式
请大家以 comment 的形式认领任务,如:
多个任务之间需要使用中文顿号分隔,报名多个连续任务可用横线表示,如 2-5
PR 提交格式:在 PR 的标题中以 【PIR OpTest Fix No.xxx】 开头,注明任务编号
看板信息
二、Tutorial
每个任务的主要工作可以分为
三个部分,下面展开介绍:
2.1 算子注册
关于算子注册的步骤可以参考 #59382 的
二、Tutorial
.2.2 编写单测
为了验证我们新注册的分布式算子可以被成功的翻译.需要编写一个单测进行验证.
首先,编写的所有单测需要放置在
test/ir/pir/translator
文件夹下,并且继承并且继承TestOpTranscriber
.TestOpTranslator
或TestOpWithBackwardTranslator
,对于只需要注册前向算子的单测需要继承TestOpTranslator
,前向和反向算子同时注册时需要继承TestOpWithBackwardTranslator
.继承继承TestOpTranscribe
时,TestOpTranslator
时,需要重写append_op
方法,在组网时将待测试的Op
加入.check
的主要思路是将旧IR下表示的计算图使用ProgramTranslator
翻译为新IR表示的计算图,然后将新IR表示的计算图进行打印,如果计算图中包含待注册的Op,则说明翻译成功.这里的类名统一采用
TestXXXOpTranslator
的形式,上述代码是对
c_reduce_min
进行测试的例子.2.3 修改test/ir/pir/translator/CMakeLists.txt
因为现在注册的是分布式算子,如果编译选项
WITH_DISTRIBUTE
不打开的话,这部分算子是不会被编译注册的.所以,即便完成上述操作在某些CI上仍然可能遇到下述问题:解决方法是修改CMakeLists.
可以看出
DISTRIBUTED_OP_TRANSLATOR_TEST
中记录了分布式算子对应的单测,在WITH_DISTRIBUTE
选项没有打开时,这些单测将会从TEST_INTERP_CASES
删除,这样在CI上就不会执行该单测了.以
c_allreduce_min
这个算子为例,单测名称对应为test_c_allreduce_min_translator
,所以,set(DISTRIBUTED_OP_TRANSLATOR_TEST test_c_reduce_min_translator test_c_allreduce_min_translator)
将对应单测名称加入集合就可以了.
三、Q&A
1.反向算子定义的位置?
A:取决于前向算子定义的位置.如果前向定义在paddle/phi/api/yaml/ops.yaml, 反向就需要定义在 paddle/phi/api/yaml/backward.yaml.如果前向定义在 paddle/fluid/pir/dialect/operator/ir/ops.yaml,就把反向定义在paddle/fluid/pir/dialect/operator/ir/ops_backward.yaml.
统计信息
The text was updated successfully, but these errors were encountered: