Skip to content
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

推理速度问题 #8

Closed
Gatsby23 opened this issue Jun 28, 2023 · 19 comments
Closed

推理速度问题 #8

Gatsby23 opened this issue Jun 28, 2023 · 19 comments
Labels
enhancement New feature or request

Comments

@Gatsby23
Copy link

Gatsby23 commented Jun 28, 2023

您好,感谢您的工作。最近我在我电脑上测试这个工程(RTX3000+128G内存)。我看README.md中表示,速度应该在6ms左右,但我电脑上测试single_shot_demo结果是500ms。想问下这个速度正常吗?

@Natsu-Akatsuki
Copy link
Owner

1)在TensorRT engine生成完成后,总时间包括预处理+推理+后处理超过100ms都不正常,具体时间忘了,待我整理一下补充下文档;
2)然后这里的6ms我记得是后处理的部分;
3)如想共讨和定位问题,请将环境依赖版本,已做过的操作进行描述

@Gatsby23
Copy link
Author

我重新检查了下,是我之前用kFP16的方式来生成推理模型,所以速度慢了。现在换回kFP32,但速度依然在42ms,速度还是偏慢

@Gatsby23
Copy link
Author

您好,模型部署这块,有什么资料可以学习吗?

@Natsu-Akatsuki
Copy link
Owner

1)你这个速度统计时的时间包括预处理、推理和后处理吗?更刁钻一点的话,还包括GPU初始化的时间吗?
2)用FP16配置参数优化ONNX模型时生成的engine模型时间比用KFP32生成engine模型的时间要长,而且长很多。但是预测时KFP16是比KFP32要快很多的。印象中推理时间前者是10ms+,或者是500ms+。你这个kFP32速度42ms,有悖于我们使用高版本TensorRT时的现象,我回头有时间用30系列的再测一下。
3)速度偏慢:你预期的是多少
4)关于模型部署,你指的是TensorRT部署的话,我自己的经验还是以项目为导向吧,有啥就查一波文档,学习别人的源码。官方文档其实也挺全的了。

@Gatsby23
Copy link
Author

1)你这个速度统计时的时间包括预处理、推理和后处理吗?更刁钻一点的话,还包括GPU初始化的时间吗? 2)用FP16配置参数优化ONNX模型时生成的engine模型时间比用KFP32生成engine模型的时间要长,而且长很多。但是预测时KFP16是比KFP32要快很多的。印象中推理时间前者是10ms+,或者是500ms+。你这个kFP32速度42ms,有悖于我们使用高版本TensorRT时的现象,我回头有时间用30系列的再测一下。 3)速度偏慢:你预期的是多少 4)关于模型部署,你指的是TensorRT部署的话,我自己的经验还是以项目为导向吧,有啥就查一波文档,学习别人的源码。官方文档其实也挺全的了。

多谢你的回答,这边我是打开Performance_LOG这个标志来统计时间,这里只说了推理时间40ms。我期望推理时间是10ms左右。
Screenshot from 2023-06-28 13-01-54

@Gatsby23
Copy link
Author

1)你这个速度统计时的时间包括预处理、推理和后处理吗?更刁钻一点的话,还包括GPU初始化的时间吗? 2)用FP16配置参数优化ONNX模型时生成的engine模型时间比用KFP32生成engine模型的时间要长,而且长很多。但是预测时KFP16是比KFP32要快很多的。印象中推理时间前者是10ms+,或者是500ms+。你这个kFP32速度42ms,有悖于我们使用高版本TensorRT时的现象,我回头有时间用30系列的再测一下。 3)速度偏慢:你预期的是多少 4)关于模型部署,你指的是TensorRT部署的话,我自己的经验还是以项目为导向吧,有啥就查一波文档,学习别人的源码。官方文档其实也挺全的了。

这个是时间统计结果:
Screenshot from 2023-06-28 13-05-59

@Gatsby23
Copy link
Author

您好,我这边重新测试了一下:
我的环境配置是:
GPU: Quadro RTX 3000 Mobile / Max-Q
CUDA:11.6
LibTorch:1.13.1+cu116
TensorRT: 8.4.1
当我在文件netTensorRT.cpp 260行设置为FP32时

config->setFlag(nvinfer1::BuilderFlag::kTF32);

程序预测整体结果正确(和Rangnet_lib相同),但速度缓慢,一帧的推理要183ms+.
当我设置为16时,能实现加速(推理一帧是42ms),但整体预测结果有较大偏差,不知道您遇到过没?

