-
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-TensorRT converter推全升级 #69178
Labels
Comments
lizexu123
changed the title
【开源任务】新IR-TensorRT converter推全升级
【开源任务】PIR-TensorRT converter推全升级
Nov 6, 2024
【报名】:2 |
【报名】:7 |
【报名】:9、10 |
【报名】:1 |
【报名】:19 |
【报名】:17、41-45、50 |
【报名】:11、12 |
This was referenced Nov 14, 2024
【报名】:64 |
【报名】:24 |
【报名】:23 |
【报名】:25 |
【报名】:18 |
【报名】:36 |
【报名】:21、51 |
【报名】:56 |
|
【报名】:24 |
【报名】:57 |
【报名】:29 |
【报名】:28 |
【报名】:31 |
【报名】:27 |
【报名】:25、64 |
【报名】:52 |
【报名】:62 |
【报名】:54 |
【报名】:8 |
【报名】:62、64 |
【报名】:32 |
【报名】:37 |
74 tasks
【报名】:61 |
【报名】:41 |
【报名】:6 |
【报名】:66 |
【报名】:67、68 |
【报名】:22 |
【报名】:69、70、71、72 |
【报名】:74、75、76、77、78 |
【报名】:49 |
【报名】:7 |
【报名】:73 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
一、背景和任务列表
TensorRT(以下简称TRT)具有良好的性能和广泛的模型兼容性,Paddle-TensorRT是基于pir开发的将paddle op下沉到TensorRT op的机制,该机制将原始的pir算子经过Marker Pass和Partition Pass识别出可以进入TRT的子图,经过TensorRT Converter将标记的子图转换为TensorRTEngine Op,最终大部分的执行逻辑在TensorRT中执行。
Paddle3.0后全面切换PIR-TensorRT,届时所有模型将在PIR模式下运行,目前还有62个pir算子未进入TensorRT,为了充分利用TensorRT的良好性能,需要开发剩余的converter,将pir算子映射到TensorRT支持的算子上。
注意:PIR-TensorRT只适用于Linux平台,并且默认支持TensorRT版本大于8.0
⭐️ 提交PR 模版 ⭐️:
本期需要完成的converter如下,整体进展:
@fangfangssj #69663 #70429
@lizexu123 #70507
@lizexu123
@PolaKuma #69599
@PolaKuma #69599
pd_op.c_allreduce_sumpd_op.c_allreduce_sumpd_op.c_allreduce_sumpd_op.c_allreduce_sum@xz-alex
@PolaKuma #69580
@PolaKuma #69736
@winffke
@YuanRisheng
@PolaKuma #70556
@winffke
@PolaKuma #69693
@ZHOU05030
@winffke
@fangfangssj #69889
@winffke
@fangfangssj #69889
@PolaKuma #69599
@yangrongxinuser
@lizexu123 #70267
@fangfangssj #70433 #70429
@fangfangssj
@lizexu123 #70168
@nizne9
@fangfangssj #70535
@nizne9
@fangfangssj #70535
@nizne9
@fangfangssj #70535
@nizne9
@fangfangssj #70535
@PolaKuma
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
@fangfangssj #70535
二、任务详情
2.1 Marker Pass
作用:用来标记pir Op是否可以进入TensorRT子图。
2.1.1 没有限制条件进入TensorRT的算子
paddle/fluid/pir/transforms/tensorrt/trt_op_marker_pass.cc 用于判断 op 是否可翻译为 TensorRT,pir下的算子定义位于/build/paddle/fluid/pir/dialect/operator/ir/pd_op.h下,具体的实现在pd_op.xx.cc中可找到,还有部分特殊算子在/paddle/fluid/pir/dialect/operator/ir/manual_op.h中,对于没有限制条件进入TensorRT的算子,可参考 pr#68395。需要使用 DEFINE_GENERAL_PATTERN 宏定义 op 匹配规则,并用 ADD_PATTERN 将模式类实例注册到模式集合 ps 中。PIR 中算子定义位于 build/paddle/fluid/pir/dialect/operator/ir/pd_op.h,且 PIR-TensorRT 仅支持 dynamic_shape。
2.1.2 有限制条件进入TensorRT的算子
可参考旧ir-TensorRT下的/paddle/fluid/inference/tensorrt/op_teller.cc,此文件判断算子能否进入TensorRT。以pd_op.cast算子为例子。
2.2 Converter
作用:将划分出来的能够进入TensorRT的算子映射为TensorRT子图,删除子图并替换成带有TensorRT引擎的TensorRTEngineOp。
此处以pd_op.shape为例说明converter书写流程。
1.书写trt_op_marekr_pass.cc,先确保pd_op.shape能够进入TensorRT
2.在Paddle官网搜索shape,点击源代码,shape算子的定义在python/paddle/tensor/attribute.py,pd_op.shape放在相应的python/paddle/tensorrt/impls/attribute中。
3.可参考旧 IR 下的 converter(路径:/paddle/fluid/inference/tensorrt/convert/shape_op.cc)。旧 IR 的算子 converter 位于 /paddle/fluid/inference/tensorrt/convert。
4.还有部分算子的输入存在pir::value的情况,这类算子在书写converter时也需要关注到,以pd_op.roll为例说明pr#69117。
2.3 单测
pd_op.shape的单测需放在 test_converter_attribute.py 中。对于输入需设置 min_shape 和 max_shape,而对于 shape_tensor 的特殊情况,只需写在 feed_list 中,无需指定 min_shape 和 max_shape。
case1: 测试float32下converter的输出和pir原生推理的结果误差是否满足要求。注意,为了防止ci单测覆盖率不够,我们需要加一个测量Marker的单测
case2: 测试int64下converter的输出和pir原生推理的结果误差是否满足要求。
case3:对于pd_op.roll的shift输入为pir::value的情况(单测在test_converter_manipulation.py)。
四、代码review合入
如果有问题以及代码的review,可以找github账号:YuanRisheng ,lizexu123,Hanyonggong,anderson101866提问
五、可参考PR
pr#68686 (Marker有限制条件进入TensorRT)
pr#69117 (pd_op.roll的输入有pir::value情况)
pr#68546(Marker无限制条件进入TensorRT)
注意,Paddle编译PIR-TensorRT时,需打开WITH_PYTHON=ON,WITH_GPU=ON,WITH_TENSORRT=ON,-WITH_PIP_TENSORRT=ON,也可以指定-DTENSORRT_ROOT=/usr/local/TensorRT-8.6.1.6(根据自己环境) ,不需要单独安装python版本的tensorrt,下载paddlepaddle_gpu-0.0.0-cp39-cp39-linux_x86_64.whl包时,会自动根据环境的tensorrt版本安装对应python版本的tensorrt
看板信息
统计信息
The text was updated successfully, but these errors were encountered: