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

在使用onnxruntime作为推理后端时,如何设置cudnn_conv_algo_search = DEFAULT #2484

Open
wujingxin521 opened this issue Jul 3, 2024 · 0 comments
Assignees

Comments

@wujingxin521
Copy link

我开发的程序用于工业场景的视觉检测,但在模型运行时会出现耗时过长的问题。通过设置 CUDAExecutionProvider = DEFAULT 可以解决这些耗时的情况,但在FastDeploy中找不到设置该参数的入口。

环境

  • 【编译命令】官方编译好的dll
  • 【系统平台】:Windows x64(Windows10)
  • 【模型类型】:onnx
  • 【后端】:onnxruntime

问题描述及复现步骤

  • 【性能问题】
    以下两种场景会出现耗时过长的问题:

模型已加载的情况下,第一次运行;
模型运行多次后,输入的Tensor批次或尺寸发生变化,紧接着的第一次运行。
以160032003的图像分割为例,这两种情况的耗时为6000ms,而正常运行时的耗时在200ms以内。

解决问题的急迫性:

1.设备安全性: 工业软件通常有超时设定,若在规定时间内未执行完毕,会及时停机保护设备。由于模型第一次运行耗时过长,导致超时停机时间远超最大限定。
2.非人性化操作: 为了衔接上下游设备,必须在设备正式运行前先跑一次程序。如果操作人员忘记这一步骤,设备衔接可能会出问题。
3.使用受限: 处理的图像有大有小,批次处理并不比每张单独推理快多少。对于小图像推理时间更短,但受制于该问题,不得不将小图缩放到指定尺寸,导致整体推理时间增加。
4.软件启动慢: 为了确保流程顺畅,设备运行前需要执行一次推理。设备使用多个模型,单个模型加载耗时1s,第一次推理耗时6s。如果有10个模型,模型加载耗时10s,推理耗时60s。在调整相机和算法参数时,频繁关闭重开软件来查看效果会耗费大量时间,现场人员很难接受。

过往解决办法

最初使用C#调用onnxrutime时,通过设置 cudnn_conv_algo_search = "DEFAULT" 解决了这个问题,使得模型第一次运行和连续运行的耗时一致。

期待解决办法

现在使用C++调用Fastdeploy,希望能提供设置接口以便设置该参数。
providers=[ ("CUDAExecutionProvider", { # "cudnn_conv_algo_search": "DEFAULT", # "cudnn_conv_algo_search": "HEURISTIC", "cudnn_conv_algo_search": "EXHAUSTIVE", }), # "CPUExecutionProvider", ]

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

No branches or pull requests

2 participants