@Natsu-Akatsuki
Copy link
Owner

1)关于不同优化参数16和32,在高版本TRT效果不一样的问题:如果是这个的话,本仓库是解决了这个问题。
2)然后,看下你的输入,你使用的是例程的数据(即KITTI数据集的数据)还是你自己的数据?预测结果差别很大摆个图看看。

@Gatsby23
Copy link
Author

1)关于不同优化参数16和32,在高版本TRT效果不一样的问题:如果是这个的话,本仓库是解决了这个问题。 2)然后,看下你的输入,你使用的是例程的数据(即KITTI数据集的数据)还是你自己的数据?预测结果差别很大摆个图看看。
这是32的结果:
Screenshot from 2023-06-28 17-21-59
这是16的结果:
Screenshot from 2023-06-28 17-33-12

@Natsu-Akatsuki
Copy link
Owner

Natsu-Akatsuki commented Jun 28, 2023

1)ok,感谢您的测试。经我这边的复现(3060显卡,TRT8.4和TRT8.2的均进行了测试)和根据您这边的结果,暂时得出如下结论8.4版本并不适用于当前仓库。暂时通过测试为最高TRT版本为8.2.5.1。(通过测试即:16和32的结果定性上差别不大)
2)具体原因可能是TensorRT对优化部分的实现进行了改动,后续将根据文档API进行升级和优化,再次感谢您的反馈。

@Natsu-Akatsuki Natsu-Akatsuki added the enhancement New feature or request label Jun 28, 2023
@Gatsby23
Copy link
Author

1)ok,感谢您的测试。经我这边的复现(3060显卡,TRT8.4和TRT8.2的均进行了测试)和根据您这边的结果,暂时得出如下结论8.4版本并不适用于当前仓库。暂时通过测试为最高TRT版本为8.2.5.1。(通过测试即:16和32的结果定性上差别不大) 2)具体原因可能是TensorRT对优化部分的实现进行了改动,后续将根据文档API进行升级和优化,再次感谢您的反馈。

OK,这边是使用3060,测试下来运行速度是在10ms左右对吗?

@Natsu-Akatsuki
Copy link
Owner

如果你想总时间低于10ms,感觉你要换一种实现了,再怎么优化他这个实现应该不会低于10ms。

TIME: preprocess_time: 1.37318 ms.
TIME: infer_time: 23.6074 ms.
TIME: postprocess_time: 4.96026 ms.

@Gatsby23
Copy link
Author

如果你想总时间低于10ms,感觉你要换一种实现了,再怎么优化他这个实现应该不会低于10ms。

TIME: preprocess_time: 1.37318 ms. TIME: infer_time: 23.6074 ms. TIME: postprocess_time: 4.96026 ms.

看样子上4090,应该有能达到这方面的希望了。另一个问题是,关于这个精度问题,你之前是怎么debug和解决的,能介绍下思路吗?

@Natsu-Akatsuki
Copy link
Owner

1)当时定位这个问题找了挺多资料的,找着找着就找到有关 overflow 和 underflow 的问题。然后从这个去切入,找到有问题的layer(二分法),然后冻结它就好了(代码部分详看 Here)。该原仓库的反馈见 Here
2)然后为啥4090就有希望了,对于它提升这么大保持怀疑。

@Gatsby23
Copy link
Author

1)当时定位这个问题找了挺多资料的,找着找着就找到有关 overflow 和 underflow 的问题。然后从这个去切入,找到有问题的layer(二分法),然后冻结它就好了(代码部分详看 Here)。该原仓库的反馈见 Here。 2)然后为啥4090就有希望了,对于它提升这么大保持怀疑。

我的想法是现在推理速度应该和显卡的关系比较大。我显卡性能略若于2080 Super,所以40ms左右,现在来看,显卡升级到4090,应该来说就能保证一定的实时性。

@Natsu-Akatsuki
Copy link
Owner

OK,期待你的反馈

@Natsu-Akatsuki
Copy link
Owner

1)解决用 TensorRT 8.4 优化后的 engine 预测结果异常的问题
2)有关提高运行速度的相关方案,欢迎 PR

@Gatsby23
Copy link
Author

Gatsby23 commented Jul 3, 2023

1)解决用 TensorRT 8.4 优化后的 engine 预测结果异常的问题 2)有关提高运行速度的相关方案,欢迎 PR

多谢你的帮助!经过测试,现在的推理速度可以达到20ms左右,基本上满足了实时的需求。

@Natsu-Akatsuki
Copy link
Owner

OK,欢迎交流~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants